java根据模板生成PDF

 

 

首先你的制作一个pdf模板:

1.先用word做出模板界面

画单元格的时候需要考虑值的长度,像这里的状态可能会很长

 

 

2.文件另存为pdf格式文件

 使用福昕PDF 打开,添加文本,以及需要添加值的地方,设置文本域,这个就是属性值

 

 

 

保存以后会生成PDF封面,需要去掉。

在线分封PDF

https://smallpdf.com/cn/result#r=1d5e4fbd858366eb5e4abe33a71ba648&t=split

 

代码

 @GetMapping("/downOrderDashboard/{orderNo}")@ApiAuthoritypublic ResponseEntity<byte[]> downOrderDashboard(@PathVariable String orderNo,HttpServletResponse response,HttpServletRequest request) throws Exception {ByteArrayOutputStream byteArrayOutputStream = serialNumberService.downOrderDashboard(orderNo, request);HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.setContentDispositionFormData("attachment", java.net.URLEncoder.encode("orderDB.pdf", "UTF-8"));httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));byte[] bytes = byteArrayOutputStream.toByteArray();return new ResponseEntity<byte[]>(bytes, httpHeaders,HttpStatus.CREATED);/*response.setContentType("application/pdf");response.setContentLength(byteArrayOutputStream.size());ServletOutputStream out = response.getOutputStream();byteArrayOutputStream.writeTo(out);out.flush();*/}
