1

我正在使用 pdftk 从 pdf 文件中解析标题,其中包含各种特定于语言的字符。

我需要在其中执行此操作的这个 ruby​​ on rails 应用程序正在使用 ruby​​ 1.8.7 和 rails 2.3.14,因此任何内置于 ruby​​ 1.9 的编码解决方案现在都不是我的选择。

我需要做的例子:

如果标题包含 ü,当我使用 pdftk(命令行或使用 ruby​​ pdf-toolkit gem)阅读 pdf 内容时,“ü”将转换为ü

在我的应用程序中,我真的希望在 ü 中使用它,因为这似乎可以很好地满足我在网页和 XML 文件中的需求。

我可以使用 ruby​​ 显式转换字符

>> string = "ü"
=> "ü"
>> string.gsub("ü","ü")
=> "ü"

但显然我不想一一做这件事。

我尝试过使用 Iconv 来执行此操作,但我觉得我不知道要指定什么才能将其转换为渲染字符。我想也许这只是一个 utf-8 但它似乎并没有转换为渲染字符

>> Iconv.iconv("latin1", "utf-8","ü").join
=> "ü"

我对在这里使用什么格式来获得渲染字符的最终结果有点困惑。

那么如何使用 Iconv 或其他工具对从 pdftk 转换为这个 HTML 代码的所有字符进行这种转换呢?

或者当我首先阅读 pdf 文件时如何告诉 pdftk 这样做!

4

2 回答 2

1

好的 - 我认为这里的问题是 pdftk 返回的代码是 HTML,所以首先取消转义 HTML 是有效的路径

>> Iconv.iconv("utf8", "latin1", CGI.unescapeHTML(string) ).join
=> "ü"

更新:

使用以下

  pdf = PDF::Toolkit.open(file)
  pdf.title = Iconv.iconv("utf8", "latin1", CGI.unescapeHTML(pdf.title)).join

这似乎适用于大多数语言,但是当我将其应用于日语和中文时,它会破坏事物并且不会产生 PDF 中出现的原始内容。

更新:

越来越近 - 如果我只是取消转义它们并且不尝试任何 Iconv 转换,那么 pdftk 放入日文和中文标题的 html 代码似乎已经正确呈现。

CGI.unescapeHTML(pdf.title)

这可以正确渲染。

那么......在我尝试应用其他语言所需的转换之前,如何测试 pdf.title 以提前查看这是中文还是日文(双字节?)?

于 2012-05-17T14:28:33.857 回答
0

也许是这样的:

string.gsub(/&#\d+;/){|x| x[/\d+/].to_i.chr}
于 2012-05-17T13:46:37.867 回答