背景

使用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 模板引擎"。

  1. 新建文档template.docx,包含文本{{title}}
  2. 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}}

TextRenderDataString数据模型,继承模板样式的同时,也可以自定义颜色、字体等样式。

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模板定制技术调研相关推荐

  1. powermill程序单html模板,3-PowerMill程序单模板定制.pdf

    PowerMill 程序单的模板定制 PowerMill 提供两种方法输出NC 加工程序单:右键菜单 "PowerMILLUtilities "和 NC 程序"设置清单& ...

  2. powermill程序单html模板,3-PowerMill程序单的模板定制.pdf

    第第 1页页 共 共 6 页页 PowerMill程序单的模板定制程序单的模板定制 PowerMill 提供两种方法输出 NC 加工程序单加工程序单 右键菜单 PowerMILLUtilities 和 ...

  3. 图形化开放式生信分析系统开发 - 7 分析报告的模板定制与自动生成

    前文链接: 图形化开放式生信分析云平台产品开发 - 1 需求分析及技术实现 图形化开放式生信分析云平台产品开发 - 2 样本信息处理 图形化开放式生信分析云平台产品开发 - 3 生信分析流程的进化 图 ...

  4. Java--依照PDF模板进行数据的填充并输出

    Java–依照PDF模板进行数据的填充并输出 今天因为有一个逻辑问题迟迟没有定下来,老板去了学习,所以闲着也是闲着,就抽空学习研究了下用Java输出PDF文件的技术. 引入相应的Jar包 这是导出pd ...

  5. 湖仓一体技术调研(Apache Hudi、Iceberg和Delta lake对比)

    湖仓一体技术调研(Apache Hudi.Iceberg和Delta lake对比) 作者:程哥哥.刘某迎 .杜某安.刘某.施某宇.严某程 1 引 言 ​ 随着当前的大数据技术逐步革新,企业对单一的数 ...

  6. 内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216

    内核领域-功耗机型的续航基线优化问题-技术调研报告_20211216 一. 问题 软硬件环境 设备: Loongson Loongson-LS3A5000-7A1000-1w-V0.1-CRB (Lo ...

  7. 微服务架构技术调研<3>--微服务架构实践

    引言: 由于公司商业上有实打实的需求和场景,倒逼产品开始思考架构升级,以适应这种商业环境的快速变化.架构师在进行技术选型或者架构升级前,需要做大量技术调研.竞品分析,<微服务架构综述>则是 ...

  8. 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告

    目  录 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告 1 1. 预研背景 4 2. 预研目的和意义 4 3. 预研目标 4 4. 预研技术概述 4 5. 预研技术实现 7 5 ...

  9. java pdf 模板多页数据导出

    现在普遍java PDF 导出就是2种形式 1.模板导出 提前在windows下编辑好模板,并且配好表单(因为不是重点这部分自行百度) 2.在java中编写pdf 在使用java代码编写模板和灌数据, ...

最新文章

  1. easyUI droppable组件使用
  2. python3 字符串 hex 相互转换 代替python2 decode(‘hex’)
  3. java 动态增加控件_在ngIf中动态添加组件
  4. jvm十三:类加载器命名空间
  5. Caffe-SSD(single-shot-multibox)在Windows平台下的配置(CPU和GPU)与训练记录
  6. log4j配置文件中使用变量
  7. 七年级计算机教学质量分析,七年级数学期末教学质量分析报告
  8. c#ovalshape_【原创】C# 实现拖拉控件改变位置与大小(SamWang)(附源代码下载)
  9. 【华为云技术分享】【玩转Atlas200DK系列】应用开发之 交叉编译第三方库并在工程中使用(jsoncpp)
  10. unity 入门学习之(二)脚本学习
  11. java公众号图片上传_调用微信公众号接口上传图片素材
  12. 毕业设计之基于Qt数字音频处理软件设计
  13. java 查看内存_java 内存查看工具
  14. 基于android的新闻系统开发,基于Android的新闻推荐系统的设计与实现
  15. 【信息保护论】信息保护与密码学
  16. 黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!
  17. 连续时间傅里叶变换的共轭与共轭对称性(详细推导)
  18. 爬虫实战17:多线程爱丝APP图片爬虫
  19. 014 | JavaWeb物流配货项目源码 | 大学生毕业设计 | 极致技术工厂
  20. 创业公司 Logo 设计指南

热门文章

  1. LAMMPS学习系列(14)
  2. 手机版(兼容android和ios)用户登录界面H5
  3. 米哈游2020春招笔试题总结
  4. redis队列限制流量
  5. 目前中国互联网现状和UI设计行业现状分析!
  6. 物流自动化分拣系统信息体系架构
  7. 计算机数据在经济学的应用论文,数学在经济学中的运用论文
  8. 查看交换机的MAC地址
  9. Js调用C++动态库(v8)
  10. 教育领域-数据可视化平台建设项目