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

标签: java itext pdf | 发表时间:2016-04-28 05:03 | 作者:u012377333
出处:http://blog.csdn.net

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

 *@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 [email protected]

 *@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 [email protected]

 *@Date: 2016年4月26日下午7:43:31

 *@Version V1.0

 */

package org.csun.ns.entity;

 

/**

 *@ClassName: Ticket

 *@Description: TODO

 *@Author: chisj [email protected]

 *@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 [email protected]

 *@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 [email protected]

 *@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域内容的字体:BaseFont bf = 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下面有很多字体可以使用)

作者:u012377333 发表于2016/4/27 21:03:17 原文链接
阅读:175 评论:0 查看评论

相关 [java itext pdf] 推荐:

iText 5.4.0 发布,Java 的 PDF 开发包

- - 开源中国社区最新新闻
iText 5.4.0 除了修复很多 bug 之外,主要是侧重于创建结构化的 PDF 文档,当使用 Document, Paragraph, PdfPTable 创建 PDF 时可自动进行标识,标识的 PDF 是更好支持 PDF/UA 和 PDF/A 兼容性的第一步. iText是一个非常著名的能够快速产生PDF文件的Java类库.

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

- - CSDN博客综合推荐文章
我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便;.

iText 5.2.0 发布,PDF 开发包

- - 脚本爱好者
iText 5.2.0 发布了,该版本大部分的改进都集中在 PDF 解析上,支持特殊的编码和多种国外语言,修复了解析错误以及对一些错误的 PDF 语法更加适应,此外 iText 现在可支持生成超过 2G 的文件,减少对 java.awt 包的依赖,可更方便在 Android 平台和 GAE 中使用.

java合并PDF

- - Java - 编程语言 - ITeye博客
15.         * * 合並pdf文件 * * @param files 要合並文件數組(絕對路徑如{ "e:\\1.pdf", "e:\\2.pdf" ,. 17.         * 合並後新產生的文件絕對路徑如e:\\temp.pdf,請自己刪除用過後不再用的文件請 * @return boolean.

Itext PDF生成 加水印图片文字

- - CSDN博客研发管理推荐文章
由于项目中用到,所以网上找了很多,但或多或少有些问题,我整理更新了一下. import java.io.*; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; /** * PDF生成 */ public class PDFBuild {.

基于iText和flying saucer结合freemark生成pdf 范例

- - CSDN博客推荐文章
项目主页:http://git.oschina.net/lemonzone2010/doc-render. 最近公司需要生成PDF,基于这个需求简单学习了下IText 和 flying saucer,对于这两个技术.我先简单介绍下:. Flying Saucer和iText介绍:.     A.  iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等.

将PPT转化为PDF我的JAVA代码实现!

- - CSDN博客推荐文章
jacob的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法. JACOB是一座连接JAVA和微软的桥,所有的解析由微软解析. POI是没有微软解析的那么原汁原味的,所以如果要求高的话,还是使用JACOB. 大致思路很简单,将PPT先转化为图片,然后将图片写入PDF. 转化图片是用POI,操作PDF使用ITEX.

Java实现HTML页面转PDF解决方案

- - Java - 编程语言 - ITeye博客
首先,当然是找到能够解析PDF的完美组件,. 而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的. 而如果,大家像我这样已经有前人写好了HTML页面或者懒得写FreeMarker模板的话.

Java实现HTML代码生成PDF文档

- - 企业架构 - ITeye博客
1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源. 2、Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源. 3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业.

使用Java将PDF文件转成图片

- - 编程语言 - ITeye博客
使用Java将PDF文件转成图片. System.out.println("页数: " + pdffile.getNumPages());. //目录不存在,则创建目录. FileOutputStream out = new FileOutputStream( getPdfFilePath+File.separator + i + ".jpg"); // 输出到文件流.