java pdf 模板_新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)...

本文详细介绍了如何使用Java的itext库填充PDF模板,并提供了代码示例,包括从Word转换模板、设置表单域属性以及解决中文显示问题的方法。
摘要由CSDN通过智能技术生成

废话少说,不懂itext干啥用的直接去百度吧。

***************制作模板*******************

1.先用word做出界面

92e5a62c143673aadcb81c3a6504834c.png

2.再转换成pdf格式

a92ce64d3b6b621d82cace0fdd79bce6.png

9557b84af70a2d271fad91434679f881.png

3.用Adobe Acrobat 打开你刚刚用word转换成的pdf

c41dfc3dfc392a5aa1a4058bbe9a82c6.png

会出现如下界面

7a06a2e5dec7052bb11dbaeafc3fabd1.png

下一步

9e0e5f23a9c6242f3f4a31c60543c584.png

点击浏览,选择刚才你转换好的pdf

c4d6f3542b263076d567561ec1e8c069.png

下一步

4.打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框,有的人说要改成中文字体,可是我没有改一样成功啦

3c84a7e0b34ebf69f95ce3698c72a969.png

5.一般情况下不需要修改什么东西,至少我没有修改哦

8b18fbdf9183278dec1d68f2fe51b6f6.png

6.直接另存为就行了

************************上程序********************************

准备:itext的jar包包:官网:http://sourceforge.net/projects/itext/files/

因为是利用模板,所以不需要建立字体来解决中文不显示的问题

public void fillTemplate(){//利用模板生成pdf

//模板路径

String templatePath = "pdfFolder/template_demo.pdf";

//生成的新文件路径

String newPDFPath = "pdfFolder/newPdf.pdf";

PdfReader reader;

FileOutputStream out;

ByteArrayOutputStream bos;

PdfStamper stamper;

try {

out = new FileOutputStream(newPDFPath);//输出流

reader = new PdfReader(templatePath);//读取pdf模板

bos = new ByteArrayOutputStream();

stamper = new PdfStamper(reader, bos);

AcroFields form = stamper.getAcroFields();

String[] str = {"123456789","小鲁","男","1994-00-00",

"130222111133338888"

,"河北省唐山市"};

int i = 0;

java.util.Iterator it = form.getFields().keySet().iterator();

while(it.hasNext()){

String name = it.next().toString();

System.out.println(name);

form.setField(name, str[i++]);

}

stamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为true

stamper.close();

Document doc = new Document();

PdfCopy copy = new PdfCopy(doc, out);

doc.open();

PdfImportedPage importPage = copy.getImportedPage(

new PdfReader(bos.toByteArray()), 1);

copy.addPage(importPage);

doc.close();

} catch (IOException e) {

System.out.println(1);

} catch (DocumentException e) {

System.out.println(2);

}

}

模板如图:

d481f6220a9057b5b6d08caaa5ae51a3.png

程序结果如图:

1d7456d9a3b55b76ba422d8e42d4aab8.png

可以看到,少了一个鲁......于是我把模板的表单域的字体改成了宋体,结果中文一个也不显示了,所以我判断是他那个字体支持的中文比较少吧,先不管这个了

现在都两点多了(不是下午两点多啊。。。)

到此时,利用模板生成pdf已经over了,我再说说入门的hello word 级别的程序吧,反正闲着也是闲着

程序一:

1 public void test1(){//生成pdf

2 Document document = newDocument();3 try{4 PdfWriter.getInstance(document, new FileOutputStream("pdfFolder/1.pdf"));5 document.open();6 document.add(new Paragraph("hello word"));7 document.close();8 } catch (FileNotFoundException |DocumentException e) {9 System.out.println("file create exception");10 }11 }

结果:

5df1536de91b363004fb802bc2be3e17.png

可是如果要输出中文呢,上面这个就不行了,就要用到语言包了

最新亚洲语言包:http://sourceforge.net/projects/itext/files/extrajars/

ff51e3f73752b26f7553fb8b9b8fb904.png

1 public voidtest1_1(){2 BaseFont bf;3 Font font = null;4 try{5 bf = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",6 BaseFont.NOT_EMBEDDED);//创建字体7 font = new Font(bf,12);//使用字体8 } catch (DocumentException |IOException e) {9 e.printStackTrace();10 }11 Document document = newDocument();12 try{13 PdfWriter.getInstance(document, new FileOutputStream("pdfFolder/2.pdf"));14 document.open();15 document.add(new Paragraph("hello word 你好 世界",font));//引用字体16 document.close();17 } catch (FileNotFoundException |DocumentException e) {18 System.out.println("file create exception");19 }20 }

结果如下:

60a4201bbf7c759ad3537168da34a9e8.png

另外一种方法:我不用第三方语言包:

我是在工程目录里面新建了一个字体文件夹Font,然后把宋体的字体文件拷贝到这个文件夹里面了

上程序:

1 public voidtest1_2(){2 BaseFont bf;3 Font font = null;4 try{5 bf = BaseFont.createFont("Font/simsun.ttc,1", //注意这里有一个,16 BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);7 font = new Font(bf,12);8 } catch (DocumentException |IOException e) {9 e.printStackTrace();10 }11 Document document = newDocument();12 try{13 PdfWriter.getInstance(document, new FileOutputStream("pdfFolder/3.pdf"));14 document.open();15 document.add(new Paragraph("使用中文另外一种方法",font));16 document.close();17 } catch (FileNotFoundException |DocumentException e) {18 System.out.println("file create exception");19 }20 }

结果“:

a6e3b68f2d899d88ab04cbc0b6625093.png

我如果换成:华康少女文字W5(P).TTC,即

bf = BaseFont.createFont("Font/华康少女文字W5(P).TTC,1", //simsun.ttc

BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

b47585fdda3f838b0bf09918a4e9fe7a.png

哈哈,我喜欢图文并茂的教程02:44:58

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值