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(&:first)
page_breaks = 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,page_breaks)
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