2011-11-18 20 views
8

Używam zestawu PDF z szynami 3.1. W przeszłości mogłem użyć funkcji render_to_string i utworzyć plik pdf z tego łańcucha. Następnie dodaję arkusze stylów w następujący sposób. Mam problem z tym, że nie mam pojęcia, jak uzyskać do nich dostęp z poziomu potoku aktywów. (To jest jak to zrobiłem w szynach 3,0)Rails 3.1 asset pipeline with 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" 

Więc moje pytanie w jaki sposób mogę uzyskać bezpośredni dostęp z mojego sterownika do mojego pliku css przez PipLine aktywów?

Wiem, że mogę używać oprogramowania pośredniczącego do montażu w stojaku z pakietem PDFkit, aby renderować plik PDF do przeglądarki, ale w tym przypadku muszę wysłać plik PDF do usługi faksu innej firmy.

Dzięki za pomoc.

Ryan

+0

Możliwy duplikat [W jaki sposób jeden odniesienia skompilowany aktywa z kontrolera w Rails 3.1?] (Http://stackoverflow.com/questions/7409948/how-does-one-reference-compiled-assets-from-the- controller-in-rails-3-1) –

Odpowiedz

0

W Rails 3.1.1 arkusze stylów są zapisywane/public/aktywów i bez odcisków palców strawienia.

Oznacza to, że powinieneś mieć możliwość odniesienia się do tych plików poprzez zmianę ścieżki w kodzie.

Jeden haczyka jednak: jeśli arkusz PDF nie jest wymieniony w manifeście CSS musisz dodać go do konfiguracji prekompilacji:

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

Mówi zębatek skompilować ten plik na własną rękę .

Jako (lepszą) alternatywę sprawdź, czy pomocnik ścieżki aktywnej działa w twoim kodzie. To odniesie poprawny plik w dev i produkcji.

+0

Dzięki za odpowiedź. Używam tylko pliku application.css, więc nie sądzę, że muszę się martwić o prekompilację. Wierzę, że pdfkit uruchamia oddzielny proces i dlatego, kiedy odwołuję się do ścieżki bez skrótu na końcu pliku, nie może go znaleźć. IE to działa: kit.stylesheets << "# {Rails.root.to_s} /public/assets/application-5c342d3a7328fd347c8ca581f6bdff60.css" tego nie robi: kit.stylesheets << „# {Rails.root. to_s} /public/assets/application.css " Czy istnieje sposób na uzyskanie prawidłowej ścieżki do pliku? Dzięki! – lundie

-1

Powinieneś być w stanie uzyskać dostęp do arkusza stylów za pomocą tej metody:

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

Dokonywanie kod:

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

Nie działa: brak takiego pliku lub katalogu – gtournie

0

skończyło się kopiowanie pliku css do mojego katalogu publicznym i odnosząc się do w taki sam sposób jak wcześniej z szynami 3. Aby uzyskać więcej informacji, sprawdź to pytanie: Access stylesheet_link_tag from controller

+0

Udało Ci się ulepszyć to rozwiązanie? i użyć potoku zasobów do wygenerowania pliku PDF? –

3

Po prostu uruchomiłem również w tym wydaniu, i przeszedłem bez użycia potoku zasobów, ale uzyskując dostęp do pliku bezpośrednio, tak jak wcześniej w/public. Nie wiem, jakie możliwe są zastosowania tego podejścia.

Domyślam się, że pliki LESS i SCSS nie będą przetwarzane tak, jak by były, gdyby były dostępne za pośrednictwem potoku zasobów.

 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

Jedyne, co mogę zobaczyć, to że nie można używać SASS/LESS, musi to być zwykły CSS. – Kris

1

Trochę późno, ale lepiej późno niż wcale, eh.

zrobiłbym to tak:

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

nadal "Errno :: ENOENT - Brak takiego pliku lub katalogu". –

Powiązane problemy