1

В моем приложении Rails я пытаюсь создать файл PDF с помощью PDF-Kit. Я пытаюсь добавить нижний колонтитул в PDF. Я получаю сообщение об ошибке, когда я пытаюсь добавить вспомогательный метод :footer_html, но я мог бы сгенерировать PDF без его использования.Rails - PDFKit Footer не работает

Ошибка на консоли,

Error: Failed loading page http:/home/rmed179lt/workspace/ror/ROOT_PROJECT/views/mlap_reports/footer.html?page=1&section=&subsection=&frompage=1&subsubsection=&topage=1&webpage=foobar&time=8:50 PM&date=15/02/16 (sometimes it will work just to ignore this error with --ignore-load-errors) QPaintDevice: Cannot destroy paint device that is being painted

kit = PDFKit.new(html, page_size: 'Letter', :footer_html => "/mlap_reports/footer.html") 

Я также попытался,

kit = PDFKit.new(html, page_size: 'Letter', :footer_html => "/mlap_reports/footer") 

Мой сноска находится в app/views/mlap_reports/footer.html. Любая идея, как решить эту проблему?

ответ

0

Наконец-то вы нашли решение. Это ошибка, связанная с камнем PDFKit, я обошел ее, следуя коду. (Вызывается как wkhtmltopdf напрямую, а поставляемый нижний колонтитул - как параметр).

footer_html = ac.render_to_string("#{Rails.root}/app/views/mlap_reports/footer", locals: {name: "demo"}) 

    File.open("#{Rails.root}/public/footer.html", "w") { |file| file.write(footer_html) } 

    body_path = "#{Rails.root}/public/body.html" 
    footer_path = "#{Rails.root}/public/footer.html" 

    status_code = system("wkhtmltopdf --page-size Letter --footer-spacing -10 --footer-html #{footer_path} #{body_path} #{Rails.root}/public/checkthis.pdf") 

Вы можете просто вызвать wkhtml напрямую, если вам нужно добавить нижний колонтитул.

0

Я использовал временный файл:

footer_html = Tempfile.new(['footer_html', '.html']) 
footer_html.write(render_to_string(partial: 'pdf/footer')) 
footer_html.close 
kit = 
    PDFKit.new(render_to_string('pdf/show', 
           layout: false, 
           footer_html: footer_html.path) 

pdf_inline = kit.to_pdf 
footer_html.unlink 
pdf_inline