public ByteArrayOutputStream downOrderDashboard(String orderNo, HttpServletRequest request) {log.info("orderNo=" + orderNo);ByteArrayOutputStream outputstream = null;OrderDBDTO orderDashBoard = getOrderDashBoard(orderNo);log.info("orderDashBoard" + orderDashBoard.toString());try {//InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("classpath:pdf/orderDB.pdf");
ClassPathResource classPathResource = new ClassPathResource("pdf/orderDB.pdf");InputStream inputStream =classPathResource.getInputStream();//File file = ResourceUtils.getFile("classpath:pdf/orderDB.pdf");//String currentPath = request.getServletContext().getRealPath("\\");//String TemplatePDF = currentPath + "resources\\"+ "pdf\\" + "orderDB.pdf";log.info("inputStream"+inputStream);PdfReader reader = new PdfReader(inputStream);//new PdfReader(file.getAbsolutePath());outputstream = new ByteArrayOutputStream(4096);PdfStamper stamp = new PdfStamper(reader, outputstream);PdfContentByte under = stamp.getUnderContent(1); /*使用中文字体*/BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// Font FontChinese = new Font(bf, 10, Font.NORMAL);AcroFields form = stamp.getAcroFields();form.addSubstitutionFont(bf);  //简宋体form.setField("productionOrderNo", orderDashBoard.getProductionOrderNo());OrderStatusType[] values = OrderStatusType.values();for (OrderStatusType value : values) {if(orderDashBoard.getStatus().equals(value.getResourceKey())){form.setField("state",value.getResourceKey() );}}form.setField("batchNo", orderDashBoard.getBatchNo());form.setField("lineName", orderDashBoard.getLineName());form.setField("productionDate", orderDashBoard.getProductionDate().format(DateTimeFormatter.ISO_LOCAL_DATE));form.setField("expiryDate", orderDashBoard.getExpiryDate().format(DateTimeFormatter.ISO_LOCAL_DATE));List<OrderSn> orderSnList = orderDashBoard.getOrderSnList();for (int i = 0; i < orderSnList.size(); i++) {form.setField("aggregationLevel"+(i+1), orderSnList.get(i).getAggreLevelName());form.setField("productCount"+(i+1), orderSnList.get(i).getProductCount()+"");form.setField("breakCount"+(i+1), orderSnList.get(i).getBreakCount()+"");form.setField("sampleCount"+(i+1), orderSnList.get(i).getSampleCount()+"");}stamp.setFormFlattening(true);stamp.close();reader.close();} catch (DocumentException e1) {log.info(e1.getMessage());e1.printStackTrace();} catch (IOException e2) {log.info(e2.getMessage());e2.printStackTrace();}return outputstream;}

 

转载于:https://www.cnblogs.com/lyon91/p/11184961.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)

SearchDialog仿bilibili搜索框效果(只需要三句话即可实现)先看预览图(转换后有一点点失真):前言1,支持搜索历史(已经做了数据库存储了)2,基本与bilibili的搜索效果差不多了3,需要修改更多内容可以下载library自己修改4,本人非大牛,有不妥之处请Issues指出,谢谢5,参考了该po的文…

元璟资本陈洪亮解析人货场融合 消费者变成“合作者”

一年一度的云栖大会是新科技大放异彩的舞台&#xff0c;而创业者们同样聚集于此&#xff0c;探讨前沿的商业模式。 在今日举行的“云栖大会 - 阿里云创新中心年度盛典”上&#xff0c;元璟资本合伙人陈洪亮发表演讲&#xff0c;他从新消费和新零售的诸多创新现象出发&#xff0…

2019.8.13 sdfzoier

lxy: lixf acwing上的118,126 zhangtingyu zhaosirui wujialin 转载于:https://www.cnblogs.com/caterpillor/p/11186047.html

系统需求分析文档需要考虑的问题

最近作了几次需求分析,有了一些经验,特共享出来.欢迎指正.我认为在系统需求分析中,有三个问题需要注意,即系统涵盖范围用户对上线时间的要求系统上线对目前系统整体的影响系统覆盖的范围很多用户都想的是,这次一定要把所有遇到的问题解决完. 也就说,客户潜在的心理是对系统较高…

前端之CSS

什么是CSS&#xff1f; 在标签上设置标签的style属性。 编写CSS的方法 一、直接在标签中写style属性。 二、在head标签中写style标签&#xff0c;这里就需要选择器选择所需的标签 1、id选择器&#xff0c;以#开头&#xff0c;例子如下&#xff1a; <!DOCTYPE html> <h…

android 局域网邻居,局域网内无邻居 它们去哪儿了?

最近不知道是炎炎夏日的原因&#xff0c;还是部分地区雨水过多的问题&#xff0c;造成了好多小伙伴反应说&#xff0c;无法在网络中看到同在一个局域网中的其他电脑、服务器或打印机。这个问题说大不大&#xff0c;说小不小&#xff0c;但很难用几句话把问题解决&#xff0c;所…

svg 线条动画浅尝

看了别人网站的svg动画觉得非常舒服,自己尝试实现一下效果如下: 实现需要明白2个关于svg的css属性 1. stroke-dasharray stroke-dasharray: <percentage> | <length> | inherit数与数之间用逗号或者空白隔开&#xff0c;指定短划线和缺口的长度。如stroke-dasharr…

《子弹笔记术》[日]杉野干人(作者)epub+mobi+azw3格式下载

下载地址&#xff1a;点我下载后手机可浏览内容简介在工作中&#xff0c;越是复杂的项目&#xff0c;需要记录的事情越多&#xff0c;花费的时间自然也越多。如果使用传统笔记方法&#xff0c;规划将变成苦差事。子弹笔记术的核心是快速收集和处理信息&#xff0c;它可以帮助你…

html广告条效果,css3炫酷网站banner广告动画特效

这是一款可以用来遮罩网站banner或广告的动画特效插件。该特效使用的是 CSS3 animations。注意不是所有的浏览器都支持 CSS3 animations。如果你对 CSS3 animations还不了解&#xff0c;建议你先阅读W3C CSS Animations。HTMLhtml结构如下&#xff1a;Lost at sea?Relax - wev…

蓝桥杯——快速排序(2018JavaB组第5题9分)

快速排序&#xff08;18JavaB5,9’&#xff09; 以下代码可以从数组a[]中找出第k小的元素。 它使用了类似快速排序中的分治算法&#xff0c;期望时间复杂度是O(N)的。 请仔细阅读分析源码&#xff0c;填写划线部分缺失的内容。 import java.util.Random; public class Main{pub…

关于蝴蝶背景

Runner 2006-07-04 这些链接都比较久远了&#xff0c;现在大概都失效了。好像有不少人都是这两只可爱的蝴蝶带来的&#xff0c;看来这两只蝴蝶真是我的福星啊。这里再把Flash背景的用法贴出来吧.如果直接点击链接无法显示页面&#xff0c;可以把链接地址复制到浏览器的地址栏里…

Echarts多任务可视化之再优化

1.上次进程可视化由svg实现&#xff0c;本次改用echarts框架实现。Js文件&#xff1a;loadxmldoc.js&#xff08;用于加载xml文档&#xff09;echarts.js&#xff08;用来实现有向图绘制&#xff09;2.思路&#xff1a;Echarts是定义数据对象数组data和连接对象数组links&#…

利用XML实现通用WEB报表打印 卢彦

利用XML实现通用WEB报表打印(1) 卢彦 摘要开发B/S结构的应用程序最头疼的问题可能就是报表打印了&#xff0c;由于只能采用浏览器来作为用户界面进行交互&#xff0c;所以不能精确控制客户端的打印机。而很多B/S结构的应用程序常常需要完成非常复杂的报表打印任务。而靠IE自带的…

cascade rcnn论文总结

1.bouding box regression总结&#xff1a; rcnn使用l2-loss 首先明确l2-loss的计算规则&#xff1a; L∗(f∗(P)−G∗)2&#xff0c;∗代表x,y,w,h 整个loss : LLxLyLwLh 也就是说&#xff0c;按照l2-loss的公式分别计算x,y,w,h的loss&#xff0c;然后把4个loss相加就得到总的…

母版页可以动态切换吗?

通过设置“MasterPageFile”属性可以做到&#xff0c;然而这个属性只能在“Page_PreInit”事件之中或之前设置。在Page_PreInit事件或之前&#xff0c;当前页面包含的对象还没有被生成&#xff0c;不能访问&#xff0c;所以&#xff0c;如果想根据当前页面上某个控件的值动态切…

iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇

在c盘创建一个iview-router的项目、然后使用默认的配置跳过添加vue-router的插件编译我们的文件。编译好之后&#xff0c;我们启动App默认的页面就打开了。默认两个路由一个是about界面一个是home我们使用编辑器打开代码&#xff0c;用我们的iview的menu组件替换掉这两个路由在…

计算机专业单元测试卷答案,银保监会考试题库:计算机类模拟试题练习(六)答案...

2020银保监会招聘考试即将开始。根据往年经验&#xff0c;银保监会招聘考试科目包括行测、申论和专业科目共三科&#xff0c;专业科目是考试提分的关键&#xff0c;那么如何才能提升专业科目的做题速度并快速提分呢&#xff1f;别担心&#xff0c;中公金融人小编根据历年的考试…

Ubuntu安装Nginx

在Ubuntu下安装Nginx有以下方法&#xff0c;但是如果想要安装最新版本的就必须下载源码包编译安装。 一、基于APT源安装 sudo apt-get install nginx 安装好的文件位置&#xff1a; /usr/sbin/nginx&#xff1a;主程序 /etc/nginx&#xff1a;存放配置文件 /usr/share/nginx&am…

HTML标题h,HTML H标题标签

可以将HTML标题或HTML h标签定义为要在网页上显示的标题或副标题。当你将文本放在标题标签……… h1>内时, 它在浏览器中以粗体显示, 并且文本的大小取决于标题的数量。从到标签定义了六个不同的HTML标题, 从最高级别h1(主标题)到最低级别h6(最重要的标题)。h1是最大的标题标…

Android 多线程之几个基本问题

Android中的进程和线程 Android中的一个应用程序一般就对应着一个进程&#xff0c;多进程的情况可以参考Android 多进程通信之几个基本问题 Android中更常见的是多线程的情况&#xff0c;一个应用程序中一般都有包括UI线程等多个线程。Android中规定网络访问必须在子线程中进行…