java根据模板生成pdf文件并导出

首先你的制作一个pdf模板:

1.先用word做出模板界面

2.文件另存为pdf格式文件

3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。

4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始

进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)

5.做完上面的工作后,直接"另存为"将pdf存储就可以

*****************************************************************************

以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:

1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖


  1. <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
  2. <dependency>
  3. <groupId>com.itextpdf</groupId>
  4. <artifactId>itextpdf</artifactId>
  5. <version>5.5.10</version>
  6. </dependency>

  1. <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
  2. <dependency>
  3. <groupId>com.itextpdf</groupId>
  4. <artifactId>itext-asian</artifactId>
  5. <version>5.2.0</version>
  6. </dependency>

2.下面就是生成pdf代码了


  1. import java.io.ByteArrayOutputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import com.itextpdf.text.Document;
  5. import com.itextpdf.text.DocumentException;
  6. import com.itextpdf.text.pdf.AcroFields;
  7. import com.itextpdf.text.pdf.PdfCopy;
  8. import com.itextpdf.text.pdf.PdfImportedPage;
  9. import com.itextpdf.text.pdf.PdfReader;
  10. import com.itextpdf.text.pdf.PdfStamper;
  11. public class Snippet {
  12. // 利用模板生成pdf
  13. public static void fillTemplate() {
  14. // 模板路径
  15. String templatePath = "E:/测试3.pdf";
  16. // 生成的新文件路径
  17. String newPDFPath = "E:/ceshi.pdf";
  18. PdfReader reader;
  19. FileOutputStream out;
  20. ByteArrayOutputStream bos;
  21. PdfStamper stamper;
  22. try {
  23. out = new FileOutputStream(newPDFPath);// 输出流
  24. reader = new PdfReader(templatePath);// 读取pdf模板
  25. bos = new ByteArrayOutputStream();
  26. stamper = new PdfStamper(reader, bos);
  27. AcroFields form = stamper.getAcroFields();
  28. String[] str = { "123456789", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };
  29. int i = 0;
  30. java.util.Iterator<String> it = form.getFields().keySet().iterator();
  31. while (it.hasNext()) {
  32. String name = it.next().toString();
  33. System.out.println(name);
  34. form.setField(name, str[i++]);
  35. }
  36. stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
  37. stamper.close();
  38. Document doc = new Document();
  39. PdfCopy copy = new PdfCopy(doc, out);
  40. doc.open();
  41. PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
  42. copy.addPage(importPage);
  43. doc.close();
  44. } catch (IOException e) {
  45. System.out.println(1);
  46. } catch (DocumentException e) {
  47. System.out.println(2);
  48. }
  49. }
  50. public static void main(String[] args) {
  51. fillTemplate();
  52. }
  53. }

3.运行结果如下

*********************************************************************

如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:


  1. public static void test1(){//生成pdf
  2. Document document = new Document();
  3. try {
  4. PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));
  5. document.open();
  6. document.add(new Paragraph("hello word"));
  7. document.close();
  8. } catch (Exception e) {
  9. System.out.println("file create exception");
  10. }
  11. }

但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:


  1. public static void test1_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 (Exception e) {
  9. e.printStackTrace();
  10. }
  11. Document document = new Document();
  12. try {
  13. PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));
  14. document.open();
  15. document.add(new Paragraph("hello word 你好 世界",font));//引用字体
  16. document.close();
  17. } catch (Exception e) {
  18. System.out.println("file create exception");
  19. }
  20. }

**************************************************************************************

当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。

1.把华康少女的字体文件拷贝到这个文件夹里面了:

运行以下代码就能得到pdf文件


  1. public static void test1_2(){
  2. BaseFont bf;
  3. Font font = null;
  4. try {
  5. // bf = BaseFont.createFont("font/simsun.ttc,1", //注意这里有一个,1
  6. // BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//宋体文字
  7. bf = BaseFont.createFont("font/华康少女文字W5(P).TTC,1", //simsun.ttc
  8. BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//华康少女文字
  9. font = new Font(bf,12);
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. Document document = new Document();
  14. try {
  15. PdfWriter.getInstance(document, new FileOutputStream("E:/3.pdf"));
  16. document.open();
  17. document.add(new Paragraph("上善若水",font));
  18. document.close();
  19. } catch (Exception e) {
  20. System.out.println("file create exception");
  21. }
  22. }

当然,如果你还想换其他字体,就去下载字体文件吧,然后把相关部分替换掉就行,上面注释的是宋体的。。。

***********************以下是转载别人的****************************

以下为转载的别人方法:可以供参考

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档。

第一步:下载AdobeAcrobat DC,必须使用这个来制作from域。

第二步:使用AdobeAcrobat DC将Word导成PDF文档。

第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便;

添加水印的方法:使用AdobeAcrobat DC打开PDF文档,“工具”-》“编辑PDF”-》”水印”-》”添加”

添加水印的操作:

点击“确定”:

第四步:使用AdobeAcrobat DC添加From域;

添加From域方法:使用AdobeAcrobat DC打开文档,“工具”-》“准备表单”

点击“开始”:

点击“保存”:

添加“文本域”到我们想要添加内容的位置:

第五步:使用Java代码导出PDF文档;

主要三个类:功能类-PDFTempletTicket

[java]view plain copy

在CODE上查看代码片派生到我的代码片

  1. /**
  2. *@Title: PDFTempletTicket.java
  3. *@Package: org.csun.ns.util
  4. *@Description: TODO
  5. *@Author: chisj chisj@foxmail.com
  6. *@Date: 2016年4月27日上午11:29:52
  7. *@Version V1.0
  8. */
  9. package org.csun.ns.util;
  10. import java.io.ByteArrayOutputStream;
  11. import java.io.File;
  12. import java.io.FileOutputStream;
  13. import java.util.ArrayList;
  14. import org.csun.ns.entity.Ticket;
  15. import com.itextpdf.text.pdf.AcroFields;
  16. import com.itextpdf.text.pdf.BaseFont;
  17. import com.itextpdf.text.pdf.PdfReader;
  18. import com.itextpdf.text.pdf.PdfStamper;
  19. /**
  20. *@ClassName: PDFTempletTicket
  21. *@Description: TODO
  22. *@Author: chisj chisj@foxmail.com
  23. *@Date: 2016年4月27日上午11:29:52
  24. */
  25. public class PDFTempletTicket {
  26. privateString templatePdfPath;
  27. privateString ttcPath;
  28. privateString targetPdfpath;
  29. privateTicket ticket;
  30. publicPDFTempletTicket() {
  31. super();
  32. }
  33. publicPDFTempletTicket(String templatePdfPath, String ttcPath,
  34. StringtargetPdfpath, Ticket ticket) {
  35. this.templatePdfPath= templatePdfPath;
  36. this.ttcPath= ttcPath;
  37. this.targetPdfpath= targetPdfpath;
  38. this.ticket= ticket;
  39. }
  40. publicvoid templetTicket(File file) throws Exception {
  41. PdfReaderreader = new PdfReader(templatePdfPath);
  42. ByteArrayOutputStreambos = new ByteArrayOutputStream();
  43. PdfStamperps = new PdfStamper(reader, bos);
  44. /*使用中文字体 */
  45. BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1",
  46. BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
  47. ArrayList<BaseFont> fontList = newArrayList<BaseFont>();
  48. fontList.add(bf);
  49. AcroFieldss = ps.getAcroFields();
  50. s.setSubstitutionFonts(fontList);
  51. s.setField("ticketId",ticket.getTicketId());
  52. s.setField("ticketCreateTime",ticket.getTicketCreateTime());
  53. s.setField("ticketCompany",ticket.getTicketCompany());
  54. s.setField("sysName",ticket.getSysName());
  55. s.setField("moneyLittle",ticket.getMoneyLittle());
  56. s.setField("moneyBig",ticket.getMoneyBig());
  57. s.setField("accountCompany",ticket.getAccountCompany());
  58. s.setField("bedNumber",ticket.getBedNumber());
  59. s.setField("username",ticket.getUsername());
  60. s.setField("password",ticket.getPassword());
  61. ps.setFormFlattening(true);
  62. ps.close();
  63. FileOutputStreamfos = new FileOutputStream(file);
  64. fos.write(bos.toByteArray());
  65. fos.close();
  66. }
  67. /**
  68. * @return the templatePdfPath
  69. */
  70. publicString getTemplatePdfPath() {
  71. returntemplatePdfPath;
  72. }
  73. /**
  74. * @param templatePdfPath the templatePdfPathto set
  75. */
  76. publicvoid setTemplatePdfPath(String templatePdfPath) {
  77. this.templatePdfPath= templatePdfPath;
  78. }
  79. /**
  80. * @return the ttcPath
  81. */
  82. publicString getTtcPath() {
  83. returnttcPath;
  84. }
  85. /**
  86. * @param ttcPath the ttcPath to set
  87. */
  88. publicvoid setTtcPath(String ttcPath) {
  89. this.ttcPath= ttcPath;
  90. }
  91. /**
  92. * @return the targetPdfpath
  93. */
  94. publicString getTargetPdfpath() {
  95. returntargetPdfpath;
  96. }
  97. /**
  98. * @param targetPdfpath the targetPdfpath toset
  99. */
  100. publicvoid setTargetPdfpath(String targetPdfpath) {
  101. this.targetPdfpath= targetPdfpath;
  102. }
  103. /**
  104. * @return the ticket
  105. */
  106. publicTicket getTicket() {
  107. returnticket;
  108. }
  109. /**
  110. * @param ticket the ticket to set
  111. */
  112. publicvoid setTicket(Ticket ticket) {
  113. this.ticket= ticket;
  114. }
  115. }

数据类-Ticket

[java]view plain copy

在CODE上查看代码片派生到我的代码片

  1. /**
  2. *@Title: Ticket.java
  3. *@Package: org.csun.ns.entity
  4. *@Description: TODO
  5. *@Author: chisj chisj@foxmail.com
  6. *@Date: 2016年4月26日下午7:43:31
  7. *@Version V1.0
  8. */
  9. package org.csun.ns.entity;
  10. /**
  11. *@ClassName: Ticket
  12. *@Description: TODO
  13. *@Author: chisj chisj@foxmail.com
  14. *@Date: 2016年4月26日下午7:43:31
  15. */
  16. public class Ticket {
  17. privateString ticketId;
  18. privateString homesId;
  19. privateString ticketCreateTime;
  20. privateString ticketCompany;
  21. privateString sysName;
  22. privateString moneyLittle;
  23. privateString moneyBig;
  24. privateString accountCompany;
  25. privateString bedNumber;
  26. privateString username;
  27. privateString password;
  28. publicTicket() {
  29. super();
  30. }
  31. publicTicket(String ticketId, String homesId, String ticketCreateTime,
  32. StringticketCompany, String sysName, String moneyLittle,
  33. StringmoneyBig, String accountCompany, String bedNumber,
  34. Stringusername, String password) {
  35. this.ticketId= ticketId;
  36. this.homesId= homesId;
  37. this.ticketCreateTime= ticketCreateTime;
  38. this.ticketCompany= ticketCompany;
  39. this.sysName= sysName;
  40. this.moneyLittle= moneyLittle;
  41. this.moneyBig= moneyBig;
  42. this.accountCompany= accountCompany;
  43. this.bedNumber= bedNumber;
  44. this.username= username;
  45. this.password= password;
  46. }
  47. /**
  48. * @return the ticketId
  49. */
  50. publicString getTicketId() {
  51. returnticketId;
  52. }
  53. /**
  54. * @param ticketId the ticketId to set
  55. */
  56. publicvoid setTicketId(String ticketId) {
  57. this.ticketId= ticketId;
  58. }
  59. /**
  60. * @return the homesId
  61. */
  62. publicString getHomesId() {
  63. returnhomesId;
  64. }
  65. /**
  66. * @param homesId the homesId to set
  67. */
  68. publicvoid setHomesId(String homesId) {
  69. this.homesId= homesId;
  70. }
  71. /**
  72. * @return the ticketCreateTime
  73. */
  74. publicString getTicketCreateTime() {
  75. returnticketCreateTime;
  76. }
  77. /**
  78. * @param ticketCreateTime the ticketCreateTimeto set
  79. */
  80. publicvoid setTicketCreateTime(String ticketCreateTime) {
  81. this.ticketCreateTime= ticketCreateTime;
  82. }
  83. /**
  84. * @return the ticketCompany
  85. */
  86. publicString getTicketCompany() {
  87. returnticketCompany;
  88. }
  89. /**
  90. * @param ticketCompany the ticketCompany toset
  91. */
  92. publicvoid setTicketCompany(String ticketCompany) {
  93. this.ticketCompany= ticketCompany;
  94. }
  95. /**
  96. * @return the sysName
  97. */
  98. publicString getSysName() {
  99. returnsysName;
  100. }
  101. /**
  102. * @param sysName the sysName to set
  103. */
  104. publicvoid setSysName(String sysName) {
  105. this.sysName= sysName;
  106. }
  107. /**
  108. * @return the moneyLittle
  109. */
  110. publicString getMoneyLittle() {
  111. returnmoneyLittle;
  112. }
  113. /**
  114. * @param moneyLittle the moneyLittle to set
  115. */
  116. publicvoid setMoneyLittle(String moneyLittle) {
  117. this.moneyLittle= moneyLittle;
  118. }
  119. /**
  120. * @return the moneyBig
  121. */
  122. publicString getMoneyBig() {
  123. returnmoneyBig;
  124. }
  125. /**
  126. * @param moneyBig the moneyBig to set
  127. */
  128. publicvoid setMoneyBig(String moneyBig) {
  129. this.moneyBig= moneyBig;
  130. }
  131. /**
  132. * @return the accountCompany
  133. */
  134. publicString getAccountCompany() {
  135. returnaccountCompany;
  136. }
  137. /**
  138. * @param accountCompany the accountCompany toset
  139. */
  140. publicvoid setAccountCompany(String accountCompany) {
  141. this.accountCompany= accountCompany;
  142. }
  143. /**
  144. * @return the bedNumber
  145. */
  146. publicString getBedNumber() {
  147. returnbedNumber;
  148. }
  149. /**
  150. * @param bedNumber the bedNumber to set
  151. */
  152. publicvoid setBedNumber(String bedNumber) {
  153. this.bedNumber= bedNumber;
  154. }
  155. /**
  156. * @return the username
  157. */
  158. publicString getUsername() {
  159. returnusername;
  160. }
  161. /**
  162. * @param username the username to set
  163. */
  164. publicvoid setUsername(String username) {
  165. this.username= username;
  166. }
  167. /**
  168. * @return the password
  169. */
  170. publicString getPassword() {
  171. returnpassword;
  172. }
  173. /**
  174. * @param password the password to set
  175. */
  176. publicvoid setPassword(String password) {
  177. this.password= password;
  178. }
  179. }

测试类-TestTempletTicket

[java]view plain copy

在CODE上查看代码片派生到我的代码片

  1. /**
  2. *@Title: TestTempletTicket.java
  3. *@Package: org.csun.ns.util
  4. *@Description: TODO
  5. *@Author: chisj chisj@foxmail.com
  6. *@Date: 2016年4月27日下午1:31:23
  7. *@Version V1.0
  8. */
  9. package org.csun.ns.util;
  10. import java.io.File;
  11. import org.csun.ns.client.OSSConfigure;
  12. import org.csun.ns.client.OSSUtil;
  13. import org.csun.ns.entity.Ticket;
  14. /**
  15. *@ClassName: TestTempletTicket
  16. *@Description: TODO
  17. *@Author: chisj chisj@foxmail.com
  18. *@Date: 2016年4月27日下午1:31:23
  19. */
  20. public class TestTempletTicket {
  21. publicstatic void main(String[] args) throws Exception {
  22. Ticketticket = new Ticket();
  23. ticket.setTicketId("2016042710000");
  24. ticket.setTicketCreateTime("2016年4月27日");
  25. ticket.setTicketCompany("武汉日创科技有限公司");
  26. ticket.setSysName("智能看护系统");
  27. ticket.setMoneyLittle("50,000.00");
  28. ticket.setMoneyBig("伍万元整");
  29. ticket.setAccountCompany("洪山福利院");
  30. ticket.setBedNumber("500床位");
  31. ticket.setUsername("qiu");
  32. ticket.setPassword("123456");
  33. PDFTempletTicketpdfTT = new PDFTempletTicket();
  34. pdfTT.setTemplatePdfPath("D:\\ticket_from.pdf");
  35. pdfTT.setTargetPdfpath("D:\\aaabbbccc.pdf");
  36. pdfTT.setTicket(ticket);
  37. Filefile = new File("D:\\aaabbbccc.pdf");
  38. file.createNewFile();
  39. pdfTT.templetTicket(file);
  40. //OSSConfigureconfig = OSSUtil.getOSSConfigure();
  41. //OSSManageUtil.uploadFile(config, file, "aaabbbccc.pdf","pdf", "ticket/" + "aaabbbccc");
  42. //System.out.println("path = " + config.getAccessUrl());
  43. }
  44. }

导出来后的结果:

备注:导出PDF文档,From域的内容不可见问题;iText找不到字体;

问题1:我开始导出的From域内容看不到,将ps.setFormFlattening(true);设置为flase后,可以看到From域,还是看不到内容,我点击进入From后可以看到内容,该方法是将From域隐藏;后来看到有人设置From域内容的字体:BaseFontbf= BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1",

BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

以及:

s.setSubstitutionFonts(fontList);

问题2:别人的代码:

BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:\Windows\Fonts下面有很多字体可以使用)

java根据模板生成pdf文件并导出(iText)相关推荐

  1. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  2. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

  3. java 根据PDF模板生成PDF文件并导出

    1.准备操作的maven包 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpd ...

  4. Java根据模板生成PDF文件

    1.制作word模板 2.转换成PDF模板 3.使用Adobe Acrobat Pro软件打开PDF,在PDF中选择 表单–>添加或编辑域 4.设置好域名称 5. 新建两个签名

  5. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  6. java 模板生成PDF文件 复选框勾选

    java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);

  7. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  8. java按模板生成pdf_java中根据模板生成pdf文件

    简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...

  9. freemarker 模板生成pdf文件并下载

    利用freemarker 模板生成pdf文件,通过浏览器直接下载或生成文件到指定目录 1.pom.xml文件 <!--引入Freemarker的依赖--> <dependency&g ...

最新文章

  1. NEWS - InstallShield 2013 SP1发布
  2. k8S中的MySQL如何扩容_Kubernetes的etcd多节点扩容实战技巧
  3. Class.newInstance()与new、Constructor.newInstance()的区别
  4. 具有用户定义类型的format的示例用法
  5. AI让边缘更智能,边缘让AI无处不在
  6. c++11 中的 move 与 forward
  7. python特性、属性以及私有化
  8. RTK、IMU、RT3000
  9. 机器学习--逻辑斯谛回归(Logistic Regression)
  10. 注解@Async解决异步调用问题
  11. matlab中数字分频器的,数字分频器原理及设计.pdf
  12. ppt 转html乱码,ppt转换成pdf乱码解决方法.pdf
  13. Visual Studio 2010之安装Visual Studio 2010 Service Pack 1
  14. 关于win10中将中文用户名更改为英文名的解决方法
  15. 缓冲区、通道、Files、NIO2
  16. js 图片下载(不是直接在页面打开图片)
  17. 如何搭建一个自己的音乐服务器
  18. [nrf52][SDK17] 如何修改BLE_MAC地址?
  19. 实例入侵某品牌WIFI路由器
  20. 逻辑回归模型——股票客户流失预警模型

热门文章

  1. Qt界面开发案例:图表主题示例
  2. 亚马逊测评的评论为什么老被删?
  3. 【积沙成塔】Android 环境下编译后出现乱码错误的情况
  4. rust怎么发送求救信号_探险遇难发送求救信号的方法
  5. 用JAVA实现简单的扑克牌洗牌发牌并排序
  6. 基于SSM的在线音乐网站开发与实现
  7. 紫薇在线排盘php源码,紫微斗数在线排盘
  8. 霸道的TOM SKYPE
  9. Java-双色球系统
  10. 使用Android stdio中的Webview显示网页时提示net::err_access_denied是为什么?