準備工作
引用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) {
}
}