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 }

 

posted @ 2014-10-23 21:27  Hutton‘  阅读(917)  评论(0编辑  收藏  举报