java使⽤itext操作填充pdf模板,(根据⼀个模板⽣成多页数据)
直接开始需要两个jar包 itext-asian-5.2.0.jar和 itextpdf-5.5.6.jar ,我的业务逻辑可能⽐较复杂,在这⾥我就简单的提供⼀个demo ,需要的⼈⾃⼰按照⾃⼰的业务逻辑来改。
⾸先我们要⽤ Adobe Acrobat 来编辑pdf
简单讲讲思路
1 .读取到要填充的pdf 地址
2. 然后转成PdfReader对象,代表⼀个pdf
3. 然后转成PdfStamper
4. 获取到 AcroFields s = ps.getAcroFields();
5. 填充 s.tField(“表单⾥⾯你写的值” , 具体的要填充的数据);
6. 然后把pdf放到 PdfReader⾥⾯,然后多个PdfReader直接往list⾥⾯放就完事了
7. 合并成⼀个pdf,(可能多页)
然后
对,没有错你得把这些表单全部填满,这些就是需要替换的地⽅,当然你可以根据你的业务需求来填写,但是这个名字需要在代码中⽤到。代码开始 :
//我⾃⼰的数据源
final List rows = pa.getRows();
final List rows = pa.getRows();
//每⼀条数据代表⼀个pdf表格
List<PdfReader> list = new ArrayList();
try {
PdfStamper sd = null;
//记录⾏!我的业务需求
int NO = 1;
//页码!我的业务需求
int page = 1;
//不确定数据有多少,所以要⽆限循环
while (true) {
String realPath = Session().getServletContext().getRealPath("/");//项⽬路径
//使⽤微软雅⿊字体显⽰中⽂
BaFont chinessFont = ateFont("STSongStd-Light", "UniGB-UCS2-H", BaFont.NOT_EMBEDDED); PdfReader reader = new PdfReader(realPath + "/Template/receiveMoney.pdf");//读取
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfReader pdfReader = null;
//因为⼀页有25条数据
if (rows.size() > 26) {
//回去填充pdf的对象
PdfStamper ps = new PdfStamper(reader, bos);
AcroFields s = ps.getAcroFields();
for (int j = 0; j < 25; j++) {
int k = j + 1;
s.tField("NO" + k, NO + "");
BasicDBObject basicDBObject2 = (BasicDBObject) (0);
if (("SN") != null) {
**//仔细看这⾥,具体填充**
s.tField("SN" + k, ("SN").toString());
}
if (("CompanyName") != null) {
s.tFieldProperty("CompanyName" + k, "textfont", chinessFont, null); //设置中⽂格式
s.tField("CompanyName" + k, ("CompanyName").toString());
}
if (("VATReward") != null) {
s.tField("VATReward" + k, ("VATReward").toString());
}
if (("BusinessTaxReward") != null) {
s.tField("BusinessTaxReward" + k, ("BusinessTaxReward").toString());
}
if (("BIncomeTaxReward") != null) {
s.tField("BIncomeTaxReward" + k, ("BIncomeTaxReward").toString());
}
if (("PIncomeTaxReward") != null) {
s.tField("PIncomeTaxReward" + k, ("PIncomeTaxReward").toString());
}大蒜的生长过程
if (("ChangeTaxReward") != null) {
s.tField("ChangeTaxReward" + k, ("ChangeTaxReward").toString());
}
if (("Totals") != null) {
s.tField("Totals" + k, ("Totals").toString());
}
if (("WithholdTotal") != null) {
s.tField("WithholdTotal" + k, ("WithholdTotal").toString());
}
//TODO 扣除预付款及代扣费
十九的英语/* ("SN")!=null){
s.tField("SN"+j, ("SN").toString());
}*/
if (("SupportAmount") != null) {
s.tField("SupportAmount" + k, ("SupportAmount").toString());
}
NO++;
NO++;
}
BasicDBObject object = (BasicDBObject) (0);
Object startHandleDate = ("StartHandleDate");
if (startHandleDate != null && !String().equals("")) {
String[] split = String().split("-");
String s1 = split[0] + split[1];
int days = Days(Integer.parInt(split[0]), Integer.parInt(split[1]));
s.tField("ReceiveData", split[0] + split[1] + "01" + "~" + s1 + days + "");
}
s.tField("Ur", getSessionUr().getUrname());
s.tField("CrrentData", Day());
s.tField("Page", page + "");
page++;
ps.clo();
pdfReader = new ByteArray());
list.add(pdfReader);
//没到25条的
} el {
PdfStamper ps = new PdfStamper(reader, bos);
AcroFields s = ps.getAcroFields();
for (int j = 0; j < rows.size(); j++) {
宿迁社保
//填充模板pdf
int k = j + 1;
s.tField("NO" + k, NO + "");
BasicDBObject basicDBObject2 = (BasicDBObject) (j);西柚英文
if (("SN") != null) {
s.tField("SN" + k, ("SN").toString());
}
if (("CompanyName") != null) {
s.tFieldProperty("CompanyName" + k, "textfont", chinessFont, null); //设置中⽂格式
s.tField("CompanyName" + k, ("CompanyName").toString());
}
cad背景怎么调成黑色if (("VATReward") != null) {
s.tField("VATReward" + k, ("VATReward").toString());
}
if (("BusinessTaxReward") != null) {
s.tField("BusinessTaxReward" + k, ("BusinessTaxReward").toString()); }
if (("BIncomeTaxReward") != null) {
s.tField("BIncomeTaxReward" + k, ("BIncomeTaxReward").toString()); }
if (("PIncomeTaxReward") != null) {
s.tField("PIncomeTaxReward" + k, ("PIncomeTaxReward").toString());
}
if (("ChangeTaxReward") != null) {
s.tField("ChangeTaxReward" + k, ("ChangeTaxReward").toString()); }
if (("Totals") != null) {
s.tField("Totals" + k, ("Totals").toString());
}
if (("WithholdTotal") != null) {
s.tField("WithholdTotal" + k, ("WithholdTotal").toString());
}
if (("SupportAmount") != null) {
s.tField("SupportAmount" + k, ("SupportAmount").toString());
}
NO++;
}
BasicDBObject object = (BasicDBObject) (0);
Object startHandleDate = ("StartHandleDate");
Object startHandleDate = ("StartHandleDate");
if (startHandleDate != null && !String().equals("")) {
String[] split = String().split("-");
String s1 = split[0] + split[1];
int days = Days(Integer.parInt(split[0]), Integer.parInt(split[1]));
s.tField("ReceiveData", split[0] + split[1] + "01" + "~" + s1 + days + "");
}
s.tField("Ur", getSessionUr().getUrname());
s.tField("CrrentData", Day());
s.tField("Page", page + "");
page++;婚礼主持
ps.clo();
pdfReader = new ByteArray());
list.add(pdfReader);很多鱼
// sd = new PdfStamper(pdfReader, OutputStream());
新疆驴break;
}
}
//上⾯已经获得了pdf的每⼀页,这⾥我只需要合并成为⼀个pdf,然后返回
Document document = new Document();
PdfCopy copy = new PdfCopy(document, OutputStream());
document.open();
for (int k = 0; k < list.size(); k++) {
PdfReader pdfReader = (k);
copy.addDocument(pdfReader);
}
copy.clo();
} catch (Exception e) {
e.printStackTrace();
}
对了返回的格式要加下
@RequestMapping(value = "/queryReceiveMoneyePrint.do", produces = "application/pdf;chart=UTF-8")
页⾯
<object type="application/pdf" data="" id="review" data=“这⾥写后台⽅法地址” > </object>代码质量有点差,⼤家凑合看。不懂的直接评论