将外部 PDF 插入到 Prawn 生成的文档中
Inserting external PDF into Prawn generated document
如何将现有的 PDF 插入到 Prawn 生成的文档中?我正在为账单生成 pdf(作为视图),该账单可以有很多附件(png、jpg 或 pdf)。我如何 insert/embed/include 我生成的文档中的那些外部 pdf 附件?我已经阅读了手册,查看了源代码,并在网上进行了搜索,但到目前为止都没有成功。
我发现的最接近的提示是使用 ImageMagick 或类似的东西将 pdf 转换为另一种格式,但由于我不需要 resize/manipulate 文档,这似乎很浪费。老办法似乎是通过模板,但我的理解是模板代码不稳定。
有谁知道如何在 Prawn 生成的 PDF 中包含 PDF 页面?如果 Prawn 不会这样做,您知道有任何补充 gem 会这样做吗?如果有人可以向我指出类似 prawn-templates 但更可靠的东西,那就太棒了。
编辑:我正在使用 prawnto 和 prawn 在 Rails 4.2.0 和 Ruby 2.2.0.
中呈现 PDF 视图
我发现但看起来 inapplicable/too 混乱的策略:
在上传时创建 PDF 的 jpg 预览,将其包含在生成的文档中(缺点:没有文本 selection/searching,昂贵)。这是目前我最喜欢的选项,但我不喜欢它。
prawn-templates(缺点:不稳定、未维护的代码库;这是一个业务关键型应用程序)
通过像 'combine-pdf' 这样的 gem 合并 PDF——我不知道如何使用插入在特定位置的外部 PDF 渲染视图(生成的 pdf 是账单的集合,我需要他们遵循他们所附的账单)
关于缺乏现有文档,你是对的 - 我只发现 this issue from 2010 which uses the outdated methods you describe. I also found this SO answer 由于 Prawn 放弃了对模板的支持,它现在不起作用。
不过,好消息是有一种方法可以用 Ruby 做你想做的事!您要做的是 将 PDF 合并 在一起,而不是 "inserting" 将 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"
编辑
回答您的问题:
I'm using Prawn to render a pdf view in Rails, which means that I don't think I get that kind of post-processing
是的!如果您查看 documentation for combine_pdf,您会发现从内存加载是使用 gem 的最快方法 - 文档甚至明确表示 Prawn 可以用作输入。
I'm not just tacking the PDFs to the end: a bill attachment must directly follow the generated page(s) for a bill
combine_pdf
gem 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"
如何将现有的 PDF 插入到 Prawn 生成的文档中?我正在为账单生成 pdf(作为视图),该账单可以有很多附件(png、jpg 或 pdf)。我如何 insert/embed/include 我生成的文档中的那些外部 pdf 附件?我已经阅读了手册,查看了源代码,并在网上进行了搜索,但到目前为止都没有成功。
我发现的最接近的提示是使用 ImageMagick 或类似的东西将 pdf 转换为另一种格式,但由于我不需要 resize/manipulate 文档,这似乎很浪费。老办法似乎是通过模板,但我的理解是模板代码不稳定。
有谁知道如何在 Prawn 生成的 PDF 中包含 PDF 页面?如果 Prawn 不会这样做,您知道有任何补充 gem 会这样做吗?如果有人可以向我指出类似 prawn-templates 但更可靠的东西,那就太棒了。
编辑:我正在使用 prawnto 和 prawn 在 Rails 4.2.0 和 Ruby 2.2.0.
中呈现 PDF 视图我发现但看起来 inapplicable/too 混乱的策略:
在上传时创建 PDF 的 jpg 预览,将其包含在生成的文档中(缺点:没有文本 selection/searching,昂贵)。这是目前我最喜欢的选项,但我不喜欢它。
prawn-templates(缺点:不稳定、未维护的代码库;这是一个业务关键型应用程序)
通过像 'combine-pdf' 这样的 gem 合并 PDF——我不知道如何使用插入在特定位置的外部 PDF 渲染视图(生成的 pdf 是账单的集合,我需要他们遵循他们所附的账单)
关于缺乏现有文档,你是对的 - 我只发现 this issue from 2010 which uses the outdated methods you describe. I also found this SO answer 由于 Prawn 放弃了对模板的支持,它现在不起作用。
不过,好消息是有一种方法可以用 Ruby 做你想做的事!您要做的是 将 PDF 合并 在一起,而不是 "inserting" 将 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"
编辑
回答您的问题:
I'm using Prawn to render a pdf view in Rails, which means that I don't think I get that kind of post-processing
是的!如果您查看 documentation for combine_pdf,您会发现从内存加载是使用 gem 的最快方法 - 文档甚至明确表示 Prawn 可以用作输入。
I'm not just tacking the PDFs to the end: a bill attachment must directly follow the generated page(s) for a bill
combine_pdf
gem 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"