Я пытаюсь создать отчет в формате pdf с использованием креветок в приложении 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
Проблемы, похоже, связаны с откатами транзакций. Главное, что я хочу, это использовать групповой метод. Есть ли другой способ?
Является ли мой код неправильным? Я что-то упускаю или делаю транзакции, которые в настоящее время не работают.
В настоящее время я использую мастерскую креветки в рубине на рельсах (драгоценный камень «креветка»,: git => 'git: //github.com/prawnpdf/prawn.git',: branch => 'мастер').