pdf模板定制技术调研
背景
使用pdf模板 按需求导出pdf报告
技术调研
常见技术
常见的使用itext pdf和spire.pdf操作编辑pdf,使用pdfbox用来读取pdf
技术问题:
问题1 |
itext |
spire pdf |
|
---|---|---|---|
20220530 | 文本替换 |
文本替换,使用遮罩层功能,但是若替换的问题过长,需要再模板上做留白处理,否则会使文本叠加显示 |
直接支持替换功能,但是仅会显示替换字符占位的坐标位置,超出部分直接不显示 |
表格替换 |
其他技术
1.借助模板技术:使用thymeleaf,freemarker或者word方式创建模板,然后将其生成pdf
2.使用pdfbox读取pdf模板,然后使用itext创建新的pdf文件
最终技术:word模板-word-》pdf
word模板:poi-tl:https://gitee.com/luffyuan/poi-tl
word处理技术:poi
word转pdf:xdocreport:fr.opensagres.poi.xwpf.converter.pdf
poi-tl介绍:
文档:Poi-tl Documentation
poi-tl技术调研对比
方案 | 移植性 | 功能性 | 易用性 |
---|---|---|---|
Poi-tl |
Java跨平台 |
Word模板引擎,基于Apache POI,提供更友好的API |
低代码,准备文档模板和数据即可 |
Apache POI |
Java跨平台 |
Apache项目,封装了常见的文档操作,也可以操作底层XML结构 |
文档不全,这里有一个教程:Apache POI Word快速入门 |
Freemarker |
XML跨平台 |
仅支持文本,很大的局限性 |
不推荐,XML结构的代码几乎无法维护 |
OpenOffice |
部署OpenOffice,移植性较差 |
- |
需要了解OpenOffice的API |
HTML浏览器导出 |
依赖浏览器的实现,移植性较差 |
HTML不能很好的兼容Word的格式,样式糟糕 |
- |
Jacob、winlib |
Windows平台 |
- |
复杂,完全不推荐使用 |
基本语法
所有的语法结构都是以 {{ 开始,以 }} 结束。
从一个超级简单的例子开始:把{{title}}替换成"Poi-tl 模板引擎"。
- 新建文档template.docx,包含文本{{title}}
- TDO模式:Template + data-model = output
//核心API采用了极简设计,只需要一行代码 XWPFTemplate template = XWPFTemplate.compile("~/template.docx").render(new HashMap<String, Object>(){{put("title", "Poi-tl 模板引擎"); }}); FileOutputStream out = new FileOutputStream("out_template.docx"); template.write(out); out.flush(); out.close(); template.close();
文本模板 {{var}}
TextRenderData
或String
数据模型,继承模板样式的同时,也可以自定义颜色、字体等样式。
Map<String, Object> datas = new HashMap<String, Object>(); datas.put("author", new TextRenderData("00FF00", "Sayi卅一")); datas.put("introduce", "http://www.deepoove.com");
图片模板 {{@var}}
//本地图片 put("localPicture", new PictureRenderData(120, 120, "src/test/resources/sayi.png")); //本地图片byte数据 put("localBytePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getLocalByteArray(new File("src/test/resources/logo.png"))));
表格模板 {{#var}}
RowRenderData header = RowRenderData.build(new TextRenderData("FFFFFF", "姓名"), new TextRenderData("FFFFFF", "学历")); RowRenderData row = RowRenderData.build(new TextRenderData("张三"), new TextRenderData("1E915D", "研究生")); put("table", new MiniTableRenderData(header, Arrays.asList(row)));
列表模板 {{*var}}
put("feature", new NumbericRenderData(new ArrayList<TextRenderData>() {{add(new TextRenderData("Plug-in grammar, add new grammar by yourself"));add(new TextRenderData("Supports word text, header, footer..."));add(new TextRenderData("Templates, not just templates, but also style templates"));} }));
xdocreport介绍
fr.opensagres.poi.xwpf.converter.pdf
xdocreport是一个java api,它能够根据ms office(docx或者ppt)以及open office的odt创建的xml文档模板,与java模型一起配合生成你想要的docx或者odt文档报告。
2.同时你可以把生成的docx或者odt文档转换你想要的其它格式,例如pdf,xhtml等。
xdocreport根据模板生成合同(docx/pdf)神器:(一)介绍_热水钟的博客-CSDN博客_xdocreport
对比:word转pdf技术有 org.jodconverter和jacob ,这两个技术对一般在window平台上可用,对linux的支持一般,并且要求在os上安装对应插件(office插件)辅助完成
实际代码
maven引用
<!--poi word模板生成--> <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.8.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version> </dependency> <!--word 转pdf--> <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.pdf</artifactId><version>2.0.2</version><exclusions><exclusion><artifactId>poi-ooxml</artifactId><groupId>org.apache.poi</groupId></exclusion></exclusions> </dependency>
代码:
poi-tl/PaymentExample.java at dev-1.8.0 · Sayi/poi-tl · GitHub
我用的poi-tl是低版本的,若是感兴趣可以用官网最新版本1.10
pdf模板定制技术调研相关推荐
- powermill程序单html模板,3-PowerMill程序单模板定制.pdf
PowerMill 程序单的模板定制 PowerMill 提供两种方法输出NC 加工程序单:右键菜单 "PowerMILLUtilities "和 NC 程序"设置清单& ...
- powermill程序单html模板,3-PowerMill程序单的模板定制.pdf
第第 1页页 共 共 6 页页 PowerMill程序单的模板定制程序单的模板定制 PowerMill 提供两种方法输出 NC 加工程序单加工程序单 右键菜单 PowerMILLUtilities 和 ...
- 图形化开放式生信分析系统开发 - 7 分析报告的模板定制与自动生成
前文链接: 图形化开放式生信分析云平台产品开发 - 1 需求分析及技术实现 图形化开放式生信分析云平台产品开发 - 2 样本信息处理 图形化开放式生信分析云平台产品开发 - 3 生信分析流程的进化 图 ...
- Java--依照PDF模板进行数据的填充并输出
Java–依照PDF模板进行数据的填充并输出 今天因为有一个逻辑问题迟迟没有定下来,老板去了学习,所以闲着也是闲着,就抽空学习研究了下用Java输出PDF文件的技术. 引入相应的Jar包 这是导出pd ...
- 湖仓一体技术调研(Apache Hudi、Iceberg和Delta lake对比)
湖仓一体技术调研(Apache Hudi.Iceberg和Delta lake对比) 作者:程哥哥.刘某迎 .杜某安.刘某.施某宇.严某程 1 引 言 随着当前的大数据技术逐步革新,企业对单一的数 ...
- 内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216
内核领域-功耗机型的续航基线优化问题-技术调研报告_20211216 一. 问题 软硬件环境 设备: Loongson Loongson-LS3A5000-7A1000-1w-V0.1-CRB (Lo ...
- 微服务架构技术调研<3>--微服务架构实践
引言: 由于公司商业上有实打实的需求和场景,倒逼产品开始思考架构升级,以适应这种商业环境的快速变化.架构师在进行技术选型或者架构升级前,需要做大量技术调研.竞品分析,<微服务架构综述>则是 ...
- 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告
目 录 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告 1 1. 预研背景 4 2. 预研目的和意义 4 3. 预研目标 4 4. 预研技术概述 4 5. 预研技术实现 7 5 ...
- java pdf 模板多页数据导出
现在普遍java PDF 导出就是2种形式 1.模板导出 提前在windows下编辑好模板,并且配好表单(因为不是重点这部分自行百度) 2.在java中编写pdf 在使用java代码编写模板和灌数据, ...
最新文章
- easyUI droppable组件使用
- python3 字符串 hex 相互转换 代替python2 decode(‘hex’)
- java 动态增加控件_在ngIf中动态添加组件
- jvm十三:类加载器命名空间
- Caffe-SSD(single-shot-multibox)在Windows平台下的配置(CPU和GPU)与训练记录
- log4j配置文件中使用变量
- 七年级计算机教学质量分析,七年级数学期末教学质量分析报告
- c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载)
- 【华为云技术分享】【玩转Atlas200DK系列】应用开发之 交叉编译第三方库并在工程中使用(jsoncpp)
- unity 入门学习之(二)脚本学习
- java公众号图片上传_调用微信公众号接口上传图片素材
- 毕业设计之基于Qt数字音频处理软件设计
- java 查看内存_java 内存查看工具
- 基于android的新闻系统开发,基于Android的新闻推荐系统的设计与实现
- 【信息保护论】信息保护与密码学
- 黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!
- 连续时间傅里叶变换的共轭与共轭对称性(详细推导)
- 爬虫实战17:多线程爱丝APP图片爬虫
- 014 | JavaWeb物流配货项目源码 | 大学生毕业设计 | 极致技术工厂
- 创业公司 Logo 设计指南