您尝试执行的操作无法使用:background
选项完成,Prawn::Document.generate
因为该:background
选项无法缩放图像。如果您想使用该:background
选项,您需要确保您的图像与 PDF 的 dpi 相同(通常为 72dpi)。
但是,您可以像普通图像一样简单地将图像嵌入页面中,然后将文本浮动在其顶部。这很有效,因为当您嵌入图像时,您可以对其进行缩放。代码可能如下所示:
Prawn::Document.generate("#{Rails.root.to_s}/public/#{filename}.pdf", :page_size => [576,576], :left_margin => 50, :right_margin => 50, :page_layout => :portrait, :skip_page_creation => true, :skip_encoding => true) do |pdf|
bg_image = "#{Rails.root.to_s}/public/images/pdf/bg_blank_low.jpg"
pdf.image bg_image, :scale => 0.2311
pdf.move_up 576
end
这将使您的“背景”完全覆盖页面(因为我们手动计算了比例 2700/576),如果您想尊重您的边距(通常这可能是更好的方法),您可能会更改为:
pdf.image bg_image, :width => pdf.bounds.width
这应该会根据页面边界框的宽度自动缩放图像。当然你也需要改变你move_up
的,比如:
pdf.move_up pdf.bounds.height
完成此操作后,您可以开始输入文本,它应该出现在图像的顶部,因此我们得到了模拟的缩放背景。
更新
这是关于评论的更新。如果您有自动创建的页面并且您希望它们具有相同的背景,那么如果您正在使用当前的虾发布方式,那么您就不走运了。如果你真的需要这个功能,那你就得给大虾打补丁了。
获取虾源(来自https://github.com/sandal/prawn)并查看它。你所追求的是lib/document.rb
,在第 244 行有一种方法start_new_page
,这就是你所追求的。在第 280 行的这个方法中,您可以看到设置背景的位置。不幸的是,它正在使用canvas
这意味着,您的图像必须具有正确的尺寸。这就是背景图像不会自动缩放的原因。
您将需要覆盖此行为。由于这是 Ruby,您所要做的就是重新打开项目中的类,然后复制粘贴此方法(如果您需要有关如何执行此操作的更多信息,有很多关于猴子修补 Ruby 类的信息)。现在,您可以根据自己的喜好编辑此方法。最简单的方法可能是一起移除画布,然后使用我们上面的图像技巧。所以该行最终为:
image(@background, :width => bounds.width) if @background
move_up bounds.height
您现在可以返回使用设置背景的标准方式,一切都应该正常工作。
事实上,您甚至可以将第 280 行更改为:
canvas { image(@background, :width => bounds.width) } if @background
一切都应该正常工作,省去你输入额外的一行:)。使用带有:width
选项的图像应该会自动缩放图像,而使用:at
prawn 的选项不会缩放图像。
注意:我实际上并没有这样做,所以你可能需要解决这些问题。