【问题标题】:Set dynamic header and footer data on PDF generation from rails (Grover gem)设置从 rails 生成 PDF 的动态页眉和页脚数据(Grover gem)
【发布时间】:2019-09-15 20:21:16
【问题描述】:

使用这个 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

【问题讨论】:

    标签: ruby-on-rails ruby initializer grover


    【解决方案1】:

    我没有找到任何方法。

    我最终使用了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'
    

    【讨论】:

    • 你如何使用 grover 添加页脚我什至有卢布这样做
    • 向 Grover 实例提供 footer_template 参数,如上所示。首先尝试使用包含文本的简单 div。给它一个大字体大小和深色(在 div 上内嵌) 使用 CSS,因为默认小字体大小存在已知问题,也许你看不到文本
    • @rmartrenado 您是如何在页脚中获得“页面”变量的?
    • 我现在不确定,但你可以使用像这样的 CSS 类来渲染这些东西:github.com/puppeteer/puppeteer/blob/main/docs/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2017-01-26
    • 2013-06-22
    • 2019-10-07
    • 2019-10-28
    相关资源
    最近更新 更多