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

10 篇文章 0 订阅

我们系统需要生成一个可以打印的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

/**
 *@Title: PDFTempletTicket.java
 *@Package: org.csun.ns.util
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月27日上午11:29:52
 *@Version V1.0
 */
package org.csun.ns.util;
 
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
 
import org.csun.ns.entity.Ticket;
 
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
 
/**
 *@ClassName: PDFTempletTicket
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月27日上午11:29:52
 */
public class PDFTempletTicket {
 
         privateString templatePdfPath;
         privateString ttcPath;
         privateString targetPdfpath;
         privateTicket ticket;
        
        
         publicPDFTempletTicket() {
                   super();
         }
        
         publicPDFTempletTicket(String templatePdfPath, String ttcPath,
                            StringtargetPdfpath, Ticket ticket) {
                   this.templatePdfPath= templatePdfPath;
                   this.ttcPath= ttcPath;
                   this.targetPdfpath= targetPdfpath;
                   this.ticket= ticket;
         }
        
         publicvoid templetTicket(File file) throws Exception {
                  
                   PdfReaderreader = new PdfReader(templatePdfPath);
                   ByteArrayOutputStreambos = new ByteArrayOutputStream();
                   PdfStamperps = new PdfStamper(reader, bos);
                  
                   /*使用中文字体 */ 
                   BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1", 
                BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
       ArrayList<BaseFont> fontList = newArrayList<BaseFont>(); 
       fontList.add(bf); 
                  
                   AcroFieldss = ps.getAcroFields();
                   s.setSubstitutionFonts(fontList);
 
                   s.setField("ticketId",ticket.getTicketId());
                   s.setField("ticketCreateTime",ticket.getTicketCreateTime());
                   s.setField("ticketCompany",ticket.getTicketCompany());
                   s.setField("sysName",ticket.getSysName());
                   s.setField("moneyLittle",ticket.getMoneyLittle());
                   s.setField("moneyBig",ticket.getMoneyBig());
                   s.setField("accountCompany",ticket.getAccountCompany());
                   s.setField("bedNumber",ticket.getBedNumber());
                   s.setField("username",ticket.getUsername());
                   s.setField("password",ticket.getPassword());
                  
                  
                   ps.setFormFlattening(true);
                   ps.close();
                  
                   FileOutputStreamfos = new FileOutputStream(file);
                   fos.write(bos.toByteArray());
                   fos.close();
         }
 
         /**
          * @return the templatePdfPath
          */
         publicString getTemplatePdfPath() {
                   returntemplatePdfPath;
         }
 
         /**
          * @param templatePdfPath the templatePdfPathto set
          */
         publicvoid setTemplatePdfPath(String templatePdfPath) {
                   this.templatePdfPath= templatePdfPath;
         }
 
         /**
          * @return the ttcPath
          */
         publicString getTtcPath() {
                   returnttcPath;
         }
 
         /**
          * @param ttcPath the ttcPath to set
          */
         publicvoid setTtcPath(String ttcPath) {
                   this.ttcPath= ttcPath;
         }
 
         /**
          * @return the targetPdfpath
          */
         publicString getTargetPdfpath() {
                   returntargetPdfpath;
         }
 
         /**
          * @param targetPdfpath the targetPdfpath toset
          */
         publicvoid setTargetPdfpath(String targetPdfpath) {
                   this.targetPdfpath= targetPdfpath;
         }
 
         /**
          * @return the ticket
          */
         publicTicket getTicket() {
                   returnticket;
         }
 
         /**
          * @param ticket the ticket to set
          */
         publicvoid setTicket(Ticket ticket) {
                   this.ticket= ticket;
         }
        
        
}

数据类-Ticket

/**
 *@Title: Ticket.java
 *@Package: org.csun.ns.entity
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月26日下午7:43:31
 *@Version V1.0
 */
package org.csun.ns.entity;
 
/**
 *@ClassName: Ticket
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月26日下午7:43:31
 */
public class Ticket {
 
         privateString ticketId;
         privateString homesId;
         privateString ticketCreateTime;
         privateString ticketCompany;
         privateString sysName;
         privateString moneyLittle;
         privateString moneyBig;
         privateString accountCompany;
         privateString bedNumber;
         privateString username;
         privateString password;
 
         publicTicket() {
                   super();
         }
        
         publicTicket(String ticketId, String homesId, String ticketCreateTime,
                            StringticketCompany, String sysName, String moneyLittle,
                            StringmoneyBig, String accountCompany, String bedNumber,
                            Stringusername, String password) {
                   this.ticketId= ticketId;
                   this.homesId= homesId;
                   this.ticketCreateTime= ticketCreateTime;
                   this.ticketCompany= ticketCompany;
                   this.sysName= sysName;
                   this.moneyLittle= moneyLittle;
                   this.moneyBig= moneyBig;
                   this.accountCompany= accountCompany;
                   this.bedNumber= bedNumber;
                   this.username= username;
                   this.password= password;
         }
 
         /**
          * @return the ticketId
          */
         publicString getTicketId() {
                   returnticketId;
         }
 
