rubft 1.8.7中的字符转换来自pdftk unicode转换结果

时间:2012-05-17 13:30:31

标签: ruby-on-rails ruby unicode iconv pdftk

我正在使用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这样做!

2 个答案:

答案 0 :(得分: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中。

更新:

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

CGI.unescapeHTML(pdf.title)

这正确呈现。

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

答案 1 :(得分:0)

可能是这样的:

string.gsub(/&#\d+;/){|x| x[/\d+/].to_i.chr}