springboot+itextpdf按模板生成PDF文件及在线下载PDF文件

编程入门 行业动态 更新时间:2024-10-19 02:18:51

springboot+itextpdf按模板生成PDF文件及<a href=https://www.elefans.com/category/jswz/34/1770935.html style=在线下载PDF文件"/>

springboot+itextpdf按模板生成PDF文件及在线下载PDF文件

最近做项目改造,将C项目改造成Java项目,因为没有文档,从网上找了很多资料,做成了生成文件放到本地,后来才发现跑偏了,是在线生成文件下载,索性两个代码都写到了工具类中,方面以后使用。
生成本地文件和导出文件,都是流的问题,一个FileOutputStream(路径)一个BufferedOutputStream(response.getOutputStream())。
这个功能是将数据库查询到的数据插入到固定的模板中。具体操作流程如下:
首先在word文档中,设定好模板,保存为pdf格式,然后使用Adobe Acrobat软件打开,我用的是Adobe Acrobat 9 Pro版本的,
用到了文件和表单两个模块。
在文件中打开你刚才保存的模板,然后点击表单,添加或编辑域,就可以自己选定区域,就可以添加域,域名称就是你要传的值的属性名,对应不上的话就传不上的;这里需要注意设置域的长度,如果长度小于你的字段长度,会自动隐藏掉超出的部分,不会自己增长,所以要设定的长度尽量的长。

引入依赖:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.1</version>
</dependency>

好了,贴代码:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.URLEncoder;
import java.util.HashMap;
import java.util.Map;/*** 根据pdf模板生成pdf文件生成到某路径下或导出*
*/
public class PdfUtil {/*** 利用模板生成pdf保存到某路径下*/public static void pdfOut(Map<String, Object> inputMap) {// 生成的新文件路径String path0 = "D:/ProhibitDelete";File f = new File(path0);if (!f.exists()) {f.mkdirs();}// 模板路径String templatePath = "D:/ProhibitDelete/template11.pdf";// 创建文件夹String newPdfPath = "D:/ProhibitDelete/testMould.pdf";File file = new File(templatePath);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}File file1 = new File(newPdfPath);if (!file1.exists()) {try {file1.createNewFile();} catch (IOException e) {e.printStackTrace();}}PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {BaseFont bf = BaseFont.createFont("C:/Windows/Fonts/simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);// 输出流out = new FileOutputStream(newPdfPath);// 读取pdf模板reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字类的内容处理Map<String, String> datemap = (Map<String, String>) inputMap.get("dateMap");form.addSubstitutionFont(bf);for (String key : datemap.keySet()) {String value = datemap.get(key);form.setField(key, value);}stamper.setFormFlattening(false);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 | DocumentException e) {System.out.println(e);}}/*** 利用模板生成pdf导出*/public static void pdfExport(Map<String, Object> inputMap, HttpServletResponse response) {// 生成的新文件路径String path0 = "D:/ProhibitDelete";File f = new File(path0);if (!f.exists()) {f.mkdirs();}// 模板路径String templatePath = "D:/ProhibitDelete/template12.pdf";File file = new File(templatePath);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}PdfReader reader;ByteArrayOutputStream bos;PdfStamper stamper;OutputStream out = null;try {Map<String, String> datemap = (Map<String, String>) inputMap.get("dateMap");BaseFont bf = BaseFont.createFont("C:/Windows/Fonts/simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);// 输出流response.setContentType("application/pdf");response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(datemap.get("billId") + ".pdf", "UTF-8"));out = new BufferedOutputStream(response.getOutputStream());// 读取pdf模板reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字类的内容处理form.addSubstitutionFont(bf);for (String key : datemap.keySet()) {String value = datemap.get(key);form.setField(key, value);}stamper.setFormFlattening(false);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 | DocumentException e) {System.out.println(e);} finally {try {assert out != null;out.close();} catch (IOException e) {e.printStackTrace();}}}    
} ```

更多推荐

springboot+itextpdf按模板生成PDF文件及在线下载PDF文件

本文发布于:2024-03-09 10:04:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724676.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:在线   文件   模板   springboot   itextpdf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!