poi-tl生成表单并转成pdf(Linux服务器)
表单绘制生成docx
推荐使用poi-tl中文文档地址
代码如下(表格行循环)
public static void main(String[] args) throws IOException {LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();Configure config = Configure.builder().bind("drugs", policy).build();List<Drug> goods = new ArrayList<>();for (int i = 0; i < 5; i++) {Drug good = new Drug();good.setDrugName("药品111111111111111111111111111111111111111111111111111111111111111111111111111111111111"+i);good.setCount(i);good.setRouteName("口服"+i);goods.add(good);}XWPFTemplate template = XWPFTemplate.compile("src/main/resources/template.docx", config).render(new HashMap<String, Object>() {{put("drugs", goods);put("dept", "张三111111111111111111111111111111111111111111111111111111111111111111");put("sex", "男");put("approvalTime3", "2022-10-11 12:00:00");}});template.writeAndClose(new FileOutputStream("output.docx"));}
docx表单转pdf
推荐使用poi
这里主要涉及到依赖问题,我看到很多网上资料还是报错,最后在gitee里面找到一个pom导了进来,解决了这个问题,在这里非常感谢小民哥gitee地址
下面是我的pom依赖,亲测没有问题,可以转成pdf
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version></dependency><!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-full --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-full</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.2</version></dependency><!--docx 转pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.25</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>xdocreport</artifactId><version>2.0.3</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId><version>1.0.6</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document</artifactId><version>2.0.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.core</artifactId><version>1.0.6</version><exclusions><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId></exclusion></exclusions></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.pdf</artifactId><version>1.0.6</version></dependency>
转pdf 代码
public static void main(String[] args) throws IOException {LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();Configure config = Configure.builder().bind("drugs", policy).build();List<Drug> goods = new ArrayList<>();for (int i = 0; i < 5; i++) {Drug good = new Drug();good.setDrugName("药品111111111111111111111111111111111111111111111111111111111111111111111111111111111111"+i);good.setCount(i);good.setRouteName("口服"+i);goods.add(good);}XWPFTemplate template = XWPFTemplate.compile("src/main/resources/template.docx", config).render(new HashMap<String, Object>() {{put("drugs", goods);put("dept", "张三111111111111111111111111111111111111111111111111111111111111111111");put("sex", "男");put("approvalTime3", "2022-10-11 12:00:00");}});PdfOptions options = PdfOptions.create();try (OutputStream outPDF = Files.newOutputStream(Paths.get("output.pdf"))) {PdfConverter.getInstance().convert(template.getXWPFDocument(), outPDF, options);} catch (IOException e) {e.printStackTrace();}}
常见问题
加了这些依赖项目里面还是运行报错
这个应该是你项目里还有easy-excel依赖的问题,所以你应该排除掉easy-excel依赖中的poi依赖
就像这样
<dependency><groupId>含有easyexcel依赖的项目</groupId><artifactId></artifactId><version></version><exclusions><exclusion><artifactId>poi-ooxml-schemas</artifactId><groupId>org.apache.poi</groupId></exclusion></exclusions></dependency>
推荐一个插件maven-helper,安装之后,当你打开pom文件会在下面增加一个小图标,点击dependency analyzer 可以找出你项目里哪些依赖含有easyexcel
linux 上的docker项目遇到pdf中文不显示
这个是因为linux上的docker容器可能没有(docx里面的字体例如宋体或者黑体)
可以进入你的项目容器下检查一下
- docker exec -it 容器id前四位 sh
- fc-list 展示容器有哪些字体
- 将你windows的字体复制到容器中去 可以在/user/share/fonts/ 下面建一个文件夹chines 将你的windows字体拷贝过去
- windows字体在这里 5. 拷贝过去之后再次执行fc-list 应该会出现你拷贝进去的字体,如果出现拷贝进去的字帖,docker 重启你的那个项目,然后就没问题了
docker 镜像需要字体
将字体拷贝至跟dockerfile同一文件目录下,然后再dockerfile中增加两句
COPY sunhei.ttf /usr/share/fonts/chinese/sunhei.ttf
COPY simsun.ttc /usr/share/fonts/chinese/simsun.ttc
以上两个一个是黑体一个是宋体
poi-tl生成表单并转成pdf(Linux服务器)相关推荐
- 多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单
本文完整版:<多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单> Vue 表单设计器 form-generator - 适配 Element Plus UI 框架的表单设计器 f ...
- 没有form的表单验证_PHP动态生成表单,内置17种常用组件并且支持表单验证!
FormBuilder 是一个开源的PHP表单生成器,可以快速生成现代化的form表单.还可以配合开源项目 xaboy/form-create 生成任何 Vue 组件 github | 文档 环境需求 ...
- vue动态生成表单元素基础篇
这里讲解一个vue生成表单的简单实例: (图一) (图二) (图三) 如上图所示: 图一: 空的输入框的情况 图二: 点击 "+" 添加生成表单的情况 图三: 表单中可以输入值,并 ...
- vue动态生成表单元素
前几天接了一个需求,需要动态生成一个表单数据,然后提交,提交完数据后.通过编辑按钮进入时,需要进行数据回填. 一.页面展示: I. 没生成表单前的状态 Vue-UEedit UEedit II. 单机 ...
- javascript --- [FormData的使用] 表单元素转换成表单 对象二进制文件上传
1. FormData的作用 1.1 将Form表单元素,转换成表单对象 在使用Ajax进行表单提交的时候,采用原生的js获取dom,然后添加属性.当表单项很多的时候,代码会很多.不利于后期阅读.维护 ...
- nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单
DbSchema 8 for Mac是mac上一款非常实用的商业数据库ER图绘制软件,可以轻松的对文档进行注释或标注,而且Dbschema集成了SQL和数据工具,能生成直观的图表.PDF文件或HTML ...
- java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签
本文实例讲述了JSP实现用于自动生成表单标签HTML代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkBox,select,radi ...
- 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
本文实例讲述了JSP实现用于自动生成表单标签html代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkbox,select,radi ...
- vue 根据字符串生成表单_vue自定义表单生成器,可根据json参数动态生成表单
介绍 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置17种常用表单组件和自定义组件,再复杂的表单都可 ...
最新文章
- 网站基于vs,复选框,单选款
- 中国最大的python社区-在python数据框中的每一行中查找最大值
- 安卓手机浏览器排行_安卓手机双11性价比排行发布|拯救者手机发透明版|小米发大光圈手机镜头...
- 原生js实现给指定元素的后面追加内容
- 简单讲述一下Intent的传值过程
- 每日算法系列【LeetCode 714】买卖股票的最佳时机含手续费
- MySQL 如何删除有外键约束的表数据
- charles使用合集
- 拓扑排序 java_[Java]聊聊拓扑排序算法
- m3u8格式视屏播放
- 统计不及格人数(PTA-武理-C实验)
- 安卓神器-kiwi browser
- iphone避坑指南
- 【DG】DG环境的日常巡检
- 注册服务号、订阅号流程
- python生成条形码(不限制长度)
- css+html创建一个大风车
- 蓝牙怎么区分单模和双模_蓝牙中的单模、双模是什么,它们有何不同
- 2. Fortran的Hello world-开始Fortran的编程
- 自然场景OCR检测(YOLOv3+CRNN)