大家肯定做过 根据一个模版往里面填值然后生成新的PDF打印的工作,还不会的同志们注意啦!
首先用world画好模版,给需要填值的地方留下空间,另存为:pdf……现在这种PDF存值是不行的!你还需要一个工具:Adobe LiveCycle Designer ES2
如下图:打开你生成的pdf模版
大家可以看到右上角是一些组件,有:TextField,CheckBox……等,你懂得!直接托到你指定的位置就可以啦!
然后用JAVA程序读取,赋值,生成新的有值的PDF就ok了
还需要一个jar包:itext-2.0.3.jar 网上一大把
个人封装了一个类,使得非常简单了,代码如下:
package com.sun;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
public class PdfTemplate {
/**
* 赋值并生成新的PDF文档
* @param templatePDF pdf模版
* @param outFile 输出的PDF Name
* @param hashMap templatePDF对应的数据
* @author JIA-G-Y
* 二〇一二年八月二十日 17:20:36
*/
public static void doSomeThing(String templatePDF,String outFile,HashMap hashMap){
try {
FileOutputStream fos = new FileOutputStream(outFile);
PdfReader reader = new PdfReader(templatePDF);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamp = new PdfStamper(reader,baos);
AcroFields form = stamp.getAcroFields();
form=setField(form,hashMap);
stamp.setFormFlattening(true);
stamp.close();
Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage impPage = pdfCopy.getImportedPage(new PdfReader(baos.toByteArray()), 1);
pdfCopy.addPage(impPage);
doc.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
@SuppressWarnings({ "unchecked", "unchecked" })
public static AcroFields setField(AcroFields form,HashMap fieldMap) {
Set it=fieldMap.keySet();
Iterator itr=it.iterator();
while(itr.hasNext()){
try {
Object temp = itr.next();
form.setField(temp.toString(), fieldMap.get(temp.toString()));
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
return form;
}
}
测试:
package com.sun;
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("Code", "JIA-G-Y 2012-08-20");
hashMap.put("Tel", "400-8888888");
hashMap.put("Address", "1859101");
hashMap.put("GM", "2");
PdfTemplate.doSomeThing(".\\SUN.pdf","NewsPDF"+".pdf", hashMap);
}
}
模版:
结果: