准备工作
引用pom
<!--生成pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><!--中文字体--><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!--html xml 转为pdf--><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.11</version></dependency>
1. 生成导出
写入到本地的文件中,不存在会自动创建,存在则覆盖,注意双斜杠的写法
两种输入方式:
//直接输出到本地文件PdfWriter.getInstance(document, new FileOutputStream("F:\\Hello simplePDF.pdf"));//byte[]格式文件流输出ByteArrayOutputStream byteStream = new ByteArrayOutputStream();byte[] buffer = byteStream.toByteArray();
public void createInstructionPDF() {try {Document document = new Document(PageSize.A4, 60, 60, 60, 60);//PdfWriter.getInstance(document, new FileOutputStream("F:\\Hello simplePDF.pdf"));ByteArrayOutputStream byteStream = new ByteArrayOutputStream();PdfWriter.getInstance(document, byteStream);document.addAuthor("XXX");document.addCreationDate();document.addCreator("XXX");document.addSubject("XXXXXX");document.addTitle("XXXXXX");document.addHeader("Expires", "0");document.open();//createPdfContent(document);document.close();byte[] buffer = byteStream.toByteArray();FileOutputStream fos = new FileOutputStream("F:\\Instruction.pdf");fos.write(buffer);fos.close();} catch (Exception ex) {}return result;}
2. 设置字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//中文字体Font fontTitle = new Font(bfChinese, 24, Font.BOLD);Font fontBig = new Font(bfChinese, 18, Font.NORMAL);
3. 添加文本和段落
private void createPdfContent(Document document, Font fontTitle,Font fontNormal) {try {Chunk glue = new Chunk(new VerticalPositionMark());//用来隔断到一行的两边int timeOffSet = 3600;Paragraph paragraph1 = new Paragraph("上海旅行攻略", fontTitle);String strTimeOff = "中国比" + cityName + (timeOffSet < 0 ? "快" + Math.abs(timeOffSet) + "小时" : "慢" + Math.abs(timeOffSet) + "小时");Chunk timeChunk = new Chunk(strTimeOff, fontNormal);paragraph1.add(glue);paragraph1.add(timeChunk);paragraph1.setSpacingAfter(10);//距离后面行距document.add(paragraph1);} catch (Exception ex) {}}
4. 添加图片
private void createPic(Document document) {String headPicture = "图片地址链接";try {Image image = Image.getInstance(headPicture);float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin();float documentHeight = documentWidth / 580 * 320;//重新设置宽高image.scaleAbsolute(documentWidth, documentHeight);//重新设置宽高document.add(image);} catch (Exception ex) {}}