2011-11-18 9 views
8

estoy usando PDFKit con los carriles de 3,1. En el pasado, pude usar la función render_to_string y crear un pdf a partir de esa cadena. Luego agrego las hojas de estilo de la siguiente manera. Mi problema es que no tengo idea de cómo acceder a ellos desde el inventario de activos. (Esto es cómo lo hice en los carriles 3,0)rieles tubería 3.1 activo con PDFKit

html_string = render_to_string(:template => "/faxes/show.html.erb", :layout => 'trade_request') 
kit = PDFKit.new(html_string, :page_size => 'Letter') 
kit.stylesheets << "#{Rails.root.to_s}/public/stylesheets/trade_request.css" 

Así que mi pregunta de cómo consigo acceso directo desde mi controlador para mi archivo CSS a través de la pipline activo?

Sé que puedo usar el Rack Middleware con PDFkit para procesar el pdf en el navegador, pero en este caso necesito enviar el pdf a un servicio de fax de terceros.

Gracias por su ayuda.

Ryan

+0

Posible duplicado de [¿Cómo hace referencia uno de los recursos compilados del controlador en Rails 3.1?] (Http://stackoverflow.com/questions/7409948/how-does-one-reference-compiled-assets-from-the- controller-in-rails-3-1) –

Respuesta

0

En Rails 3.1.1 hojas de estilo se escriben en// activos públicos con y sin la huella digital de digestión.

Esto significa que usted debería ser capaz de hacer referencia a estos archivos con sólo cambiar la ruta de acceso en el código.

Una Gotcha sin embargo: si la hoja de PDF no está referenciado en un manifiesto CSS tendrá que añadirlo a la configuración de precompilación:

config.assets.precompile += ['trade_request.css']

Esto le dice a las ruedas dentadas para compilar ese archivo en su propia .

Como alternativa (mejor), vea si el auxiliar asset_path funciona en su código. Esto hará referencia al archivo correcto en dev y producción.

+0

Gracias por la respuesta. Solo estoy usando el archivo application.css, así que no creo que tenga que preocuparme por la precompilación. Creo que pdfkit ejecuta un proceso por separado y, por lo tanto, cuando hago referencia a la ruta sin el hash al final del archivo, no puede encontrarlo. IE funciona esto: kit.stylesheets << "# {} Rails.root.to_s /public/assets/application-5c342d3a7328fd347c8ca581f6bdff60.css" esto no es así: kit.stylesheets << "# {Rails.root. to_s} /public/assets/application.css " ¿Hay alguna forma de obtener la ruta de archivo correcta? ¡Gracias! – lundie

-1

Usted debe ser capaz de acceder a la hoja de estilo usando este método:

ActionController::Base.helpers.asset_path("trade_request.css")

La fabricación de su código:

html_string = render_to_string(:template => "/faxes/show.html.erb", :layout => 'trade_request') 
kit = PDFKit.new(html_string, :page_size => 'Letter') 
kit.stylesheets = ActionController::Base.helpers.asset_path("trade_request.css") 
+0

No funciona: No existe dicho archivo o directorio – gtournie

0

terminé de copiar el archivo CSS a mi directorio público y en referencia a de la misma manera que lo hice antes con los rieles 3. Para obtener más información, consulte esta pregunta: Access stylesheet_link_tag from controller

+0

¿Logró mejorar esta solución? y para usar el inventario de activos para generar el PDF? –

3

Acaba de ejecutar en este tema también, y lo supere sin usar el inventario de activos, pero accediendo al archivo directamente como lo hubiera hecho previamente en/public. No sé cuáles son los posibles inconvenientes para usar este enfoque.

Supongo que los archivos LESS y SCSS no se procesarán como lo harían si se accede a ellos a través de la canalización de activos.

 html = render_to_string(:layout => false , :action => 'documents/invoice.html.haml') 
     kit = PDFKit.new(html, :encoding=>"UTF-8") 
     kit.stylesheets << "#{Rails.root.to_s}/app/assets/stylesheets/pdf_styles.css" 
     send_data(kit.to_pdf, :filename => "test_invoice", :type => 'application/pdf') 
+0

La única desventaja que puedo ver es que no puedes usar SASS/LESS, tiene que ser CSS simple. – Kris

1

Un poco tarde, pero es mejor tarde que nunca, eh.

lo haría así:

found_asset = Rails.application.assets.find_asset("trade_request.css").digest_path 
kit.stylesheets << File.join(Rails.root, "public", "assets", found_asset) 
+0

todavía 'Errno :: ENOENT - No hay tal archivo o directorio'. –

Cuestiones relacionadas