ruby-on-rails - 设置从 rails 生成 PDF 的动态页眉和页脚数据(Grover gem)
问题描述
使用这个 gem,我可以从 Rails 运行 NodeJS Puppeteer:
https://github.com/Studiosity/grover
我正在尝试将 HTML 中的不同报告呈现为 PDF 文件,以便用户可以下载它们。
通过中间件执行此操作时,我有config/initializers/grover.rb
:
Grover.configure do |config|
view = ActionView::Base.new(ActionController::Base.view_paths, {})
header_template = view.render(:template => "pdf/_header", :layout => false, :spa => spa, :codigo => codigo)
footer_template = view.render(:template => "pdf/_footer", :layout => false, :doctitle => @doctitle, :spa => spa, :codigo => codigo, :page => page, :topage => topage)
config.options = {
display_url: Settings.corporativo,
format: 'A4',
margin: {
top: '0.8in',
bottom: '0.65in',
right: '0.45in',
left: '0.5in'
},
prefer_css_page_size: true, #Doesn't seem to work. Still the margins set here are the ones that rule.
display_header_footer: true,
header_template: header_template,
footer_template: footer_template,
print_background: true,
emulate_media: 'print',
cache: false,
timeout: 0
}
end
您知道如何将动态参数传递给这些模板吗?因为,据我所知,在初始化时间设置此模板会使它们保持静态...
在这里,我的模板之一_footer.html.haml
:
%footer{:style => "display:flex; justify-content: space-between; font-size:6px !important; width: calc(100% - 0.75in); margin: 0 auto;"}
%span.title
#description{:style => "text-align:center;font-size: 6px;"}
- if !@codigo.nil?
= raw t('pdfkit.footer_E')
- else
= raw t('pdfkit.footer')
.pageContainer
%span.pageNumber
= "/"
%span.totalPages
解决方案
我没有找到任何方法来做到这一点。
我最终使用了该to_pdf
方法并转换了在控制器中获得的 HTML。然后,我所要做的就是确保您返回到请求的 mime 类型是正确的:
html = render_to_string(:action => "pdf.html.haml", :layout => 'layout_pdf')
header_template = render_to_string(:template => "pdf/_header", :layout => false, :spa => spa, :codigo => codigo)
footer_template = render_to_string(:template => "pdf/_footer", :layout => false, :doctitle => @doctitle, :spa => spa, :codigo => codigo, :page => page, :topage => topage)
grover = Grover.new(html,
header_template: header_template,
footer_template: footer_template
)
pdf = grover.to_pdf
send_data pdf, type: Mime::PDF, disposition: 'inline'
推荐阅读
- outlook - 如何在outlook插件中使用office-js的预览版
- python - 使用 Django 进行测试时,MySQL 未保存在 test_ 数据库上
- javascript - 图片上传反应输入表单:无法读取属性'0
- ruby-on-rails - Rails 5 如何从咖啡脚本文件中获取 Ajax api 调用的响应到 Rails 视图中
- highcharts - Highcharts:如何将 grouped_categories 用于 csvURL?
- node.js - 如何从 React Native Navigator 中删除标题?
- scala - 如何使用 SCALA 将字符集转换为 ASCII 并打印重复奇数次的字符
- html - 如何使用 Angular 6 在 html 中显示动态 json 数据?
- php - 对象属性中的 PHP 日期
- javascript - 使用百分比值填充自定义 SVG 图像