linux java中使用POI将word转为PDF时无法显示文字

背景:

在windos上本地调试时使用POI将word转为PDF时, PDF无法显示文字的原因以及解决方案:
我的是在linux7.9上,原因是生成world时候汉字正常,转pdf时没有汉字,多次调查后发现没有
宋体:

原因1:字体不存在问题, word中使用的字体在系统(windows或者linux)上一定要已经安装, 否则PDF无法显示文字, 将需要的字体下载下来, 复制到

1)windows的C:\Windows\Fonts文件夹下面, 然后重启机器将新添加的字体加载到内存.

2)linux系统中将字体放到/usr/share/fonts文件夹下面,

fc-list #查看字体列表
mkfontscale #建立字体缓存
mkfontdir
fc-cache -fv #刷新缓存

可以在这个目录下创建一个目录,在目录里放你的字体,记住目录权限是755,字体权限是644,完事刷新一下,不行重启。

cp xx.ttf /usr/share/fonts/myfonts
mkfontscale
mkfontdir
#-f强制扫描,-v过程
fc-cache -fv

原因2: 字体使用问题, 本地windows系统调试时,word转PDF无法显示文字, 因为word中使用的加粗功能, 有时POI将word转为PDF时无法加粗, 导致PDF无法出现文字,

解决办法: 将所有加粗字体去掉, 使用宋体字, 字号可以随便设置大小.
本人是使用宋体11号字,PDF可以出现文字, 加粗不可以.
在这里插入图片描述

————————————————
原文链接:https://blog.youkuaiyun.com/qq_42889751/article/details/120350523

Linux环境下,Java可以借助第三方库来实现Word文档(.doc或.docx)到PDF换。最常用的库是Apache POI(针对Microsoft Office文件,包括Word)和iText或Flying Saucer(用于处理HTML和CSS,适合将基于Web的内容换为PDF)。以下是一个简单的步骤概述: 1. **添加依赖**: - 对于Apache POI,你需要将其添加到你的Maven项目中,通过`<dependency>`标签在pom.xml文件中引入: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>最新版本号</version> </dependency> ``` - iText或Flying Saucer也需要相应版本的依赖。 2. **读取Word文档**: 使用POI的XWPFDocument类打开Word文档,然后获取需要的数据。 3. **处理数据**: 将Word内容解析成HTML格式,这通常涉及到文本提取、样式处理等操作。 4. **生成PDF**: - iText库提供了一个叫做PdfWriter的工具,可以创建新的PDF文档并写入HTML内容。 - Flying Saucer利用Servlet API或JSP直接渲染HTML为PDF。 5. **保存PDF**: 创建完成后的PDF文件,你可以选择存储到本地或网络上。 示例代码(简化版)可能会看起来像这样: ```java import org.apache.poi.xwpf.usermodel.XWPFDocument; import com.itextpdf.text.Document; import com.itextpdf.text.Paragraph; public void convertDocToPdf(String wordFilePath, String pdfFilePath) { // Step 1 & 2: Open and read Word file XWPFDocument document = new XWPFDocument(new FileInputStream(wordFilePath)); // Step 3: Process the content (not shown here) List<String> paragraphs = processWordContent(document); // Step 4: Generate PDF using iText Document pdf = new Document(); try { PdfWriter.getInstance(pdf, new FileOutputStream(pdfFilePath)); pdf.open(); for (String paragraph : paragraphs) { pdf.add(new Paragraph(paragraph)); } pdf.close(); } catch (Exception e) { e.printStackTrace(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值