java根据pdf模版动态生成pdf

packagecom.utils;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.LinkedList;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importorg.apache.commons.io.FileUtils;importorg.xhtmlrenderer.pdf.ITextFontResolver;importorg.xhtmlrenderer.pdf.ITextRenderer;importcom.itextpdf.text.Document;importcom.itextpdf.text.DocumentException;importcom.itextpdf.text.Element;importcom.itextpdf.text.Font;importcom.itextpdf.text.PageSize;importcom.itextpdf.text.Phrase;importcom.itextpdf.text.pdf.AcroFields;importcom.itextpdf.text.pdf.AcroFields.Item;importcom.itextpdf.text.pdf.BaseFont;importcom.itextpdf.text.pdf.PdfContentByte;importcom.itextpdf.text.pdf.PdfPCell;importcom.itextpdf.text.pdf.PdfPTable;importcom.itextpdf.text.pdf.PdfReader;importcom.itextpdf.text.pdf.PdfStamper;importcom.itextpdf.text.pdf.PdfWriter;/*** 根据pdf模版动态生成pdf工具类*/
public classPDFReplaceUtils {public static final String htmlPreffix = "<!DOCTYPE html [<!ENTITY nbsp \" \"> ]><html><head><meta charset=\"UTF-8\"></meta><title></title></head><body>";public static final String htmlSuffix = "</body></html>";/*** 动态生成pdf** @* @date 2017年11月5日 上午11:40:44*@paramfileName*            模版路径*@paramoutFileName*            生成pdf路径*@parammap*            动态赋值pdf文本域名称和值*@throwsIOException*@throwsDocumentException*/public static void pdf(String fileName, String outFileName, Map<String, String>map)throwsIOException, DocumentException {PdfReader reader= newPdfReader(fileName);ByteArrayOutputStream bos= newByteArrayOutputStream();PdfStamper ps= newPdfStamper(reader, bos);BaseFont bf= BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);AcroFields s=ps.getAcroFields();s.setSubstitutionFonts(fontList);Map<String, Item> fieldMap = s.getFields(); //pdf表单相关信息展示for (Entry<String, Item>entry : fieldMap.entrySet()) {String name= entry.getKey(); //name就是pdf模版中各个文本域的名字Item item =entry.getValue();}//给pdf文本域赋值for (Entry<String, String>maps : map.entrySet()) {s.setField(maps.getKey(), maps.getValue());}ps.setFormFlattening(true); //不能少
ps.close();OutputStream fos= newFileOutputStream(outFileName);fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();reader.close();}/*** 创建pdf表格** @* @date 2017年11月5日 下午8:48:07*@paramfileName*            表格名称*@paramcolumnNum*            列数*@paramlists*            单元格内容*@throwsDocumentException*@throwsIOException*/public static void createPdfTable(String fileName, int columnNum, List<Map<String, String>>lists)throwsDocumentException, IOException {Document document= newDocument(PageSize.A4);PdfWriter.getInstance(document,newFileOutputStream(fileName));document.open();PdfPTable table= newPdfPTable(columnNum);table.setTotalWidth(50);table.setHeaderRows(0);table.setSpacingBefore(10f);BaseFont bf= BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font chinese= new Font(bf, 12, Font.NORMAL);Phrase phrase;PdfPCell cell;for (Map<String, String>map : lists) {for (Entry<String, String>maps : map.entrySet()) {phrase= newPhrase(maps.getValue(), chinese);cell= newPdfPCell(phrase);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);}}document.add(table);document.close();}/*** 多个pdf合并,根据参数选择是否删除参与合并的pdf、 将合并后的pdf名称改为第几个参与合并的名称 注:需参与合并的pdf文件 请按需求正序排序** @* @date 2017年11月7日 下午8:46:43*@paramfileList*            要合并的pdf集合*@paramnewFile*            新文件*@paramisDelete*            是否删除参与合并的pdf文件*@paramnumFileName*            将新pdf文件名改为 第几个 参与合并pdf名*@throwsDocumentException*@throwsIOException*/public static void mergePdfFiles(List<String>fileList, String newFile, Boolean isDelete, Integer numFileName)throwsDocumentException, IOException {PdfReader[] readers= newPdfReader[fileList.size()];readers[0] = new PdfReader(fileList.get(0));PdfStamper stamp= new PdfStamper(readers[0], newFileOutputStream(newFile));PdfContentByte under;int pageNum = 1;for (int i = 1; i < fileList.size(); i++) {readers[i]= new PdfReader(fileList.get(i), null);pageNum+=readers[i].getNumberOfPages();stamp.insertPage(pageNum, PageSize.A4);under=stamp.getUnderContent(pageNum);under.addTemplate(stamp.getImportedPage(readers[i],1), 1, 0, 0, 1, 0, 0);}stamp.close();for(PdfReader pdfReader : readers) {pdfReader.close();}if (isDelete != null && isDelete == true) {//循环删除文件for(String file : fileList) {newFile(file).delete();}}if (numFileName != null && numFileName > 0) {//将新文件名改为第N个文件的路径File modifyFileName = newFile(newFile);modifyFileName.renameTo(new File(fileList.get(numFileName - 1)));}}/*** 富文本生成pdf文件**@paramcontext*            html格式文本数据*@paramoutputFile*            输出pdf文件的路径*@return*@throwsException*/public static boolean convertHtmlToPdf(String context, String outputFile,String fontPath) throwsException {OutputStream os= newFileOutputStream(outputFile);ITextRenderer renderer= newITextRenderer();renderer.setDocumentFromString(context);//解决中文支持问题ITextFontResolver fontResolver =renderer.getFontResolver();fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//解决图片的相对路径问题//renderer.getSharedContext().setBaseURL("file:/D:/");
renderer.layout();renderer.createPDF(os);os.flush();os.close();return true;}public static void main(String[] args) throwsIOException, DocumentException {//List<String> list = new LinkedList<String>();//list.add("D:/1.pdf");//list.add("D:/2.pdf");//list.add("D:/3.pdf");//String newFile = "D:/4.pdf";//try {//PDFReplaceUtils.mergePdfFiles(list, newFile, true, 2);//} catch (DocumentException e) {// //TODO Auto-generated catch block//e.printStackTrace();//} catch (IOException e) {// //TODO Auto-generated catch block//e.printStackTrace();//}byte[] bytes;try{//bytes = FileUtils.readFileToByteArray(new File("D:/pdftest.html"));//convertHtmlToPdf(new String(bytes),"D:/lc.pdf","D:/simsun.ttc");} catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();}Map<String, String> map = new HashMap<String, String>();map.put("ProtocolNo", "jj");map.put("Borrower", "qq");map.put("Mobile", "12345678912");pdf("D:/jcsBorrow.pdf", "D:/test.pdf", map);//try {//List<Map<String, String>> list = null;//Map<String, String> map = new HashMap<String, String>();//list = new LinkedList<Map<String, String>>();//map.put("出借人(会员号)", "出借人(会员号)");//map.put("出借人身份证号", "出借人身份证号");//map.put("出借金额", "出借金额");//map.put("借款开始日", "借款开始日");//map.put("月截止还款日", "月截止还款日");//map.put("年利率", "年利率");//map.put("还款方式", "还款方式");//list.add(map);//createPdfTable("D:/test.pdf", 7, list);//} catch (DocumentException e) {//         //TODO Auto-generated catch block//e.printStackTrace();//} catch (IOException e) {//         //TODO Auto-generated catch block//e.printStackTrace();//}
}
}

