Apache FOP,Unicode。文字无法搜索

时间:2011-04-04 16:10:40

标签: apache pdf unicode apache-fop

我遇到了一些渲染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版本。

2 个答案:

答案 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>
  1. 可悲的是,我没有看到在这些文档中任何地方指定特定编码的提及。
  2. 您使用的是“嵌入文件”而不是“embed-url =”file:///“。我怀疑这是您的问题。