java-pdf-itext7、itextpdf 生成pdf 文檔,使用pdf模闆生成(支援中文字型)
itext7 内置對中文(CJK字型)進行了支援,不在依賴其他元件。
//進行中文問題
PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
一、iText 7 資料:
官網:http://developers.itextpdf.com/
官網示例:http://developers.itextpdf.com/content/itext-7-jump-start-tutorial/examples
二、itext7 maven 依賴
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.0.2</version>
<type>pom</type>
</dependency>
三、生成pdf 和使用pdf模闆生成pdf 的方法
pdf模闆需要使用:Adobe Acrobat DC 進行表單制作
package com.demo.preview;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import org.junit.Test;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.border.SolidBorder;
import com.itextpdf.layout.element.Paragraph;
import me.grass.extend.DateExtend;
import me.grass.extend.PathExtend;
import me.grass.extend.StringExtend;
/**
*
* @author xxj
*/
public class ITextPdf7Test {
/**
* 生成一個簡單的pdf檔案
*
*/
@Test
public void createPdf(){
// 生成的新檔案路徑
String fileName = StringExtend.format("itext-pdf-{0}.pdf", DateExtend.getDate("yyyyMMddHHmmss"));
String newPDFPath = PathExtend.Combine("D:/Temp/pdf/", fileName);
try {
//進行中文問題
PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
PdfWriter writer = new PdfWriter(new FileOutputStream(newPDFPath));
//Initialize PDF document
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
Paragraph p =new Paragraph("你好,世界!hello word!");
p.setFont(font);
p.setFontSize(12);
p.setBorder(new SolidBorder(Color.BLACK,0.5f));
document.add(p);
document.close();
writer.close();
pdf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 使用pdf 模闆生成 pdf 檔案
* */
@Test
public void fillTemplate() {// 利用模闆生成pdf
// 模闆路徑
String templatePath = "D:/Temp/pdf/pdf-template-form.pdf";
// 生成的新檔案路徑
String fileName = StringExtend.format("itext-template-{0}.pdf", DateExtend.getDate("yyyyMMddHHmmss"));
String newPDFPath = PathExtend.Combine("D:/Temp/pdf/", fileName);
try {
//Initialize PDF document
PdfDocument pdf = new PdfDocument(new PdfReader(templatePath), new PdfWriter(newPDFPath));
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
Map<String, PdfFormField> fields = form.getFormFields();
//進行中文問題
PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
String[] str = {
"01.hello word!",
"02.你好,世界!",
"03.hello word!",
"04.你好,世界!",
"05.hello word!",
"06.你好,世界!",
"07.hello word!",
"08.你好,世界!",
"09.hello word!",
"10.你好,世界!",
"11.hello word!",
"12.你好,世界!", };
int i = 0;
java.util.Iterator<String> it = fields.keySet().iterator();
while (it.hasNext()) {
//擷取文本域名稱
String name = it.next().toString();
//填充文本域
fields.get(name).setValue(str[i++]).setFont(font).setFontSize(12);
System.out.println(name);
}
form.flattenFields();//設定表單域不可編輯
pdf.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}