4

Мне очень трудно получить PDFKit для работы на Heroku. Я прочитал учебники, найденные here, here и here, но все еще не могу понять, как правильно получить pdf. У меня такая же проблема, описанная в предыдущих ссылках, где приложение отлично работает в разработке и зависает в производстве на Heroku. Я попытался добавить следующее (полученное из учебников).PDFKit на Heroku с Rails 3.2.13 и Bootstrap

application_helper.rb

def request_from_pdfkit? 
    # when generating a PDF, PDFKit::Middleware will set this flag 
    request.env["Rack-Middleware-PDFKit"] == "true" 
end 

# We have to reference the actual output of the assets pipeline, which according 
# to http://guides.rubyonrails.org/asset_pipeline.html is application-<md5>.css and 
# application-<md5>.js. We have to dynamically find these file names and correctly 
# reference them. 
def get_mdf5_file(base_file) 
    stripped_name = base_file.basename.to_s.gsub(base_file.extname, "") 
    Dir.glob("#{base_file.parent}/*#{base_file.extname}").each do |file| 
    return file if file.match(/#{stripped_name}-[\d\w]+#{base_file.extname}/) 
    end 
    return base_file 
end 

application.html.erb

<% if request_from_pdfkit? %> 
    <style type="text/css" media="all"> 
    <%= File.read(get_mdf5_file(Rails.root.join("public","assets","application.css")) %> 
    </style> 
    <script type="text/javascript"> 
    <%= File.read(get_mdf5_file(Rails.root.join("public","assets","application.js"))) %> 
    </style> 
<% else %> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
<% end %> 

Когда я делаю это ПРВ сгенерированные имеют минимальный стиль и отсутствие контента, созданного с помощью JavaScript. Было бы (по моей догадке), что ни один из сценариев Bootstrap не будет предварительно скомпилирован в application.css. Сейчас, вот содержимое

application.css

/* 
*= require_self 
*= require dataTables/jquery.dataTables 
*= require dataTables/jquery.dataTables.bootstrap 
*= require dataTables/src/demo_table_jui 
*= require jquery.ui.all 
*= require jquery.jqplot 
*= require_tree . 
*/ 

application.js

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require bootstrap 
//= require bootstrap-multiselect 
//= require dataTables/jquery.dataTables 
//= require dataTables/jquery.dataTables.bootstrap 
//= require jquery.jqplot 
//= require plugins/jqplot.cursor 
//= require plugins/jqplot.BezierCurveRenderer 
//= require plugins/jqplot.bubbleRenderer 
//= require plugins/jqplot.barRenderer 
//= require plugins/jqplot.categoryAxisRenderer 
//= require plugins/jqplot.canvasTextRenderer 
//= require plugins/jqplot.canvasAxisLabelRenderer 
//= require plugins/jqplot.highlighter 
//= require plugins/jqplot.canvasOverlay 
//= require plugins/jqplot.cursor 
//= require plugins/jqplot.enhancedLegendRenderer 
//= require plugins/jqplot.dateAxisRenderer 
//= require plugins/jqplot.canvasAxisTickRenderer 
//= require_tree . 

Я пытался добавить некоторые компоненты Bootstrap SCSS вручную к трубопроводу application.css активов, но получил ошибка указана here.

Я в затруднении, как заставить это работать, поэтому любая помощь будет оценена по достоинству.

EDIT

Я играл с этим много и заметил, что, когда Javascript и CSS вставлены рядный, все кавычки "заменяются " в зависимости от источника, указанного на Chrome. Я попробовали добавить .gsub (/ " /,/"/), но это не сработало. Кто-нибудь знает, почему я вижу " вместо», или, если это даже вопрос.

EDIT 2

Я был в состоянии получить дисплей выглядеть немного лучше, реализовав следующие изменения

<script type="text/javascript"> 
    <%= raw(File.read(get_mdf5_file(Rails.root.join("public", "assets", "application.js"))).gsub("</script>", "")) %> 
</script> 
<style type="text/css" media="all"> 
    <%= raw File.read(get_mdf5_file(Rails.root.join("public", "assets", "application.css"))) %> 
</style> 

однако стиль все еще перепутались, поэтому я до сих пор охота для решения.

ответ

2

Я понял это. Я должен был понизить до wkhtmltopdf 0.10 RC2. После того, как я сделал это, я был в состоянии модифицировать стиль, чтобы получить PDF, чтобы выглядеть прилично.

+1

+ 1 миллиона точек, и, если я когда-нибудь увидеть вас лично, объятие, за возвращение и отвечать на свои собственные вопрос! :-D –

1

Я думаю, что можно упростить много делая (Rails4, YMMV):

<%= Rails.application.assets.find_asset('pdfs.css').to_s.html_safe %> 

Работы с использованием wkhtmltox-0.12.0.

Некоторые детали: https://github.com/sstephenson/sprockets#accessing-assets-programmatically

Кредит на: https://stackoverflow.com/a/11767185/1869825
также: Rails 3 command to embed text of my CSS stylesheets in head of my HTML

Смежные вопросы