【问题标题】:Make PDF page sizes fit image sizes使 PDF 页面大小适合图像大小
【发布时间】:2014-06-02 07:51:08
【问题描述】:

我正在尝试从不同大小的图像创建 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 个空白页开始(其中一个可能是因为我没有在第一页上放任何东西),然后是第一张图像,它被裁剪了。根据 Preview,除了我暂时忽略的第一个之外,这些页面的大小为 560x560 像素。
  2. 接下来是两个空白页面,然后是第二张图片,它也无法放入页面。这些页面的尺寸为 600x600 像素。
  3. 最后,还有两张空白页和第三张图片,再次裁剪,页面尺寸也是 600x600 像素。

这是其中一张裁剪图像的示例;原图是一个完整的圆角矩形,里面有数字“1”。

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

【问题讨论】:

    标签: ruby pdf prawn


    【解决方案1】:

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

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

    这将在文档的左上角放置一个图像,并强制它适应image_sizeArray 的尺寸。这可能有助于裁剪。

    此外,在设置 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)
    

    我不能保证这会起作用,它还没有经过测试,但通常会溢出到其他页面,这与您无法将特定对象放置在边界内的事实有关,因此填充页面大小应该会有所帮助。

    【讨论】:

    • 有效!使用您提出的确切代码可以完美匹配。非常感谢!
    • @waldrumpus 很高兴它有帮助。
    【解决方案2】:

    https://github.com/boazsegev/combine_pdf

    你可以试试这个宝石。

    cropped_size = [X0, Y0, X_max, Y_max]
    combine_pdf = CombinePDF.new(pdf_path)
    combine_pdf.pages.each{|page| page.crop(cropped_size)}
    combine_pdf.save(new_pdf_path)
    

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2014-03-11
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多