使用Prawn PDF

时间:2017-09-19 13:10:18

标签: ruby pdf prawn

我正在尝试用Prawn Ruby PDF生成器创建一个文档,但我遇到了以下问题:

下图显示了我正在尝试的结构。

enter image description here

这是一个示例代码,试图用我试图实现这一目的的方式来模仿我的真实场景。 2.times(50.times.map { |i| i.to_s }.join("\n"))模仿动态数据。

require 'prawn'

class MyPdf
  def self.to_pdf(*args)
    new(*args).to_pdf
  end

  def to_pdf
    pdf.move_down 200

    2.times do
      pdf.bounding_box(
        [0, pdf.cursor],
        width: pdf.bounds.width
      ) do
        pdf.text (50.times.map { |i| i.to_s }.join("\n"))
        pdf.stroke_bounds
      end
    end

    pdf
  end

  def pdf
    @pdf ||= Prawn::Document.new(page_size: 'A4')
  end
end

但是我在动态边界框放置方面遇到了很多麻烦。

enter image description here

您是否知道使用或不使用边界框来实现此目的的方法?

2 个答案:

答案 0 :(得分:1)

您可能正在寻找span

def to_pdf
  pdf.move_down 200

  2.times do
    pdf.span(pdf.bounds.width) do
      pdf.text (50.times.map { |i| i.to_s }.join("\n"))
      pdf.stroke_bounds
    end
  end
end

答案 1 :(得分:0)

我没有使用边界框来做到这一点。可能这不是最好的解决方案,但您可以使用表格来执行此操作:

data = []
500.times do |i|
    data.push [i.to_s]
end

table(data, width: bounds.width) do |t|
  t.cells.border_width = 0 # We don't want to see a table
  t.before_rendering_page do |page|
    page.row(0).border_top_width = 1
    page.row(-1).border_bottom_width = 1
    page.column(0).border_left_width = 1
    page.column(-1).border_right_width = 1
  end
end

来源:http://prawnpdf.org/prawn-table-manual.pdf(第17页)

检查边距是否在下一页的顶部显示