         /**
          * @param ticketId the ticketId to set
          */
         publicvoid setTicketId(String ticketId) {
                   this.ticketId= ticketId;
         }
 
         /**
          * @return the homesId
          */
         publicString getHomesId() {
                   returnhomesId;
         }
 
         /**
          * @param homesId the homesId to set
          */
         publicvoid setHomesId(String homesId) {
                   this.homesId= homesId;
         }
 
         /**
          * @return the ticketCreateTime
          */
         publicString getTicketCreateTime() {
                   returnticketCreateTime;
         }
 
         /**
          * @param ticketCreateTime the ticketCreateTimeto set
          */
         publicvoid setTicketCreateTime(String ticketCreateTime) {
                   this.ticketCreateTime= ticketCreateTime;
         }
 
         /**
          * @return the ticketCompany
          */
         publicString getTicketCompany() {
                   returnticketCompany;
         }
 
         /**
          * @param ticketCompany the ticketCompany toset
          */
         publicvoid setTicketCompany(String ticketCompany) {
                   this.ticketCompany= ticketCompany;
         }
 
         /**
          * @return the sysName
          */
         publicString getSysName() {
                   returnsysName;
         }
 
         /**
          * @param sysName the sysName to set
          */
         publicvoid setSysName(String sysName) {
                   this.sysName= sysName;
         }
 
         /**
          * @return the moneyLittle
          */
         publicString getMoneyLittle() {
                   returnmoneyLittle;
         }
 
         /**
          * @param moneyLittle the moneyLittle to set
          */
         publicvoid setMoneyLittle(String moneyLittle) {
                   this.moneyLittle= moneyLittle;
         }
 
         /**
          * @return the moneyBig
          */
         publicString getMoneyBig() {
                   returnmoneyBig;
         }
 
         /**
          * @param moneyBig the moneyBig to set
          */
         publicvoid setMoneyBig(String moneyBig) {
                   this.moneyBig= moneyBig;
         }
 
         /**
          * @return the accountCompany
          */
         publicString getAccountCompany() {
                   returnaccountCompany;
         }
 
         /**
          * @param accountCompany the accountCompany toset
          */
         publicvoid setAccountCompany(String accountCompany) {
                   this.accountCompany= accountCompany;
         }
 
         /**
          * @return the bedNumber
          */
         publicString getBedNumber() {
                   returnbedNumber;
         }
 
         /**
          * @param bedNumber the bedNumber to set
          */
         publicvoid setBedNumber(String bedNumber) {
                   this.bedNumber= bedNumber;
         }
 
         /**
          * @return the username
          */
         publicString getUsername() {
                   returnusername;
         }
 
         /**
          * @param username the username to set
          */
         publicvoid setUsername(String username) {
                   this.username= username;
         }
 
         /**
          * @return the password
          */
         publicString getPassword() {
                   returnpassword;
         }
 
         /**
          * @param password the password to set
          */
         publicvoid setPassword(String password) {
                   this.password= password;
         }
        
}

测试类-TestTempletTicket

/**
 *@Title: TestTempletTicket.java
 *@Package: org.csun.ns.util
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月27日下午1:31:23
 *@Version V1.0
 */
package org.csun.ns.util;
 
import java.io.File;
 
import org.csun.ns.client.OSSConfigure;
import org.csun.ns.client.OSSUtil;
import org.csun.ns.entity.Ticket;
 
/**
 *@ClassName: TestTempletTicket
 *@Description: TODO
 *@Author: chisj chisj@foxmail.com
 *@Date: 2016年4月27日下午1:31:23
 */
public class TestTempletTicket {
 
         publicstatic void main(String[] args) throws Exception {
                  
                   Ticketticket = new Ticket();
                  
                   ticket.setTicketId("2016042710000");
                   ticket.setTicketCreateTime("2016年4月27日");
                   ticket.setTicketCompany("武汉日创科技有限公司");
                   ticket.setSysName("智能看护系统");
                   ticket.setMoneyLittle("50,000.00");
                   ticket.setMoneyBig("伍万元整");
                   ticket.setAccountCompany("洪山福利院");
                   ticket.setBedNumber("500床位");
                   ticket.setUsername("qiu");
                   ticket.setPassword("123456");
                  
                   PDFTempletTicketpdfTT = new PDFTempletTicket();
                  
                  pdfTT.setTemplatePdfPath("D:\\ticket_from.pdf");
                   pdfTT.setTargetPdfpath("D:\\aaabbbccc.pdf");
                   pdfTT.setTicket(ticket);
                  
                   Filefile = new File("D:\\aaabbbccc.pdf");
                   file.createNewFile();
                   pdfTT.templetTicket(file);
                  
                   //OSSConfigureconfig = OSSUtil.getOSSConfigure();
       //OSSManageUtil.uploadFile(config, file, "aaabbbccc.pdf","pdf", "ticket/" + "aaabbbccc");
       
       //System.out.println("path = " + config.getAccessUrl());
                  
         }
        
}

导出来后的结果:

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

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值