使PDF页面大小适合图像大小

时间:2014-06-02 07:51:08

标签: ruby pdf prawn

我正在尝试从不同大小的图像创建PDF文档,以便PDF的每个页面显示一个未缩放的图像,页面大小应符合图像尺寸。

我正在使用Prawn从图像文件名列表中生成PDF。要获取图像尺寸,我使用FastImage。

Prawn::Document.generate('Output.pdf') do
  list_of_image_filenames.each do |i|
    image_size = FastImage.size(i)
    start_new_page(:size => image_size, :layout => :portrait)
    image(i)
  end
end

要测试它我使用的尺寸为560x560,600x600和600x600的三个PNG文件。我确保FastImage返回正确的图像尺寸。

生成的PDF(预览告诉我PDF版本1.4)如下所示:

  1. 它以3个空页开始(其中一个可能是因为我没有在第一页上放任何东西),然后是第一个被裁剪的图像。根据预览,除了我现在忽略的第一个,这些页面的大小为560x560像素。
  2. 接下来是两个空页面,然后是第二个图像,它也不适合页面。这些页面的尺寸为600x600像素。
  3. 最后,再拍摄两张空白页和第三张图片,页面尺寸也为600x600像素。
  4. 以下是其中一个裁剪图像的示例;原始图像是一个完整的圆角矩形,里面有数字“1”。

    Sample of incorrectly displayed image

    为什么图片不适合页面?如何将各个未缩放的图像放在符合其尺寸的页面上?

2 个答案:

答案 0 :(得分:3)

可能不是一个确切的答案,但评论可能太长了。我有一些建议: 您是否尝试过指定图像大小和位置? e.g。

image(i,position: :left, vposition: :top, fit: image_size)

这会将图片放在文档的左上角,这会强制它适合image_size Array的尺寸。 可能有助于裁剪。

同样在设置page_size时,您需要填充边距,否则图像将不适合,因为它在可写区域之外尝试类似

image_size = FastImage.size(i)
#default margins are 0.5 inches so pad both height and width with 1 inch using in2pt
page_size = image_size.map{|p| p + in2pt(1) }
start_new_page(:size => page_size, :layout => :portrait)

我不能保证这会起作用而且它还没有经过测试但是通常溢出到其他页面上的事实是你不能在边界内放置一个特定的对象,所以填充页面大小应该有帮助。

答案 1 :(得分:1)

https://github.com/boazsegev/combine_pdf

你可以尝试这个宝石。

JTextComponent