我在使用传递到 render_header 方法的 report_date 参数来渲染标头时遇到问题。尽管每次传递不同的 report_date 值,PDF 始终显示相同的日期,这不是预期的行为。
我的期望是 PDF 应使用传递给 render_header 方法的 report_date 值进行渲染。但是,该方法中似乎没有正确使用 report_date 参数。
def render_pages(pdf)
grouped_items = rows.group_by { |item| item[0] }
grouped_items.each_with_index do |(report_date, booking_items), index|
render_page(pdf, report_date, booking_items)
pdf.start_new_page unless index == grouped_items.size - 1
end
end
# Renders a page of the PDF
#
# @param pdf [Prawn::Document] The PDF object
def render_page(pdf, report_date, booking_items)
pdf.repeat(:all, dynamic: true) do
pdf.bounding_box([pdf.bounds.left, pdf.bounds.top], width: pdf.bounds.width) do
render_header(pdf, report_date, organisation_name)
end
pdf.bounding_box([pdf.bounds.left, pdf.bounds.bottom + 150 ], width: pdf.bounds.width) do
render_footer(pdf)
end
end
render_body(pdf, report_date , booking_items)
end
def render_header(pdf, report_date, organisation_name)
pdf.image open("https://s3.amazonaws.com/www-inside-design/uploads/2019/05/woolmarkimagelogo-1024x576.png"), width: 80, height: 80, position: :center
pdf.text "HEY #{report_date}"
pdf.table(
[
["#{"Sumanth Samala PVT LTD"} - #{format_report_date(report_date)} \n Attendance Register", "Customer to complete all sections below \n Generated on #{Time.now.strftime("%d/%m/%Y %H:%M")}"]
],
width: pdf.bounds.width,
row_colors: ["808080"],
cell_style: header_cell_style
) do |table|
table.column(0).width = 464
end
end
```
这是在黑暗中刺探,但评论太长了。
我们可以渲染所有页面,同时跟踪每个报告日期的起始页面和结束页面。
然后我们可以使用重复这些范围来生成标题。
def render_pages(pdf)
grouped_items = rows.group_by { |item| item[0] }
pages_headers = grouped_items.map.with_index(1) do |(report_date, booking_items), index|
start_page = pdf.page_number
render_page(pdf, report_date, booking_items)
end_page = pdf.page_number
pdf.start_new_page unless index == grouped_items.size
{pages: (start_page..end_page), report_date: report_date}
end
render_header_footer(pdf,pages_headers)
end
def render_page(pdf, report_date, booking_items)
render_body(pdf, report_date , booking_items)
end
def render_header_footer(pdf,pages_headers)
pages_headers.each do |page_data|
pdf.repeat(page_data[:pages], dynamic: true) do
pdf.bounding_box([pdf.bounds.left, pdf.bounds.top], width: pdf.bounds.width) do
render_header(pdf, page_data[:report_date], organisation_name)
end
pdf.bounding_box([pdf.bounds.left, pdf.bounds.bottom + 150 ], width: pdf.bounds.width) do
render_footer(pdf)
end
end
end
end
def render_header(pdf, report_date, organisation_name)
pdf.image open("https://s3.amazonaws.com/www-inside-design/uploads/2019/05/woolmarkimagelogo-1024x576.png"), width: 80, height: 80, position: :center
pdf.text "HEY #{report_date}"
pdf.table(
[
["#{"Sumanth Samala PVT LTD"} - #{format_report_date(report_date)} \n Attendance Register", "Customer to complete all sections below \n Generated on #{Time.now.strftime("%d/%m/%Y %H:%M")}"]
],
width: pdf.bounds.width,
row_colors: ["808080"],
cell_style: header_cell_style
) do |table|
table.column(0).width = 464
end
end