1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【Java】使用PDF模板合成PDF文件(文本 + 图片)

【Java】使用PDF模板合成PDF文件(文本 + 图片)

时间:2022-08-11 06:08:35

相关推荐

【Java】使用PDF模板合成PDF文件(文本 + 图片)

使用PDF模板合成PDF文件(文字 + 图片)

制作PDF模板工具:Adobe Acrobat 9 Pro

导入依赖

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

package com.zzz.util;import com.itextpdf.text.Image;import com.itextpdf.text.pdf.*;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.util.HashMap;import java.util.Map;public class PdfUtils {/*** 动态合成DPF 文本 + 图片* @param data Map<String, String>类型 key:模板中的字段名 value:填入值* @param imageDataMap<String, String>类型 key:模板中的字段名 value:图片路径* @return*/public static String pdfContractBuilder(Map<String, String> data, Map<String, String> imageData){String contractUrl = null;//合同模板链接String contractTemplateUrl = "https://zzz-/proxy/contract_template.pdf";System.setProperty("javax.xml.parsers.DocumentBuilderFactory", ".apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");ByteArrayOutputStream byteArrayOutputStream = null;FileOutputStream fileOutputStream = null;PdfStamper ps = null;PdfReader reader = null;try {byteArrayOutputStream = new ByteArrayOutputStream();reader = new PdfReader(contractTemplateUrl);ps = new PdfStamper(reader, byteArrayOutputStream);AcroFields form = ps.getAcroFields();// 设置中文BaseFont font = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(font);//for (String key : data.keySet()) {form.setField(key,data.get(key));}// 添加图片if(null != imageData && imageData.size() > 0){for(String key : imageData.keySet()){int pageNo = form.getFieldPositions(key).get(0).page;com.itextpdf.text.Rectangle signRect = form.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imageData.get(key));if(key.equals("userSign")){image.setRotationDegrees(90);}// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);}}ps.setFormFlattening(true);ps.close();reader.close();byteArrayOutputStream.write(byteArrayOutputStream.toByteArray());contractUrl = "D:/" + System.currentTimeMillis()+".pdf";fileOutputStream = new FileOutputStream(contractUrl);fileOutputStream.write(byteArrayOutputStream.toByteArray());} catch (Exception e) {e.printStackTrace();} finally {try {if(ps != null){ps.close();}if(reader != null){reader.close();}byteArrayOutputStream.close();} catch (Exception e) {e.printStackTrace();}}return contractUrl;}public static void main(String[] args) {Map<String, String> data = new HashMap<>();data.put("realName", "大壮");data.put("idCard", "142622188888888888");data.put("mobile", "17888888888");data.put("year", "");data.put("month", "08");data.put("day", "20");Map<String, String> imageMap = new HashMap<>();//签名imageMap.put("userSign", "https://zzz-/proxy/contract/sign/64859.png");imageMap.put("stamp", "https://zzz-/proxy/contract/sign/64859.png");//章String contractUrl = PdfUtils.pdfContractBuilder(data, imageMap);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。