转载于:https://www.cnblogs.com/chenyq/p/7807857.html

java根据pdf模版动态生成pdf相关推荐

  1. java使用world模板动态生成PDF文件

    根据项目需求,需要用到一个功能,根据页面参数需要动态的生成一个world,并将world生成两份PDF文件,一份正式文件,一份临时的电子文件(带有二维码,扫描可以下载正式文件的电子版本).同时上传到文 ...

  2. java maven 读写pdf_Java动态生成pdf文件(使用itext编辑pdf)

    一.创建pdf模板 使用PDFelement制作pdf模板(数据域的名称对应后面插入的key) 二.导入maven依赖 com.itextpdf itextpdf 5.5.13 com.itextpd ...

  3. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件

    简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...

  4. java基于word模板动态生成word及转pdf实践

    在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多 由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来 在咨询了之前做政务系统的同学后,他们都一致推荐我使 ...

  5. java动态生成pdf文件的方法

    java动态生成pdf文件 文章目录 java动态生成pdf文件 前言 一.生成pdf模板 二.使用步骤 1.使用jar包 2.pdf实现方法 总结 前言 java开发过程中难免会遇到生成文件的需求, ...

  6. Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

    Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 ​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...

  7. Java 读取 Excel 文件内容, 根据 pdf 模板动态生成对应的 pdf 文件

    1. 下载 adobe acrobat https://www.cr173.com/soft/11135.html 2. 编辑 pdf 模板 1用 acrobat 打开 pdf 编辑模板 添加表单元素 ...

  8. 如何动态生成pdf文件?

    pdfService系统 一. 背景 在许多开发需求中都有动态生成pdf文件的需求,例如根据已有的json字符串渲染到一个表格中,然后生成对应的PDF文档,以往的解决方法是调用许多个接口生产pdf文件 ...

  9. django生成文件txt、pdf(在生成 PDF 文件之前,需要安装 ReportLab 库)

    from django.http import HttpResponse def download_file(request): # Text file #response = HttpRespons ...

最新文章

  1. 观察者模式(Observer)
  2. 【总结】IE和Firefox的Javascript兼容性总结
  3. python3-Python3 zip() 函数
  4. php+ajax简单实现跨域(http+https)请求调用
  5. 7 个建议让 Code Review 高效又高质
  6. 最最最最终极办法!解决Idea乱码问题
  7. 软件测试工程师笔试总结
  8. LeetCode--34.在排序数组中查找元素第一个和最后一个位置(二分法)
  9. C++STL笔记(八):set和multiset详解
  10. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
  11. es管理kabina_ES和Kibana在Linux上的安装
  12. 基于python及图像识别的围棋棋盘棋子识别2——定位棋子位置及识别棋子颜色
  13. 《天才在左、疯子在右》随笔
  14. c语言实现审查元素,如何删除qq空间说说?一键自动删除QQ空间说说审查元素代码分享(超简单)...
  15. PHP上传文件大小限制大全
  16. MINIS FORUM U820黑苹果安装教程
  17. 微博数据解析:国产彩妆品牌对比 | 完美日记 VS 花西子
  18. android studio manifest merger failed,android studio 引用第三方工程Manifest merger failed
  19. 导出IOS工程出错:DXT1 compressed textures are not supported when publishing to iPhone
  20. 不敲代码用ChatGPT开发一个App

热门文章

  1. 类图的使用 c# 1613918428
  2. django-url映射给函数给默认值
  3. python-函数的多值传参
  4. DP! | 不要怂!
  5. c语言 谭浩强 一维数组内放10个学生成绩 全局变量写一个函数 最高分、最低分、平均分...
  6. 923D - 单片机进阶步骤
  7. 计算机达人成长之路 目录
  8. 【WPF】一个类似于QQ面板的GroupShelf控件
  9. 50個AJAX Tools and Frameworks
  10. 没有一款趁手的数据监控软件?试一下NetData不,用了你就绝对离不开他!