使用doc4j创建的java Pdf无法正确呈现区域设置文本
我正在使用docx4j创建pdf文件,使用docx格式,区域设置语言正确呈现,但使用pdf替换为区域设置字符串
在我看到的文件中
当使用docx4j创建PDF时,它只能使用可用的字体。 这些字体来自两个来源:
->;那些安装在计算机上的
->;文件中嵌入的那些
请注意,Word以静默方式执行字体替换。在Word中打开现有文档并选择特定字体的文本时,如果未安装在计算机上或未嵌入文档中,屏幕上显示的实际字体将不会是功能区中报告的字体。要查看Word 2007是否正在替换字体,请进入Word选项>;高级>;显示文档内容并按“字体替换”按钮
Word的字体替换信息对docx4j不可用。作为一名开发人员,您可以选择3个选项:
->;确保字体已安装或嵌入
->;告诉docx4j改用哪种字体,或
->;允许docx4j回退到默认字体
要在文档中嵌入字体,请在安装了字体的计算机上用Word打开它(选中 没有替换),然后转到Word选项>;保存>;在文件中嵌入字体
但这似乎不起作用
下面是我的代码:
Mapper fontMapper = new IdentityPlusMapper();
PhysicalFont font = PhysicalFonts.getPhysicalFonts().get(
"Comic Sans MS");
fontMapper.getFontMappings().put("Algerian", font);
template.setFontMapper(fontMapper);
PdfSettings pdfSettings = new PdfSettings();
org.docx4j.convert.out.pdf.PdfConversion conversion = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(
template);
OutputStream out = new FileOutputStream(f1);
conversion.output(out, pdfSettings);
在上面的代码中,字体是Algerain
任何帮助都将不胜感激
# 1 楼答案
嵌入式字体可以手动提取和使用,如下所示:
# 2 楼答案
发布这个答案是因为我看到UTF编码多次提出这个问题,希望这篇文章能有所帮助。 这段代码解决了上述问题
如果是样品。docx是我们的输入docx文件,包含任何国际语言,如中文等。它将被转换为具有相同文件名和相同路径的pdf
这是因为
Runtime.getRuntime().exec("doc2pdf " + f);
这段代码在java程序中运行终端命令doc2pdf,并将unbuntu作为操作系统,在此之前,我们需要从终端安装sudo apt-get install unoconv
这是为了让doc2pdf命令工作