我是靠谱客的博主 欣喜舞蹈,最近开发中收集的这篇文章主要介绍pdf模板定制技术调研最终技术:word模板-word-》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 模板引擎"。

  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模板定制技术调研最终技术:word模板-word-》pdf实际代码的全部内容,希望文章能够帮你解决pdf模板定制技术调研最终技术:word模板-word-》pdf实际代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部