我在视图中有这段代码
prawn_document(:page_size=> "A4", :top_margin => 80, :bottom_margin => 40,
:background => "public/uploads/1.png") do |pdf|
creation_date = Time.now.strftime('%d-%m-%Y')
posts = @posts.each do |post|
pdf.pad(10) do
pdf.text post.title
pdf.text post.text
end
end
pdf.page_count.times do |i|
pdf.go_to_page(i + 1)
pdf.draw_text "Creation Date : " + creation_date, :at => [200, 780]
pdf.draw_text "Page : #{i + 1} / #{pdf.page_count}", :at => [450, -3]
end
end
这给了我以下输出:
和这个
正如您在第一张图片中看到的那样,图像不居中。
在第二张图片上,您可以看到图片不适合整页。
我也尝试将图像添加到每个页面,就像我添加页码一样,但这里的图像与文本重叠。但是在这里我可以按照我想要的方式定位图像,但只是它与文本重叠。
如果我放入标题,我无法定位和调整图像大小。
所以我需要帮助让图像适合页面。图像为700px x 700px。
我也尝试过使用PDFkit,但是无法获得页码,我觉得我几乎都在使用Prawn,但只是这张图片。即使是不同的解决方案也会受到高度赞赏。
答案 0 :(得分:3)
不幸的是,Prawn似乎无法通过选项拉伸背景图像以适合页面。但是,你可以。图像需要适合的页面是静态的,它永远不会改变大小。此外,我们知道确切的尺寸:
p Prawn::Document::PageGeometry::SIZES['A4']
# => [595.28, 841.89]
因此,最佳解决方案是使用您选择的图像编辑器并创建该尺寸的图像。也就是说,创建一个这样大小的画布,并以您想要的方式适合您的原始图像。你可以选择拉伸它,虽然我可能会按比例收缩它以适应宽度并垂直居中。但这取决于你。只需确保创建一个595px x 842px图像,它应该很合适。
答案 1 :(得分:1)
考虑使用Prawn templates。这将为您提供一个选项,可以轻松地设置背景和任何重复的细节(页眉,页脚)(使用任何设计软件,例如Illustrator),然后在您的代码中,您只需将Prwan指向模板文件(templeate.pdf)
prawn_document(:page_size=> "A4",:top_margin => 80,:bottom_margin => 40,:template => 'public/pdf/template.pdf') do |pdf|
# Yout pdf building code here
end
据说,这个解决方案可能不是最好的表现,特别是如果你使用很多PNG(请查看issue)
此解决方案的另一个警告是,Prawn团队决定extract模板的特征是seperate one的主要宝石。如果您使用的是旧版本,则不必担心这种情况,但如果您使用的是最新版本,则可能需要确保此功能得以维护而不是死机。