页面大小为(576 x 576),背景图像的大小为2700 x 2700(300 dpi)(这些尺寸是无法调整的要求).
我的问题是 – 背景图像在页面中不成比例.如何解决这个问题?
这是我的代码:
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,:background => "#{Rails.root.to_s}/public/images/pdf/bg_blank_low.jpg" ) do |pdf| .... .... .... )
是否有任何其他方式可以将300 dpi的图像作为背景图像.
我甚至尝试添加pdf模板作为背景,但仍然没有运气.
任何建议或提示将不胜感激.
谢谢.
解决方法
然而,您可以简单地将图像嵌入页面中,就像您正常的图像一样,然后将文本浮动在其顶部.这是因为当您嵌入图像时,您可以缩放图像.代码可能如下所示:
Prawn::Document.generate("#{Rails.root.to_s}/public/#{filename}.pdf",: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行的方法中,您可以看到设置背景的位置.不幸的是,它使用的是画布,这意味着你的图像必须是正确的大小.这就是为什么背景图像不会自动缩放的原因.
您将需要覆盖此行为.既然这是Ruby,所有你需要做的是重新打开你的项目中的类,然后复制粘贴这个方法(如果你需要更多的信息,如何做到这一点,有很多关于猴子修补Ruby类).现在你将这个方法编辑到你的心中.最简单的方法可能是一起删除画布,然后使用我们上面的图像技巧.所以行最后如:
image(@background,:width => bounds.width) if @background move_up bounds.height
你现在可以回到使用设置背景的标准方式,一切都应该起作用.
事实上,你甚至可以通过改变第280行摆脱这一点:
canvas { image(@background,:width => bounds.width) } if @background
一切都应该正常工作,节省你不得不输入一个额外的线:).使用带有:width选项的图像应该自动缩放图像,而使用:at选项,因为对虾不会缩放图像.
注意:我没有这样做,所以你可能需要工作的扭结.