itext操作pdf文件

itext操作pdf模板:

1、首先使用excel制作好模板文件,将模板文件转换为pdf格式文件。

2、使用Adobe Acrobat XI Pro工具打开pdf文件,在需要的位置添加文本域。(工具-->表单-->编辑)

3、对每个文本域设置文本域属性,为其命名。如title、desion_no等。

4、通过itext方式操作文本域,为期赋值,并重新生成pdf文件。

  1 package com.pcm.app.transfer;
  2
  3 import java.io.ByteArrayOutputStream;
  4 import java.io.File;
  5 import java.io.FileOutputStream;
  6
  7 import org.apache.log4j.Logger;
  8
  9 import com.itextpdf.text.pdf.AcroFields;
 10 import com.itextpdf.text.pdf.BaseFont;
 11 import com.itextpdf.text.pdf.PdfReader;
 12 import com.itextpdf.text.pdf.PdfStamper;
 13 import com.itextpdf.text.pdf.PdfWriter;
 14 import com.pcm.app.pojo.SimplePunishWrite;
 15 import com.pcm.app.pojo.VioBehaviour;
 16 import com.pcm.app.utils.CodeFactory;
 17 import com.pcm.app.utils.TomcatUtil;
 18 import com.pcm.framework.utils.InitUtil;
 19
 20 /**
 21  * 使用pdf模板生成简易程序文件
 22  * @author
 23  *
 24  */
 25 public class GeneratePDFService{
 26
 27     private static Logger logger = Logger.getLogger(GeneratePDFService.class);
 28
 29     private static final String PDF_FILE_TYPE = ".pdf";
 30
 31     private PdfStamper ps = null;
 32
 33     private FileOutputStream fos = null;
 34
 35     private String path = System.getProperty("user.dir");
 36
 37     /**
 38      * 冒号
 39      */
 40     private static final String COLON = ":";
 41
 42     private static final String URL_START = "http://";
 43     private static final String WEBAPPS = "/webapps";
 44     private static final String SERVER_PATH = "/SL_JWT/pdf/";
 45     private static final String TOMCAT_CONFIG_FILE = "/conf/server.xml";
 46     private static final String PDF_FILE_NAME = "simplepunish";
 47     private static final String PDF_TEMPLET_FILENAME = "sp_templet";
 48
 49     /**
 50      * 使用模板生成PDF文件
 51      */
 52     public boolean generateSimplePunishPDFFromPDFTemplet(SimplePunishWrite sp,VioBehaviour behaviour) {
 53         logger.info("Enter generateSimplePunishPDFFromPDFTemplet method...");
 54         boolean isSuccess = false;
 55         String teamName = InitUtil.getProperty("team_name");
 56         String policeStation = InitUtil.getProperty("police_station");
 57         String courtName = InitUtil.getProperty("court_name");
 58         try {
 59             BaseFont font = BaseFont.createFont("font/simsun.ttc,1",
 60                     BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
 61             String fileNameTemplet = getClientVersionSavePath(PDF_TEMPLET_FILENAME);
 62             ByteArrayOutputStream bos = new ByteArrayOutputStream();
 63             PdfReader reader = new PdfReader(fileNameTemplet);
 64             ps = new PdfStamper(reader, bos,PdfWriter.VERSION_1_5,false);
 65             AcroFields field = ps.getAcroFields();
 66             setFieldProperty("title",font,field); //title为pdf中添加的域
 67             field.setField("title", teamName);  //设置域的值
132             // 注意pdf中域的大小,这里设置的值太长,pdf中会显示不全
133             // 设置为true/false在点击生成的pdf文档的填充域时有区别,
134             ps.setFormFlattening(true);
135             ps.close();
136             String fileName = getClientVersionSavePath(PDF_FILE_NAME);
138             fos = new FileOutputStream(fileName);  //生成文件
139             fos.write(bos.toByteArray());
140             fos.close();
141             isSuccess = true;
142             logger.info("End generated pdf file.");
143         } catch (Exception e) {
144             logger.error("Generate pdf file occur exception.", e);
145             return isSuccess;
146         }  finally {
147             logger.info("close stream resource.");
148             try {
149                 if (ps != null) {
150                     ps.close();
151                     ps = null;
152                 }
153                 if (fos != null) {
154                     fos.close();
155                     fos = null;
156                 }
157             } catch (Exception e1) {
158                 logger.error("close stream occur exception", e1);
159             }
160         }
161         return isSuccess;
162     }
163     

280     private void setFieldProperty(String key,BaseFont font, AcroFields field) {
281         field.setFieldProperty(key,"textfont",font,null); //处理乱码
282     }
283     /**
284      * 移动终端访问文件所在web地址
285      * @param fileName
286      * @param version
287      * @return
288      */
289     public String getURLAddress(String fileName) {
290         String filepath = getTomcatConfigFilePath();
291         File serverXml = new File(filepath);
292         String ip = TomcatUtil.getLocalHostAddress();
293         int port = TomcatUtil.getTomcatPortFromConfigXml(serverXml);
294         String url = new StringBuffer().append(URL_START)
295                                        .append(ip).append(COLON)
296                                        .append(port).append(SERVER_PATH)
297                                        .append(fileName).append(PDF_FILE_TYPE)
298                                        .toString();
299         logger.info("The client version url address is : " + url);
300         return url;
301     }
302
303     /**
304      * 获取PDF文件保存路径
305      * @param clientVersion
306      * @return
307      */
308     private String getClientVersionSavePath(String fileName) {
310         StringBuffer sb = new StringBuffer();
311         sb.append(path);
312         sb.append(WEBAPPS);
313         sb.append(SERVER_PATH);
314         sb.append(fileName);
315         sb.append(PDF_FILE_TYPE);
316         logger.info("The PDF file save path is " + sb.toString());
317         return sb.toString();
318     }
319
320     /**
321      * 获取tomcat服务器../conf/server.xml文件路径
322      * @param clientVersion
323      * @return
324      */
325     private String getTomcatConfigFilePath() {
326         StringBuffer sb = new StringBuffer();
327         sb.append(path);
328         sb.append(TOMCAT_CONFIG_FILE);
329         logger.info("The tomcat server.xml file path is " + sb.toString());
330         return sb.toString();
331     }
332
333     public String toString(Object obj) {
334         return obj != null ? toString(obj, "utf-8").trim() : "无";
335     }
336
337     private String toString(Object obj, String charset) {
338         if (obj instanceof byte[]) {
339             try {
340                 return new String((byte[]) obj, charset);
341             } catch (Exception e) {
342                 return new String((byte[]) obj);
343             }
344         } else {
345             return obj.toString();
346         }
347     }
348 }
时间: 2024-12-25 16:00:11

itext操作pdf文件的相关文章

itext操作PDF文件添加水印

功能描述:添加图片和文字水印 1 /** 2 * 3 * [功能描述:添加图片和文字水印] [功能详细描述:功能详细描述] 4 * @param srcFile 待加水印文件 5 * @param destFile 加水印后存放地址 6 * @param text 加水印的文本内容 7 * @param textWidth 文字横坐标 8 * @param textHeight 文字纵坐标 9 * @throws Exception 10 */ 11 public void addWaterMa

ITEXT操作PDF

ITEXT操作PDF,非常简单: (本方法使用itext1.0.4版本,高版本的itext5.5.0同样兼容,改变一下导入包路径就好了) 1,HELLOWORLD项目 package demo; import java.io.FileOutputStream;     import java.io.IOException;     import com.lowagie.text.Document;     import com.lowagie.text.DocumentException;   

itext生成PDF文件报错“Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.”

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此. 问题描述: 工程使用maven构建,pom.xml中对于jar包的定义如下: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</vers

C#:IText构造PDF文件

IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种构造函数:    public Document():    public Document(Rectangle pageSize):    public Document(Rectangle pageSize, float marginLeft,    float marginRight, flo

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

Itext简绍及操作PDF文件

iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了. iTextAsian.jar (亚洲语言包,可以使用中文) 需要添加到工程中 使用时需要在系统的环境变量Path中加入iTe

怎样编辑操作PDF文件

一般情况下PDF文件都是用来浏览查看的,对PDF文件编辑的比较少,很多格式的文档也只会在编辑完成之后才会保存为PDF格式.因此很多人对PDF文件的编辑不是很了解,甚至不知道PDF阅读器是不能编辑PDF文件的,当遇到PDF文件需要编辑修改时那该怎样来应对呢? PDF文件是和其他类型格式的文档不同的,而且PDF在打开浏览查看和编辑都是由不同的工具来分别实现,因此需要编辑PDF的内容必须要用专门的PDF编辑工具来打开文档进行操作. 打开PDF文件后可以在左边的缩略图里面切换需要编辑的页面,在缩略图中可

怎么操作PDF文件交换页面?简单的操作方法

PDF文件怎么交换页面呢?在现在使用PDF文件的时候,我们也会遇到一些PDF交换页面这种问题,不会操作PDF交换页面怎么办呢?下面小编就为大家介绍一下PDF文档交换页面的操作方法. 操作软件:迅捷PDF编辑器(PDF编辑器下载) 1:我们将PDF编辑器安装到自己的电脑中,打开软件可以找到打开更多文件,将需要编辑的PDF文件添加到软件中. 2:在软件中可以找到文档,点击文档就可以找到更多页面,将鼠标移动到更多页面处,在右侧就会看到交换页面. 3:点击交换页面就会出现一个弹窗,在弹窗中可以看到Swa

Freemarker+IText生成pdf文件

最近项目中遇到要用html生成pdf文件的需求,一开始研究了下前端插件jspdf,使用h5 canvas绘图生成图片,再把图片生成pdf文件,遇到了各种各样的问题,生成的pdf文件达到20多M,height超过5000浏览器就崩溃,有兴趣的童鞋可以尝试一下,该方案LZ最终放弃了. 接着开始尝试服务端生成,使用freemaker模板生成静态html文件,通过iext生成pdf,网上很多关于renderer.setDocument(dom,null)的用法,LZ尝试后发现效率奇低,最后放弃了,直接使