我在Ruby on Rails项目中因为兼容性问题而使用2.0.0 . 用户上传了他们直接从官方政府网站获得的PDF,因此这是我们必须为其他用户处理的PDF,但是当Prawn尝试将其呈现为字符串时,它已损坏并崩溃 . 您可以在this page的"Certificate of Rent Paid"链接中找到PDF .
我用这个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服务器上运行 . 我找不到任何宝石或任何方式 . 我还能够通过Mac上的谷歌浏览器(v41)中的“保存为PDF”来“修复”PDF(Windows和Ubuntu谷歌Chrome都不起作用) . 我希望能够从我的Rails项目中“修复”PDF . 有什么想法/建议?
[EDIT] 从命令行使用Ghostscript为我工作 . 这一行: gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress crp_14.pdf
,_ "fixed" PDF . 现在查看RGhost gem,看看我是否可以在控制器或模型中做同样的事情 .
1 回答
在Prawn放弃模板支持之后,我编写了一个名为combine_pdf的Ruby原生宝石 .
我无法使用您的文件对其进行测试,但您可以使用gem加载PDF,将其渲染为字符串(或临时文件)并在Prawn中重新加载 .
或者,它可能会帮助您转到Prawn 2.0(您可以使用Prawn创建新的PDF数据并使用combine_pdf将其标记在现有文件上) .
这只是一个想法,如果它不起作用,不要杀了我;-)
祝好运!