3

我正在尝试在 rails 应用程序中使用 prawn 创建一个 pdf 报告。有很多部分包含用户生成的内容,我想尝试将它们组合在一起。有时这会超过一页,从而导致无法分组错误。然后我尝试使用事务,以便在发生错误时可以回滚,然后在不使用 group 方法的情况下输出内容。

问题是回滚填满了页面。它从 pdf 中删除了多余的页面,但当我尝试重做它时,仍然有错误的页数和重叠内容输出。根据大虾文档,我在回滚后重置了 y 位置,但我仍然遇到问题。

例如。以下测试代码写入 2 页数字,回滚到开头,然后再次尝试写入相同的数字。它会产生一个单页 pdf,其中第二页数字与第一页重叠,页数为 2。即使我使用的是 prawn number_pages 方法,页面底部的页数也相互重叠

class TestReport < Prawn::Document 
  def to_pdf   
    font('Helvetica')
  bounding_box([bounds.left, bounds.top - 50], :width  => bounds.width, :height => bounds.height - 100) do   

text 'begin'
  y_pos = y
  transaction do
    begin
      group do
        64.times do|i|
          text i.to_s
        end
      end
    rescue
      rollback
    end
  end
  self.y = y_pos

  64.times do|i|
    text i.to_s
  end

  text 'end'
  text page_number.to_s
end

    page_numbers(1)
    #render
  end

 def page_numbers(start)
    string = "page <page> of <total>"
    options = { :at => [bounds.right - 150, 40],
              :width => 150,
              :align => :right,
              :start_count_at => start,
              :color => "000000" }
    number_pages string, options
 end
end

 def test_report
    pdf = TestReport.new()
     pdf.to_pdf
     send_data pdf.render, filename: "test.pdf",
                      type: "application/pdf",
                      disposition: "inline"
 end

问题似乎与事务回滚有关。我想要的主要是能够使用 group 方法。还有其他方法吗?

我的代码错了吗?我是否遗漏了某些东西或当前无法进行交易。

我目前在 ruby​​ on rails 应用程序中使用 master prawn 分支( gem 'prawn', :git => 'git://github.com/prawnpdf/prawn.git', :branch => 'master')。

4

2 回答 2

4

这个问题现在已经很老了,但我会发布一个答案,因为它是谷歌搜索异常时最先出现的问题之一。

事务仍然不适用于分页符(v 1.0.0.rc2),所以我创建了一个帮助方法,它首先尝试使用分组,然后如果发生异常,它只是重试而不分组,使内容跨越一页以上。

def group_if_possible(pdf, &block)
  begin
    pdf.group { block.call }
  rescue Prawn::Errors::CannotGroup
    block.call
  end
end

示例:在创建表时使用它:

group_if_possible(pdf) do
  pdf.table(rows)
end

编辑:
分组已从 Prawn 1.x 中删除,但有一个非官方的分组 gem 适用于 Prawn 2: https ://github.com/ddengler/prawn-grouping

于 2014-01-14T12:35:17.227 回答
1

看起来 Brad Ediger 在 Google 网上论坛上回答了您的问题,但为了其他寻求帮助的人的利益,以下是他的回复:

遗憾的是,事务在开始新页面或更改页面集合时还不能正常工作。这是一个已知问题:

https://github.com/prawnpdf/prawn/issues/268

-是

于 2012-06-21T13:33:17.070 回答