JAVA操作Itext向pdf模板中填充数据,图片,复选框!

📅 2026/7/31 18:10:45
JAVA操作Itext向pdf模板中填充数据,图片,复选框!
第一步模板制作在word中先把模板画好另存为pdf具体步骤为wps—》工具------》开发工具。如图所示图片也是设置为文本域千万不要设置为图片域否则图片会被覆盖图片也是设置为文本域千万不要设置为图片域否则图片会被覆盖图片也是设置为文本域千万不要设置为图片域否则图片会被覆盖准备好模板后下载adobe2024获取破解安装包yzb328899发送adobe也可自行下载,想用claude opus或者Claude fable可访问https://t96home.com或http://t96claude.com看教程安装直接用claude code实现即可。安装好adobe后打开刚刚保存的模板在adobe中打开准备表单。如下图所示定义模板中的每一个字段名称包括样式字段的字体大小颜色和其他的属性如下图所示JAVA中的map或者实体对象命名时字段名必须与这里保持一致JAVA中的map或者实体对象命名时字段名必须与这里保持一致JAVA中的map或者实体对象命名时字段名必须与这里保持一致操作复选框定义属性定义选中时的形状如何选中复选框当参数传递“导出值”时即为选中如下图所示JAVA中设置选中这里要设置为true否则是相反的选中为x只有设置为true时选中才是√。form.setField(toggle1,Y,true);form.setField(toggle2,Yes,true);form.setField(toggle3,On,true);结果如图所示接下来开始代码实现直奔主题添加maven依赖!-- itextpdf的亚洲字体支持 --dependencygroupIdcom.itextpdf/groupIdartifactIditext-asian/artifactIdversion5.2.0/version/dependency!--itextpdf--dependencygroupIdcom.itextpdf/groupIdartifactIditextpdf/artifactIdversion5.5.13.3/version/dependency!--生成二维码--dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.4.1/version/dependencydependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.4.1/version/dependency将准备好的pdf模板放入项目中的resource----》static-------》template目录。若没有此目录则自己创建如图所示表单内容实体类Entity Or Domainimportlombok.Data;DatapublicclassPaymentOrder{/** * 年 */privateStringyear;/** *月 */privateStringmonth;/** *日 */privateStringday;/** *付款 */privateStringtoggle1;/** *支票 */privateStringtoggle2;/** *转账 */privateStringtoggle3;/** *收款账号 */privateStringacount;/** *人民币大写 */privateStringCNY;/** *人民币数值 */privateStringcnyNum;/** * 二维码 */privateStringQRCode;/** * 图片 */privateStringphoto;/** *备注 */privateStringremark;}Controller层代码实现GetMapping(/test)publicvoidgenerateForm(HttpServletResponseresponse,PaymentOrderpaymentOrder){//此处模拟前端传来的数据或查询数据库获得的数据paymentOrder.setAcount(1111);paymentOrder.setCNY(壹佰万);paymentOrder.setYear(2024);paymentOrder.setMonth(07);paymentOrder.setDay(22);//图片绝对路径paymentOrder.setPhoto(C:\\Users\\Administrator\\Desktop\\goods\\ruoyi-system\\src\\main\\resources\\static\\img.png);paymentOrder.setRemark(测试一下);paymentOrder.setCnyNum(1000000);paymentOrder.setToggle1(Y);paymentOrder.setToggle3(Y);//二维码内容paymentOrder.setQRCode(https://blog.csdn.net/m0_46523467?spm1000.2115.3001.5343);//pdf模板存放路径StringtemplatePathC:\\Users\\Administrator\\Desktop\\goods\\ruoyi-system\\src\\main\\resources\\static\\template\\payment_order_template.pdf;//生成后的文件存放路径StringoutPutPathC:\\Users\\Administrator\\Desktop\\goods\\ruoyi-system\\src\\main\\resources\\static\\payment_order.pdf;logisticsService.generateForm(response,paymentOrder,templatePath,outPutPath);}service 层/** * 报表生成 * param response * param paymentOrder * param templatePath * param outputPath */voidgenerateForm(HttpServletResponseresponse,PaymentOrderpaymentOrder,StringtemplatePath,StringoutputPath);}serviceImpl/** * 报表生成 * param response * param paymentOrder */OverridepublicvoidgenerateForm(HttpServletResponseresponse,PaymentOrderpaymentOrder,Stringtemplate_path,Stringoutput_path){//表单中的文本数据mapMapString,StringformnewHashMap();//表单中图片mapMapString,StringimagenewHashMap();//表单中二维码图片生成内筒mapMapString,StringqrcodenewHashMap();//表单内容form.put(year,paymentOrder.getYear());form.put(month,paymentOrder.getMonth());form.put(day,paymentOrder.getDay());form.put(acount,paymentOrder.getAcount());form.put(CNY,paymentOrder.getCNY());form.put(toggle1,paymentOrder.getToggle1());form.put(toggle2,paymentOrder.getToggle2());form.put(toggle3,paymentOrder.getToggle3());form.put(cnyNum,paymentOrder.getCnyNum());form.put(remark,paymentOrder.getRemark());//图片image.put(photo,paymentOrder.getPhoto());//二维码的内容qrcode.put(QRCode,paymentOrder.getQRCode());/**填充表单内容width为二维码的宽height为二维码的高,如没有二维二维码和图片则传null宽和高传0。 *fillPdfTemplate(String templateUrl, String outputFileUrl, MapString, String fieldMap, *MapString, String imageMap, MapString, String QRCodeMap,int width,int height) */PDFUtils.fillPdfTemplate(template_path,output_path,form,image,qrcode,300,300);自定义PDF工具类importcom.itextpdf.text.DocumentException;importcom.itextpdf.text.Image;importcom.itextpdf.text.Rectangle;importcom.itextpdf.text.pdf.*;importlombok.extern.slf4j.Slf4j;importjava.io.File;importjava.io.IOException;importjava.io.OutputStream;importjava.lang.reflect.Field;importjava.nio.file.Files;importjava.util.HashMap;importjava.util.Map;Slf4jpublicfinalclassPDFUtils{publicstaticbooleanfillPdfTemplate(StringtemplateUrl,StringoutputFileUrl,MapString,StringfieldMap,MapString,StringimageMap,MapString,StringQRCodeMap,intwidth,intheight){booleansuccesstrue;OutputStreamosnull;PdfStamperpsnull;PdfReaderreadernull;AcroFieldsformnull;try{osFiles.newOutputStream(newFile(outputFileUrl).toPath());readernewPdfReader(templateUrl);psnewPdfStamper(reader,os);formps.getAcroFields();// 添加中文字体支持可选BaseFontbfBaseFont.createFont(STSong-Light,UniGB-UCS2-H,BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(bf);// 填充表单字段for(Map.EntryString,Stringentry:fieldMap.entrySet()){if(entry.getValue()!null){form.setField(entry.getKey(),entry.getValue(),true);}}// 插入图片for(Map.EntryString,Stringentry:imageMap.entrySet()){if(entry.getValue()!null){insertImage(form,ps,entry.getKey(),entry.getValue());}}// 插入二维码for(Map.EntryString,Stringentry:QRCodeMap.entrySet()){if(width!0height!0){insertQRCodeImage(form,ps,entry.getKey(),entry.getValue(),width,height);}}}catch(Exceptione){successfalse;e.printStackTrace();// 可以根据实际情况处理异常}finally{try{if(ps!null)ps.close();if(reader!null)reader.close();if(os!null)os.close();}catch(IOException|DocumentExceptione){thrownewRuntimeException(e);}finally{System.out.println(文件导出完成);}}returnsuccess;}//插入图片的函数fieldName为字段名imageUrl为图片路径privatestaticvoidinsertImage(AcroFieldsform,PdfStamperps,StringfieldName,StringimageUrl)throwsIOException,DocumentException{if(imageUrl!null){//获取fieldName所在的页码intpageNoform.getFieldPositions(fieldName).get(0).page;RectanglesignRectform.getFieldPositions(fieldName).get(0).position;floatxsignRect.getLeft();floatysignRect.getBottom();ImageimageImage.getInstance(imageUrl);// 获取操作的页面PdfContentByteoverContentps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(),signRect.getHeight());// 添加图片image.setAbsolutePosition(x,y);overContent.addImage(image);ps.setFormFlattening(true);}}//生成二维码图片并插入图片的函数privatestaticvoidinsertQRCodeImage(AcroFieldsform,PdfStamperps,StringfieldName,StringqrCodeUrl,intwidth,intheight)throwsIOException,DocumentException{if(qrCodeUrl!null!qrCodeUrl.equals()){intpageNoform.getFieldPositions(fieldName).get(0).page;RectanglesignRectform.getFieldPositions(fieldName).get(0).position;floatxsignRect.getLeft();floatysignRect.getBottom();// 生成二维码BarcodeQRCodebarcodeQRCodenewBarcodeQRCode(qrCodeUrl,width,height,null);ImageimagebarcodeQRCode.getImage();// 获取操作的页面PdfContentByteoverContentps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(),signRect.getHeight());// 添加二维码图片到pdf中image.setAbsolutePosition(x,y);overContent.addImage(image);ps.setFormFlattening(true);}}}实现结果