万有斥力 发表于 2023-12-24 05:01:46

PDF操作

一、概述

生成PDF文档通常涉及使用模板引擎、PDF库以及数据填充。常见以下几种方法:
iText:
iText是一个强大的PDF库,支持创建和操作PDF文档。
使用场景: 您可以使用iText来直接构建PDF文档,也可以将其与模板引擎结合使用,通过数据填充来生成PDF。

Apache PDFBox:
PDFBox是Apache软件基金会的一个项目,提供创建和处理PDF文档的功能。
使用场景: PDFBox可用于构建PDF文档,您可以将其用于模板生成PDF。

Apache FOP (Formatting Objects Processor):
FOP是Apache XML Graphics项目的一部分,用于将XML文档转换为PDF、PS、PNG等格式。
使用场景: FOP通常与XSL-FO(可扩展样式语言 - 格式化对象)一起使用,通过XSL-FO模板生成PDF。

Thymeleaf:
Thymeleaf是一个用于Web和独立环境的现代服务器端Java模板引擎。
使用场景: Thymeleaf可以用于生成HTML模板,然后通过转换库(如Flying Saucer)将HTML转换为PDF。

Freemarker和Velocity:
Freemarker和Velocity是两个常见的模板引擎,可以用于生成文本模板。
使用场景: 您可以使用这些引擎生成包含占位符的文本模板,然后使用PDF库将其转换为PDF。
 
JasperReports:
简介: JasperReports是一个用于生成报表的开源报表引擎。
使用场景: JasperReports支持定义报表模板,将数据与模板结合生成PDF报表。
 
Flying Saucer(XHTMLRenderer):
Flying Saucer是一个基于Java的渲染引擎,可将XHTML和CSS转换为PDF。
使用场景: 您可以使用Flying Saucer来渲染HTML模板,并将其转换为PDF。


二、使用

 1、word 转 PDF ,使用aspose工具包

jar包:
https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttps://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose.slides</artifactId>
    <version>15.9.0</version>
   
</dependency>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>8.5.2</version>
   
</dependency>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>18.6</version>
   
</dependency>

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>View Codelinux服务器中文乱码解决,导出的PDF乱码如图:
https://img2023.cnblogs.com/blog/1356376/202311/1356376-20231117160514386-489883030.png
解决方案
方案1: 环境解决:亲测可行,记得安装后重启项目
安装字库,将win的c:\windows\fonts下的全部文件拷贝到生产服务器字体安装目录下。
#查看linux目前的所有字体
fc-list
#查看Linux目前的所有中文字体
fc-list :lang=zh
#拷贝到linux下的字体目录
mkdir /usr/share/fonts/win
#更新系统中字体缓存
cd /usr/share/fonts
sudo fc-cache -fv
执行命令让字体生效
source /etc/profile

方案2: 代码解决(推荐)
a.将window中字体放到linux的/usr/shared/fonts/chinese目录
b.在aspose代码中添加:
//linux环境需要配置中文字体:
OsInfo osInfo = SystemUtil.getOsInfo();
if(osInfo.isLinux()){
    FontSettings.getDefaultInstance().setFontsFolder("/usr/share/fonts", true);
}

//新建一个空白pdf文档,byteArrayInputStream为word的输入流
com.aspose.words.Document pdf = new com.aspose.words.Document(byteArrayInputStream);
pdf.save(os, SaveFormat.PDF);
os.flush(); 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: PDF操作