java = 位赋值_JAVA在PDF指定位置赋值

大家肯定做过  根据一个模版往里面填值然后生成新的PDF打印的工作,还不会的同志们注意啦!

首先用world画好模版,给需要填值的地方留下空间,另存为:pdf……现在这种PDF存值是不行的!你还需要一个工具:Adobe LiveCycle Designer ES2

如下图:打开你生成的pdf模版

1004bd3766031f197da57beca572aae5.png

大家可以看到右上角是一些组件,有: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);

}

}

模版:

a8f5eab8841588a89b640c79b0a505e0.png

结果:

52c010f38246a098393e3460f1830691.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值