Java iText使用PDF模板生成PDF文档

REF:  https://blog.csdn.net/u012377333/article/details/51264122

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

数据类-Ticket

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

测试类-TestTempletTicket

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

导出来后的结果:

备注:导出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下面有很多字体可以使用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值