java导出pdf功能记录
这几天已在做处理导出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功能记录相关推荐
- 使用java导出pdf文件
使用java导出pdf文件 itext itext的使用 JasperReports JasperReports与itext的区别 Jaspersoft Studio 工具简介 Jaspersoft ...
- java导出PDF(itextpdf+Adobe Acrobat 9 Pro)
java导出PDF 背景 摸索 maven依赖 代码实现 模板及结果展示 模板 结果 彩蛋 彩蛋一:本地临时文件删除不了 彩蛋二:导出横向A4PDF 彩蛋三:多个PDF合并(待完成) 背景 最近接到一 ...
- java导出PDF、iText5导出漂亮表格PDF、导出指定格式水印PDF
我们在项目当中经常要导出pdf文档,pdf文档还要按一定的格式导出,以下介绍导出pdf文档功能: 1)支持A4纸大小导出 2)指定文字显示的位置 3)支持表格展示数据 4)添加水印 开源下载 java ...
- cad导出pdf_如何使用浩辰CAD看图王软件来快速导出PDF功能?
浩辰CAD旗下产品都是具有导出PDF功能的,如果是浩辰CAD平台软件或者专业软件选择 dwg to pdf 打印机,就可以输出pdf文件,如果是浩辰CAD看图王则直接就有导出PDF的功能. 浩辰CAD ...
- 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字
咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...
- JAVA导出PDF并压缩成zip
JAVA导出PDF借助 iText pom先引入两个jar包 <dependency><groupId>com.itextpdf</groupId><arti ...
- java生成pdf电子书_java itext导出PDF功能实现
java使用itext导出PDF文本绝对定位(实现方法) jar:itext-4.2.1.jar 在很多公文的落款处都需要绝对定位,所以记录此代码如下: PdfWriter writer = PdfW ...
- Java快速实现导出PDF功能
Word转PDF并导出–Windows环境实现 一.制作word模板,这里需要文件后缀默认是.docx,${xxxx}是需要替换的内容 二.添加poi所需要的jar包文件,这里使用maven进行jar ...
- 「Java工具类」pdf导出工具类java导出pdf文件工具类
介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...
最新文章
- 如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本
- 带花树[一般图最大匹配模板]
- windows下python2.7.14版本的安装
- Python数据分析与挖掘
- 新手Java程序员找工作更看重Java项目经验?
- mybatis学习(41):使用逆向工程
- JVM学习-CAS与原子类
- java环绕通知的应用_Spring之环绕通知
- [转载] Java异常处理中Try-Catch-Finally中常见的笔试题
- python怎么一次输入两个数_python如何一次性输入多个数
- Java进阶--Java垃圾回收机制全面解析
- 拜耳2020年10个新植保制剂商业化,3个生物技术性状项目推进至上市阶段
- Factory IO v2.5.2 Crack by Xacker
- 3D立体显示大屏幕拼接视频墙系统解决方案
- 我去!微信竟然可以查出行轨迹了,预计又一波情侣要分手?
- 前端面试题(不定期更新)
- 一键构建云上高可用蛋白质结构预测平台
- 彻底解决 gcr、quay、DockerHub 镜像下载难题
- IOS按钮排列自动换行
- 抖音短视频流量获取攻略,掌握好这些一定可以出爆款
热门文章
- charCodeAt() 和charAt()
- 更新hbase client api 2.0.1记录
- 基于51单片机超声波测距液位检测-温度检测
- 官网显示可刊,但还没收到录用通知书
- C语言根据域名得到IP地址
- C/C++:变长参数技巧汇总
- PH值检测C语言程序,单片机PH值检测鱼缸自动换水系统程序
- 计算机专业推荐游戏本,十大游戏笔记本电脑排名 热门游戏本推荐
- 微信小程序常见FAQ (17.8.21-17.8.27)
- 正点原子STM32(基于HAL库)4