def generate_pdf
# generation logic
# Assume the PDF content is in variable pdf_content
pdf_filename = generate_pdf_filename
s3 = Aws::S3::Resource.new(region: ENV['S3_REGION'])
obj = s3.bucket(ENV['S3_BUCKET_NAME']).object(pdf_filename)
obj.put(body: render_to_string(
pdf: pdf_filename,
template: "blank/_lorem",
formats: [:html,:pdf],
layout: "pdf_layout",
page_size: 'Letter',
encoding: 'utf8',
javascript_delay: 600,
footer: {
html: {
template: "blank/pdf_footer"
}
}
))
# Save a record in the database
GeneratedPdf.create(user: current_user, s3_key: pdf_filename)
# Provide feedback to the user or redirect
redirect_to blank_index_path, notice: 'PDF generated successfully!'
end
<div class="ajg-pdf-footer" style="width:100%">
<hr style="clear:both;">
<%= wicked_pdf_image_tag asset_url('/images/affy-logo-github.png'), width: 50 %>
<span class="move-right">Page <span class="page"></span> of <span class="topage"></span></span>
</div>
显示空白 PDF:
This is the html footer...
PDF 生成良好:
我相信它与渲染为字符串有关 - 或者命名文件 html.erb 或 pdf.erb 之间的区别。 - 这是一个单独的示例,我可以用它以更简单的方式生成 PDF。请注意,在此我必须使用 pdf.erb 格式的页眉和页脚文件,而不是 html.erb - 如果我不这样做,则会引发缺少模板错误。
class TestController < ApplicationController
def index
authorize :page, :affygility?
respond_to do |format|
format.html
format.pdf do
render pdf: "pdf-test-#{DateTime.now.strftime('%Y-%m-%d-%H-%M-%S')}",
save_to_file: Rails.root.join('public/pdfs', "pdf-test-#{DateTime.now.strftime('%Y-%m-%d-%H-%M-%S')}.pdf"),
template: "test/index",
formats: [:html],
layout: "pdf_layout",
page_size: 'Letter',
encoding: 'utf8',
javascript_delay: 600,
header: {
html: {
template: "test/test_header"
}
},
footer: {
html: {
template: "test/test_footer"
}
}
end
end
end
end
页眉和页脚显示得很好:
wicked_pdf gem 版本(wicked_pdf (2.7.0)):
wkhtmltopdf 版本(wkhtmltopdf 0.12.6(带有修补的 qt)):
header: {
html: {
template: "blank/pdf_header",
formats: [:pdf]
}
},
footer: {
html: {
template: "blank/pdf_footer",
formats: [:pdf]
}
}
供参考: