我在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,看看我是否可以在控制器或模型中做同样的事情。
答案 0 :(得分:0)
在Prawn放弃模板支持后,我编写了一个名为combine_pdf的Ruby原生宝石。
我无法使用您的文件对其进行测试,但您可以使用gem加载PDF,将其渲染为字符串(或临时文件)并在Prawn中重新加载。
或者,也许它可以帮助您转到Prawn 2.0(您可以使用Prawn创建新的PDF数据并将其标记在combine_pdf的现有文件上。
这只是一个想法,如果它不起作用,不要杀了我; - )
祝你好运!