最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

java 根据PDF模板生成PDF文件并导出

互联网 admin 3浏览 0评论

java 根据PDF模板生成PDF文件并导出

1.准备操作的maven包

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

2.准备好你需要操作的PDF模板

3.准备好Adobe Acrobat Distiller DC 工具

4.使用Adobe Acrobat 打开你准备好的pdf模板,如图:

打开工具栏,找到准备表单

打开后,你就可以对你需要赋值的PDF表单进行字段的编辑,如下图:

5.使用Java 读取pdf文件

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;/*** Created by gf on 2019/4/20.*/
public class PDFUtil {public static void main(String[] args) throws Exception {test();System.out.println("success");}public static void test() throws IOException, DocumentException {// pdf模板String fileName = "E:/tools/停车场业务申请表.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);//对表单数据进行赋值fillData(fields, ps, data());//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();}public static void fillData(AcroFields fields, PdfStamper ps, Map<String, String> data) throws IOException, DocumentException {// 为字段赋值,注意字段名称是区分大小写的for (String key : data.keySet()) {if (key.equals("image")){/*** 添加图片*/String imgpath = data.get(key);int pageNo = fields.getFieldPositions(key).get(0).page;Rectangle signRect = fields.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);}else {String value = data.get(key);fields.setField(key, value);}}}public static Map<String, String> data() {Map<String, String> data = new HashMap<String, String>();data.put("name", "王强");data.put("idcard", "5303811111111111");data.put("phone", "18200000000");data.put("companyName", "XXXXXX公司");data.put("payTime", "2018年10月10日");//选择框的设置On为选中data.put("build", "On");data.put("house", "On");data.put("other", "Off");//        data.put("building", "18208817655");
//
//        data.put("floor", "18208817655");data.put("first", "On");//        data.put("again", "18208817655");//        data.put("change", "18208817655");data.put("expireTime", "2018年10月10日");data.put("plate", "京A10101");data.put("amount", "768.25");return data;}}

这样对pdf文件赋值就成功了,新手小白欢迎指正

 

java 根据PDF模板生成PDF文件并导出

1.准备操作的maven包

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

2.准备好你需要操作的PDF模板

3.准备好Adobe Acrobat Distiller DC 工具

4.使用Adobe Acrobat 打开你准备好的pdf模板,如图:

打开工具栏,找到准备表单

打开后,你就可以对你需要赋值的PDF表单进行字段的编辑,如下图:

5.使用Java 读取pdf文件

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;/*** Created by gf on 2019/4/20.*/
public class PDFUtil {public static void main(String[] args) throws Exception {test();System.out.println("success");}public static void test() throws IOException, DocumentException {// pdf模板String fileName = "E:/tools/停车场业务申请表.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);//对表单数据进行赋值fillData(fields, ps, data());//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();}public static void fillData(AcroFields fields, PdfStamper ps, Map<String, String> data) throws IOException, DocumentException {// 为字段赋值,注意字段名称是区分大小写的for (String key : data.keySet()) {if (key.equals("image")){/*** 添加图片*/String imgpath = data.get(key);int pageNo = fields.getFieldPositions(key).get(0).page;Rectangle signRect = fields.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);}else {String value = data.get(key);fields.setField(key, value);}}}public static Map<String, String> data() {Map<String, String> data = new HashMap<String, String>();data.put("name", "王强");data.put("idcard", "5303811111111111");data.put("phone", "18200000000");data.put("companyName", "XXXXXX公司");data.put("payTime", "2018年10月10日");//选择框的设置On为选中data.put("build", "On");data.put("house", "On");data.put("other", "Off");//        data.put("building", "18208817655");
//
//        data.put("floor", "18208817655");data.put("first", "On");//        data.put("again", "18208817655");//        data.put("change", "18208817655");data.put("expireTime", "2018年10月10日");data.put("plate", "京A10101");data.put("amount", "768.25");return data;}}

这样对pdf文件赋值就成功了,新手小白欢迎指正

 

发布评论

评论列表 (0)

  1. 暂无评论