ruby-on-rails - Prawn pdf组、事务和回滚方法问题

标签 ruby-on-rails pdf prawn

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

问题是回滚塞满了页面。它从 pdf 中删除了额外的页面,但仍然有错误的页数并在我尝试重做时输出重叠的内容。 根据 Prawn 文档,我在回滚后重置了 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

问题似乎出在事务回滚上。我想要的主要是能够使用组方法。还有别的办法吗?

我的代码错了吗?我是不是遗漏了一些东西或目前无法进行交易。

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

最佳答案

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

Transactions 仍然不能使用分页符 (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

关于ruby-on-rails - Prawn pdf组、事务和回滚方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290686/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中隐藏标签

pdf - Golang 通过 bimg 将 pdf 转换为图像

ruby-on-rails - 使用表单提交时如何下载 prawn pdf 文件?

ruby - Prawn PDF表格混合格式

ruby-on-rails - 谷歌管理目录插入用户

ruby-on-rails - Rails 加载时间过长

ruby-on-rails - 如何告诉 ransack gem 识别日期选择器美国格式

delphi - 如何从Delphi创建兼容PDF/X-3:2002的PDF文件?

iphone - 将 PDF 加载到 UIImage 或 UIImageView 中?

ruby-on-rails - 将 Prawn PDF保存为回形针附件吗?