Ruby on Rails,Prawn - 在Rails中修复损坏的PDF

时间:2015-03-16 13:37:13

标签: ruby-on-rails pdf prawn

我在Ruby on Rails项目中使用Prawn gem(v 0.12.0,因为兼容性问题我们不能使用2.0.0)。用户上传了他们直接从官方政府网站获得的PDF,因此这是我们必须为其他用户处理的PDF,但是当Prawn尝试将其呈现为字符串时,它已损坏并崩溃。您可以在"出租证明"中找到PDF。 this page上的链接。

我对此PDF的错误:

NoMethodError - undefined method 'size' for nil:NilClass:

它来自我们的Prawn gem中的这种方法:

def finalize
  if dictionary.data[:Contents].is_a?(Array)
    dictionary.data[:Contents].each do |stream|
      stream.compress_stream if document.compression_enabled?
      stream.data[:Length] = stream.stream.size    # THIS LINE!!!
    end
  else
    content.compress_stream if document.compression_enabled?
    content.data[:Length] = content.stream.size    # IT DOESN'T GET TO THIS
  end
end

我被困住了。我通过搜索找到的唯一工具可以找到"修复" PDF是Adobe Acrobat和PDFtk。 PDFtk可以在服务器中使用,但它仅适用于Windows,而我们的服务器在Linux服务器上运行。我无法找到任何宝石或任何方式。我也能够修复" PDF格式"另存为PDF"来自Mac上的谷歌浏览器(v41)(Windows和Ubuntu谷歌浏览器均无效)。我希望能够修复"虽然我的Rails项目中的PDF。有什么想法/建议吗?

[编辑] 从命令行使用Ghostscript为我工作。这一行:gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress crp_14.pdf,"已修复" PDF。现在查看RGhost gem,看看我是否可以在控制器或模型中做同样的事情。

1 个答案:

答案 0 :(得分:0)

在Prawn放弃模板支持后,我编写了一个名为combine_pdf的Ruby原生宝石。

我无法使用您的文件对其进行测试,但您可以使用gem加载PDF,将其渲染为字符串(或临时文件)并在Prawn中重新加载。

或者,也许它可以帮助您转到Prawn 2.0(您可以使用Prawn创建新的PDF数据并将其标记在combine_pdf的现有文件上。

这只是一个想法,如果它不起作用,不要杀了我; - )

祝你好运!