【问题标题】:Bounding box across multiple pages with Prawn PDF使用 Prawn PDF 跨多个页面的边界框
【发布时间】:2017-09-19 13:10:17
【问题描述】:

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

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

这是示例代码,它试图以我试图实现这一点的方式模仿我的真实场景。 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

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

你们知道用或不用边界框的方法吗?

【问题讨论】:

    标签: ruby pdf prawn


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      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 页)

      检查您的页边距,以便在下一页顶部继续

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 2019-05-19
        相关资源
        最近更新 更多