这几天已在做处理导出pdf文件的功能,摸索了几天总算可以了。记录下这几天遇到的问题。

1.网上基本都是基于Itext5和Itext7来处理的。我最终是在Itext5上成功了,itext7应该是模板出问题了,在写的test方法里面测试时候,总是 找不到 pdf文档里面的form表单内容。因为需要使用adobe acrobat reader dc 来制作模板,而我没有这个。一直导致失败。

2.最终成功是参考这个文档:

https://blog.csdn.net/yi2419808933/article/details/52469241

https://blog.csdn.net/yi2419808933/article/details/52469241

3.贴上最终代码

 /*** 导出对账单* @return*/@RequestMapping("/exportSupplierFeeData")@ResponseBody@MasterSlaveConfigs(configs={@MasterSlaveConfig(databaseTag="mdbcarmanage-DataSource",mode= DynamicRoutingDataSource.DataSourceMode.SLAVE)} )public AjaxResponse exportSupplierFeeData(HttpServletRequest request, HttpServletResponse response,ServletOutputStream outputStream,Integer cityId, Integer supplierId,Integer status, Integer amountStatus, String settleStartDate,String settleEndDate, String paymentStartTime, String paymentEndTime, String feeOrderNo){logger.info(MessageFormat.format("查询司机线上化入参:cityId:%s,supplierId:%s,status:%s," +"amountStatus:%s,settleStartDate:%s,settleEndDate:%s,paymentStartTime:%s,paymentEndTime:%s",cityId,supplierId,status,amountStatus,settleStartDate,settleEndDate,paymentStartTime,paymentEndTime));response.setContentType("application/pdf;charset=ISO8859-1");response.setHeader("Content-disposition", "attachment; filename="+"supplierFeePDF-1.pdf");SupplierFeeManageDto feeManageDto = new SupplierFeeManageDto();feeManageDto.setCityId(cityId);feeManageDto.setSettleStartDate(settleStartDate);feeManageDto.setSettleEndDate(settleEndDate);feeManageDto.setAmountStatus(amountStatus);feeManageDto.setStatus(status);SupplierFeeManage manage = supplierFeeService.queryByOrderNo(feeOrderNo);String[] titles = { "供应商名称1", "列名t2", "列名3", "列名4", "t5", "t6","t7"};try {ByteArrayOutputStream ba = new ByteArrayOutputStream();Document document = new Document(PageSize.A3); // Step 1—Create a Document.PdfWriter writer;writer = PdfWriter.getInstance(document, ba);document.open();document.setMargins(5, 5, 5, 5);//H 代表文字版式是横版,相应的 V 代表竖版BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//STSongStd-Light 是字体,在jar 中以property为后缀//参数一:新建好的字体;参数二:字体大小,参数三:字体样式,多个样式用“|”分隔Font topfont = new Font(bfChinese,14,Font.BOLD);//BaseFont bf = BaseFont.createFont("" + "fonts/simsun.ttc,0", BaseFont.IDENTITY_H,//   BaseFont.EMBEDDED);Paragraph blankRow1 = new Paragraph(18f, " ");blankRow1.setAlignment(Element.ALIGN_CENTER);PdfPTable table1 = new PdfPTable(titles.length); //创建一个表格,参数为一行有几栏int width1[] = {100,150,150,100,50,50,55};//每栏的宽度table1.setWidths(width1); //设置宽度//首行for(int i=0;i<titles.length;i++){PdfPCell cell1 = new PdfPCell(new Paragraph(titles[i],topfont));table1.addCell(cell1);}//每栏的值//PdfPCell cell1 = new PdfPCell(new Paragraph(manage.getSupplierId()));/*             PdfPTable celltable = new PdfPTable(2);cell1 = new PdfPCell(celltable);cell1.setRowspan(2);cell1.setPadding(10);table1.addCell(cell1);*/PdfPCell cell1 = new PdfPCell(new Paragraph("5555",topfont));table1.addCell(cell1);PdfPCell cell2= new PdfPCell(new Paragraph(manage.getFlowAmount(),topfont));table1.addCell(cell2);PdfPCell cell3= new PdfPCell(new Paragraph(manage.getSettleStartDate().toString(),topfont));table1.addCell(cell3);PdfPCell cell4= new PdfPCell(new Paragraph(manage.getPaymentTime().toString(),topfont));table1.addCell(cell4);PdfPCell cell5= new PdfPCell(new Paragraph(manage.getFeeOrderNo(),topfont));table1.addCell(cell5);PdfPCell cell6= new PdfPCell(new Paragraph(manage.getSupplierId().toString(),topfont));table1.addCell(cell6);PdfPCell cell7= new PdfPCell(new Paragraph(manage.getSupplierName().toString(),topfont));table1.addCell(cell7);document.add(table1);//将表格加入到document中// document.add(table2);document.add(blankRow1);document.close();ba.writeTo(outputStream);outputStream.flush();outputStream.close();ba.close(); // 导出pdf注解} catch (Exception e) {e.printStackTrace();}// 模板路径String templatePath =  "/Users/fan/workspace/mp-manage/src/main/webapp/upload/supplierFeePDF-1.pdf";// 生成的新文件路径String newPDFPath =  "/Users/fan/workspace/mp-manage/src/main/webapp/upload/supplierFeePDF-2.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();*//*String[] str = {manage.getSupplierName(), DateUtils.formatDate(manage.getSettleStartDate()),DateUtils.formatDate(manage.getSettleEndDate()),manage.getFlowAmount()};*//*String[] str = { "123456789", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };java.util.Iterator<String> it = form.getFields().keySet().iterator();*//*for(int i = 0;i<feeManageList.size();i++){SupplierFeeManage feeManage = feeManageList.get(i);form.setField(null,feeManage.getSupplierName());}*//*int i = 0;while (it.hasNext()) {String name = it.next().toString();System.out.println(name);form.setField(name, str[i++]);}stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.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(1);} catch (DocumentException e) {System.out.println(2);}
*/return null;}

  

转载于:https://www.cnblogs.com/thinkingandworkinghard/p/11543661.html

java导出pdf功能记录相关推荐

  1. 使用java导出pdf文件

    使用java导出pdf文件 itext itext的使用 JasperReports JasperReports与itext的区别 Jaspersoft Studio 工具简介 Jaspersoft ...

  2. java导出PDF(itextpdf+Adobe Acrobat 9 Pro)

    java导出PDF 背景 摸索 maven依赖 代码实现 模板及结果展示 模板 结果 彩蛋 彩蛋一:本地临时文件删除不了 彩蛋二:导出横向A4PDF 彩蛋三:多个PDF合并(待完成) 背景 最近接到一 ...

  3. java导出PDF、iText5导出漂亮表格PDF、导出指定格式水印PDF

    我们在项目当中经常要导出pdf文档,pdf文档还要按一定的格式导出,以下介绍导出pdf文档功能: 1)支持A4纸大小导出 2)指定文字显示的位置 3)支持表格展示数据 4)添加水印 开源下载 java ...

  4. cad导出pdf_如何使用浩辰CAD看图王软件来快速导出PDF功能?

    浩辰CAD旗下产品都是具有导出PDF功能的,如果是浩辰CAD平台软件或者专业软件选择 dwg to pdf 打印机,就可以输出pdf文件,如果是浩辰CAD看图王则直接就有导出PDF的功能. 浩辰CAD ...

  5. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字

    咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...

  6. JAVA导出PDF并压缩成zip

    JAVA导出PDF借助 iText pom先引入两个jar包 <dependency><groupId>com.itextpdf</groupId><arti ...

  7. java生成pdf电子书_java itext导出PDF功能实现

    java使用itext导出PDF文本绝对定位(实现方法) jar:itext-4.2.1.jar 在很多公文的落款处都需要绝对定位,所以记录此代码如下: PdfWriter writer = PdfW ...

  8. Java快速实现导出PDF功能

    Word转PDF并导出–Windows环境实现 一.制作word模板,这里需要文件后缀默认是.docx,${xxxx}是需要替换的内容 二.添加poi所需要的jar包文件,这里使用maven进行jar ...

  9. 「Java工具类」pdf导出工具类java导出pdf文件工具类

    介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...

