2011-11-18 51 views
8

Tôi đang sử dụng PDFkit với đường ray 3.1. Trong quá khứ tôi đã có thể sử dụng hàm render_to_string và tạo một pdf từ chuỗi đó. Sau đó tôi thêm các bảng định kiểu như sau. Vấn đề của tôi là tôi không biết cách truy cập chúng từ bên trong đường ống nội dung. (Đây là cách tôi đã thực hiện nó trong đường ray 3.0)Đường ray tài sản 3.1 đường ống với 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" 

Vì vậy, câu hỏi của tôi về cách truy cập trực tiếp từ bộ điều khiển vào tệp css thông qua đường ống nội dung?

Tôi biết tôi có thể sử dụng Rack Middleware với PDFkit để hiển thị bản pdf cho trình duyệt, nhưng trong trường hợp này tôi cần gửi bản pdf tới dịch vụ fax của bên thứ ba.

Cảm ơn sự giúp đỡ của bạn.

Ryan

+0

Bản sao có thể có của [Làm thế nào để một tài liệu tham chiếu được biên dịch từ bộ điều khiển trong Rails 3.1?] (Http://stackoverflow.com/questions/7409948/how-does-one-reference-compiled-assets-from-the- controller-in-rails-3-1) –

Trả lời

0

Trong Rails 3.1.1 stylesheets được ghi vào/public/tài sản có và không có dấu vân tay tiêu hóa.

Điều này có nghĩa là bạn có thể tham khảo các tệp này chỉ bằng cách thay đổi đường dẫn trong mã của bạn.

Một Gotcha mặc dù: nếu bảng PDF không được nhắc đến trong một biểu hiện CSS bạn sẽ phải thêm nó vào cấu hình precompile:

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

này cho sprockets để biên dịch tập tin đó ngày của riêng mình .

Làm cách thay thế (tốt hơn), xem trình trợ giúp asset_path có hoạt động trong mã của bạn hay không. Điều này sẽ tham khảo các tập tin chính xác trong dev và sản xuất.

+0

Cảm ơn bạn đã phản hồi. Tôi chỉ đang sử dụng tệp application.css vì vậy tôi không tin rằng tôi phải lo lắng về việc biên dịch trước. Tôi tin rằng pdfkit chạy một quá trình riêng biệt, và do đó khi tôi tham khảo đường dẫn mà không có băm ở phần cuối của tập tin nó không thể tìm thấy nó. IE làm việc này: kit.stylesheets << "# {} Rails.root.to_s /public/assets/application-5c342d3a7328fd347c8ca581f6bdff60.css" này không: kit.stylesheets << "# {Rails.root. to_s} /public/assets/application.css " Có cách nào để nhận đường dẫn tệp chính xác không? Cảm ơn! – lundie

-1

Bạn sẽ có thể truy cập vào stylesheet bằng phương pháp này:

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

Làm mã của bạn:

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

Không hoạt động: Không có tệp hoặc thư mục nào như vậy – gtournie

0

tôi đã kết thúc việc sao chép các tập tin css vào thư mục công cộng của tôi và đề cập đến nó theo cùng một cách tôi đã làm trước đây với đường ray 3. Để biết thêm thông tin, hãy xem câu hỏi này: Access stylesheet_link_tag from controller

+0

Bạn có quản lý để cải thiện giải pháp này không? và sử dụng đường dẫn nội dung để tạo PDF? –

3

Chỉ cần chạy vào vấn đề này là tốt, và tôi đã vượt qua nó mà không sử dụng đường dẫn nội dung, nhưng truy cập trực tiếp vào tệp như tôi đã có trước đó/công khai. Không biết những khuyết điểm có thể là gì khi sử dụng phương pháp này.

Tôi đoán tệp LESS và SCSS sẽ không được xử lý như chúng sẽ có nếu được truy cập thông qua đường dẫn nội dung.

 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

Con duy nhất tôi có thể thấy là bạn không sử dụng SASS/LESS, nó phải là CSS đơn giản. – Kris

1

Một chút trễ nhưng muộn hơn không bao giờ, eh.

tôi muốn làm điều đó như thế này:

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

vẫn 'Errno :: ENOENT - Không có tệp hoặc thư mục nào'. –

0

tôi hạ cánh ở đây cố gắng giải quyết vấn đề này và không ai trong số các câu trả lời dường như để giải quyết vấn đề này đối với tôi.Tôi tìm thấy câu trả lời chấp nhận bưu stack overflow này làm việc cho tôi:

How does one reference compiled assets from the controller in Rails 3.1?

Tôi thậm chí còn có thể phục vụ .css.erb tập tin thông qua phương pháp này.

Các vấn đề liên quan