首页 文章

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

提问于
浏览
1

我在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 回答

  • 0

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

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

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

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

    祝好运!

相关问题