700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java实现导出内容为PDF格式

Java实现导出内容为PDF格式

时间:2021-01-01 03:42:57

相关推荐

Java实现导出内容为PDF格式

先看一下导出的PDF效果图简单版

导出内容为PDF格式基本流程:

先创建一个word文档,我这边命名为:mytest,并写好你要输出内容的固定信息。

再将此word文档另存为pdf格式,我放到了我本地的D盘下。

然后用Adobe Acrobat Pro 打开刚刚制作的pdf文件(没有Adobe Acrobat Pro的自己去官网下载)

打开后是这样:

点击左上角的创建,并点击“创建表单”

然后选择“从现有文档创建”

依次点击“下一步”,“继续”。这时会出现下框,不用管它直接点确定就好

然后鼠标右键点击空白处,选择“文本域(T)”

设置好域名称,域名称就是输出pdf中每个字段的内容,是一个变量

域名称设置完了(域名称要对应上java代码中的字段)。

点击右上角的“文件”,另存一下

我存到了本地D盘 mytest5.pdf

打开mytest5.pdf是这样

到此为止,整个PDF模板做好了。下面开始写工具类:

导入依赖

!--导出pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency>

工具类

import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import com.itextpdf.text.*;import com.itextpdf.text.pdf.*;public class PdfUtils {// 利用模板生成pdfpublic static void pdfout(Map<String,Object> o) {// 模板路径String templatePath = "D:/mytest5.pdf";// 生成的新文件路径String newPDFPath = "D:/testout2.pdf";PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {out = new FileOutputStream(newPDFPath);// 输出流reader = new PdfReader(templatePath);// 读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字类的内容处理Map<String,String> datemap = (Map<String,String>)o.get("datemap");for(String key : datemap.keySet()){String value = datemap.get(key);form.setField(key,value);}//图片类的内容处理Map<String,String> imgmap = (Map<String,String>)o.get("imgmap");for(String key : imgmap.keySet()) {String value = imgmap.get(key);String imgpath = value;int pageNo = form.getFieldPositions(key).get(0).page;Rectangle signRect = form.getFieldPositions(key).get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();//根据路径读取图片Image image = Image.getInstance(imgpath);//获取图片页面PdfContentByte under = stamper.getOverContent(pageNo);//图片大小自适应image.scaleToFit(signRect.getWidth(), signRect.getHeight());//添加图片image.setAbsolutePosition(x, y);under.addImage(image);}stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑stamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {System.out.println(e);} catch (DocumentException e) {System.out.println(e);}}public static void main(String[] args) {Map<String,String> map = new HashMap();// map中的键要对应设置好的PDF模板中域名称map.put("partsName","张三");map.put("num","12");map.put("price","123");map.put("purchasePrice","100.5");map.put("manHourFee","15");map.put("totalPay","565");Map<String,String> map2 = new HashMap();// 图片路径map2.put("img","d:/cheliang01.jpg");Map<String,Object> o=new HashMap();o.put("datemap",map);o.put("imgmap",map2);pdfout(o);}}

在main方法里运行,PDF就导出了。

下面就是导出后的PDF效果,很简单效果图,现实中可以根据需求自己添加变量,域名称。

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