如何将现有PDF插入到Prawn生成的文档中?我正在为账单生成pdf(作为视图),并且该账单可以有许多附件(png,jpg或pdf)。如何在生成的文档中插入/嵌入/包含这些外部pdf附件?我已经阅读了手册,查看了源代码,并在线搜索,但到目前为止还没有运气。
我发现最接近的提示是使用ImageMagick或类似的东西将pdf转换为另一种格式,但由于我不需要调整/操作文档,这似乎很浪费。旧方法似乎是通过模板,但我的理解是模板的代码是不稳定的。
有谁知道如何在Prawn生成的PDF中包含PDF页面?如果Prawn不会这样做,你知道会有什么补充宝石吗?如果有人能指出我喜欢虾模板但更可靠的东西,那就太棒了。
编辑:我正在使用prawnto和prawn在Rails 4.2.0中使用Ruby 2.2.0渲染PDF视图。
我发现的但似乎不适用/过于混乱的策略:
在上传时创建PDF的jpg预览,包括生成的文档中的内容(缺点:没有文字选择/搜索,价格昂贵)。这是目前我最喜欢的选择,但我不喜欢它。
prawn-templates(缺点:不稳定,未维护的代码库;这是一个关键业务应用程序)
通过类似'combine-pdf'的宝石合并PDF - 我无法弄清楚如何使这个工作用于在特定位置插入外部PDF来渲染视图(生成的pdf是一组账单,我需要他们遵循他们所附的法案)
答案 0 :(得分:12)
您对此缺乏现有文档是正确的 - 我发现只有this issue from 2010使用您描述的过时方法。我还发现this SO answer现在不起作用,因为Prawn放弃了对模板的支持。
然而,好消息是有一种方法可以用Ruby做你想做的事!您将要做的是将PDF合并到一起,而不是"插入" PDF格式为原始PDF。
我建议使用此库combine_pdf来执行此操作。文档很好,所以做你想做的事情就像这样简单:
my_prawn_pdf = CombinePDF.new
my_prawn_pdf << CombinePDF.new("my_bill_pdf.pdf")
my_prawn_pdf << CombinePDF.new("attachment.pdf")
my_prawn_pdf.save "combined.pdf"
回答你的问题:
你做到了!如果你看一下documentation for combine_pdf,你会发现从内存加载是使用gem的最快方法 - 文档甚至明确地说Prawn可以用作输入。我使用Prawn在Rails中渲染pdf视图,这意味着我不认为我会进行那种后期处理
我不只是将PDF格式化到最后:账单附件必须直接跟随生成的账单进行账单
combine_pdf
宝石isn't just for adding pages on the end。如文档所示,您可以根据需要循环浏览PDF添加页面,例如:
my_pdf # previously defined
new_pdf = CombinePDF.new
my_pdf.pages.each.do |page|
i += 1
new_pdf << my_pdf if i == bill_number # or however you want to handle this logic
end
new_pdf.save "new_pdf.pdf"