gpt4 book ai didi

ruby-on-rails - Prawn : adding background image of larger resolution

转载 作者:行者123 更新时间:2023-12-03 22:30:42 25 4
gpt4 key购买 nike

我正在创建一本 pdf 书,我需要为每个页面放置一个背景图像。

页面大小为 (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 模板作为背景,但仍然没有运气。

任何建议或提示将不胜感激。

谢谢。

最佳答案

使用 :background 无法完成您尝试做的事情Prawn::Document.generate 的选项自 :background选项无法缩放图像。如果您想使用 :background选项,您需要确保您的图像与 PDF 的 dpi 相同(通常为 72dpi)。

然而,您可以简单地将图像嵌入页面中,就像嵌入普通图像一样,然后将文本 float 在其顶部。这是有效的,因为当您嵌入图像时,您可以对其进行缩放。代码可能如下所示:

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

完成此操作后,您可以开始放入文本,它应该出现在图像的顶部,这样我们就得到了模拟的缩放背景。

更新

这是关于评论的更新。如果您有自动创建的页面,并且您希望它们具有相同的背景,那么如果您按原样使用当前的 prawn 版本,那么您就不走运了。如果你真的需要这个功能,那么你必须给 Prawn 打补丁。

获取 Prawn 源(来自 https://github.com/sandal/prawn )并查看它。您所追求的是 lib/document.rb ,第 244 行有一个方法 start_new_page ,这就是你所追求的。在第 280 行的这个方法中,您可以看到背景的设置位置。不幸的是它正在使用 canvas这意味着,您的图像必须具有正确的尺寸。这就是背景图像不会自动缩放的原因。

您将需要覆盖此行为。由于这是 Ruby,您所要做的就是在您的项目中重新打开该类,然后复制粘贴此方法(如果您需要有关如何执行此操作的更多信息,可以查看有关猴子修补 Ruby 类的大量信息)。现在,您可以根据自己的喜好编辑此方法。最简单的方法可能是一起移除 Canvas ,然后从上面使用我们的图像技巧。所以该行最终为:
image(@background, :width => bounds.width) if @background
move_up bounds.height

您现在可以返回使用设置背景的标准方式,一切都应该正常工作。

事实上,您甚至可以将第 280 行更改为:
canvas { image(@background, :width => bounds.width) } if @background

一切都应该正常工作,省去了您输入额外的行:)。将图像与 :width 一起使用选项应该自动缩放图像,同时使用 :at选项作为 prawn 不会缩放图像。

注:我实际上还没有这样做,所以你可能需要解决这些问题。

关于ruby-on-rails - Prawn : adding background image of larger resolution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com