Задание динамических данных верхнего и нижнего колонтитула для создания PDF из рельсов (Grover gem) - PullRequest
1 голос
/ 26 апреля 2019

Используя этот гем, чтобы я мог запустить NodeJS Puppeteer из Rails:

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

1 Ответ

0 голосов
/ 29 апреля 2019

Я не нашел способа сделать это.

В итоге я использовал метод 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...