最新文章

  1. 如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本
  2. 带花树[一般图最大匹配模板]
  3. windows下python2.7.14版本的安装
  4. Python数据分析与挖掘
  5. 新手Java程序员找工作更看重Java项目经验?
  6. mybatis学习(41):使用逆向工程
  7. JVM学习-CAS与原子类
  8. java环绕通知的应用_Spring之环绕通知
  9. [转载] Java异常处理中Try-Catch-Finally中常见的笔试题
  10. python怎么一次输入两个数_python如何一次性输入多个数
  11. Java进阶--Java垃圾回收机制全面解析
  12. 拜耳2020年10个新植保制剂商业化,3个生物技术性状项目推进至上市阶段
  13. Factory IO v2.5.2 Crack by Xacker
  14. 3D立体显示大屏幕拼接视频墙系统解决方案
  15. 我去!微信竟然可以查出行轨迹了,预计又一波情侣要分手?
  16. 前端面试题(不定期更新)
  17. 一键构建云上高可用蛋白质结构预测平台
  18. 彻底解决 gcr、quay、DockerHub 镜像下载难题
  19. IOS按钮排列自动换行
  20. 抖音短视频流量获取攻略,掌握好这些一定可以出爆款

热门文章

  1. charCodeAt() 和charAt()
  2. 更新hbase client api 2.0.1记录
  3. 基于51单片机超声波测距液位检测-温度检测
  4. 官网显示可刊,但还没收到录用通知书
  5. C语言根据域名得到IP地址
  6. C/C++:变长参数技巧汇总
  7. PH值检测C语言程序,单片机PH值检测鱼缸自动换水系统程序
  8. 计算机专业推荐游戏本,十大游戏笔记本电脑排名 热门游戏本推荐
  9. 微信小程序常见FAQ (17.8.21-17.8.27)
  10. 正点原子STM32(基于HAL库)4