在所有页面上使用虾的背景图像

时间:2014-02-26 05:06:33

标签: ruby-on-rails ruby pdf prawn

我在视图中有这段代码

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

这给了我以下输出:

enter image description here

和这个

enter image description here

正如您在第一张图片中看到的那样,图像不居中。

在第二张图片上,您可以看到图片不适合整页。

我也尝试将图像添加到每个页面,就像我添加页码一样,但这里的图像与文本重叠。但是在这里我可以按照我想要的方式定位图像,但只是它与文本重叠。

如果我放入标题,我无法定位和调整图像大小。

所以我需要帮助让图像适合页面。图像为700px x 700px。

我也尝试过使用PDFkit,但是无法获得页码,我觉得我几乎都在使用Prawn,但只是这张图片。即使是不同的解决方案也会受到高度赞赏。

2 个答案:

答案 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的主要宝石。如果您使用的是旧版本,则不必担心这种情况,但如果您使用的是最新版本,则可能需要确保此功能得以维护而不是死机。

相关问题