我遇到了一些渲染PDF文件的遗留Java代码的问题。
我们正在使用Apache FOP:
Implementation-Title: Fop Implementation-Version: 0.20.5 Implementation-Vendor: Apache Software Foundation (http://xml.apache.org/fop/)
将选项设置为:
<configuration>
<fonts>
<font metrics-file="arialuni.xml"
embed-file="ARIALUNI.TTF" kerning="yes">
<font-triplet name="arialuni" style="normal" weight="normal"/>
</font>
</fonts>
</configuration>
.pdf正确呈现,但有一个大问题: 我无法在这样的文件中搜索文本,如果我尝试复制粘贴这个文本 - 我会得到很多符号框。(□)
正如我所理解的那样 - arialuni.ttf(我认为是arial的unicode版本)会引起这种麻烦。有一些已知的解决方案吗?是否可以通过字体配置来解决这个问题?
提前致谢。
PS:我不允许切换到任何其他pdf渲染库,或升级现有的库。
编辑#1
谢谢大家的回答。我们现在可能会拒绝Unicode支持,稍后会升级到1.0版本。
答案 0 :(得分:3)
最好的解决方案是打击你的老板并让他批准一段时间升级到Apache FOP 1.0或更高版本。严重。
唯一的选择是在生成XML字体度量文件时尝试将“-enc ansi”作为“TTFReader”应用程序的参数。这将导致FOP 0.20.5使用WinAnsi编码而不是CID编码。缺点:您将被限制为WinAnsi 8位编码。您没有获得整个Unicode集。
答案 1 :(得分:0)
PS:我不允许切换到任何其他pdf渲染库,或升级现有的库。
如果你不能使用“arial.ttf”,那么你几乎肯定会注定失败。 FOP版本的嵌入方式存在错误......
HEY!您的字体完全不可能嵌入:
来自Apache FOP fonts页面:
<fonts>
<!-- register a particular font -->
<font metrics-url="file:///C:/myfonts/FTL_____.xml" kerning="yes"
embed-url="file:///C:/myfonts/FTL_____.pfb">
<font-triplet name="FrutigerLight" style="normal" weight="normal"/>
</font>
</fonts>