2011-11-08 27 views
18

Tôi có ứng dụng đường ray 3.1 tạo tài liệu pdf bằng pdfkit và mọi thứ hoạt động như được chỉ định, ngoại trừ thực tế là các tệp pdf được tạo không có bất kỳ kiểu dáng nào. Tôi giả định rằng wkhtmltopdf không có quyền truy cập vào bảng định kiểu của tôi và rằng nó không phải là một vấn đề lớn hơn đó. Có ai có một đầu mối như thế nào bạn sẽ cho phép truy cập vào các stylesheets? Về cơ bản tôi đã theo dõi railscast # 220 về chủ đề này, tuy nhiên tôi đã phải tạo một trình khởi tạo mới để có được pdfkit để làm việc với các đường ray 3.1.pdfkit không có định dạng pdf

Đây là khởi tạo mà tôi đã sử dụng để có được pdfkit để làm việc với đường ray 3,1

ActionController::Base.asset_host = Proc.new { |source, request| 
    if request.env["REQUEST_PATH"].include? ".pdf" 
    "file://#{Rails.root.join('public')}" 
    else 
    "#{request.protocol}#{request.host_with_port}" 
    end 
} 

Các liên kết đến pdf trông như thế này:

<%= link_to 'Download PDF', load_path(@load, :format => "pdf") %> 

này sẽ cung cấp cho tôi một liên kết với pdf không có kiểu dáng. đá quý

<%= stylesheet_link_tag "application", :media => "all" %> 
+0

tôi đã thêm một số mã khác, nếu bạn cần một hình ảnh hay bất kỳ thông tin khác, tôi sẽ được hạnh phúc để bắt buộc. – tomciopp

+0

Tôi gặp vấn đề tương tự. Sử dụng Rails 3.1 và đường dẫn nội dung hiển thị tất cả các trình khởi tạo ở trên và không có vô dụng. Không thể tìm ra cách nào xung quanh nó. – Nuby

+0

Bạn có chắc chắn rằng ': media =>" all "' được chỉ định không? Tôi đã ngạc nhiên khi thấy rằng mặc định là 'màn hình' duy nhất. Một cách khác để kiểm tra: nếu bạn yêu cầu trình duyệt in, trang có được tạo kiểu không? –

Trả lời

1

Tôi đã sử dụng:

Trong application.rb của tôi, tôi đã cấu hình pdfkit như vậy:

config.middleware.use PDFKit::Middleware, :print_media_type => true 

Tôi cũng đã thêm này để bố trí của tôi/application.html.erb tập tin 'wicked_pdf' và những người trợ giúp để đưa CSS vào các trang. Nội bộ mà người trợ giúp chỉ đọc tất cả các tệp CSS và đưa vào chính trang đó. Vì vậy, nếu bạn thích sử dụng PdfKit, hãy thử điều tra cách bao gồm các bảng định kiểu không nội tuyến.

0

Tôi đã chạy thành công PDFKit trên Rails 3.1. Tôi đã sử dụng different setup.

Lúc đầu, tôi đã có cùng một vấn đề bạn đã làm nhưng đó là vì stylesheet_link_tag có một bộ mặc định là media => "screen"; chỉ định rõ ràng là media => "all" đã sửa nó.

+2

Tôi đã chỉ định phương tiện => "tất cả" trong tệp bố cục/application.html.erb để không phải là vấn đề. Bạn có thể xây dựng thêm về thiết lập khác nhau của mình để tôi có thể xem liệu điều đó có thực hiện được công việc này không? Bạn đã kiểm tra xem điều này cũng sẽ hoạt động trong môi trường sản xuất vì bạn chỉ thay đổi môi trường phát triển? – tomciopp

+0

@ demondeac11: Tôi thấy bạn đã chỉ định, nhưng có thể bạn đang sử dụng bố cục khác? Bạn có kiểm tra xem yêu cầu Chrome in trang của bạn sẽ được tạo kiểu không? Theo liên kết đến thiết lập khác của tôi. Thiết lập cho sản xuất sẽ phụ thuộc vào môi trường của bạn và thông thường bạn sẽ có tài sản của bạn được phân phối tĩnh, có thể từ CDN hoặc cân bằng tải, ... –

2

Tôi cũng gặp sự cố này và dường như khi đường dẫn nội dung được thêm vào Rails 3.1, pdfkit có vấn đề với liên kết biểu định kiểu. Xem GitHub issue về sự cố này.

Tôi đã kết thúc chuyển sang wicked_pdf và tôi thực sự hài lòng với nó. Họ đã giải quyết vấn đề này và nó hoạt động độc đáo trên Rails 3.2.x (chưa thử 3.1.x).

2

Đối với tôi, đó là sự cố khi cài đặt ubuntu. Tôi vừa cài đặt lại từ nguồn:

# first, installing dependencies 
sudo aptitude install openssl build-essential xorg libssl-dev 

# for 64bits OS 
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2 
tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2 
mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf 
chmod +x /usr/local/bin/wkhtmltopdf 

# for 32bits OS 
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2 
tar xvjf wkhtmltopdf-0.9.9-static-i386.tar.bz2 
mv wkhtmltopdf-i386 /usr/local/bin/wkhtmltopdf 
chmod +x /usr/local/bin/wkhtmltopdf 

Và mọi thứ hoạt động ngay bây giờ cho tôi. Vì vậy, lời khuyên của tôi là không cài đặt wkhtmltopdf bằng lệnh này sudo apt-get install wkhtmltopdf và cài đặt nó từ các nguồn. Full instructions cho quá trình cài đặt

2

tôi biết bạn đang tìm kiếm giải pháp mà sẽ làm cho toàn bộ trang, chỉ cần nhắc nhở cho googling người rằng vẫn còn là vấn đề workaround miễn phí

class DocumentController < ApplicationController 

    def show 
    @document = Document.last 
    # ... implement your respond_to 

    kit = PDFKit.new(@document.content, :page_size => 'Letter') 
    kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/pdf.css" 
    send_data kit.to_pdf, :filename => "#{@document.title}.pdf", :type => 'application/pdf' 
    end 

end 

nay là pdf.css phải css, vì vậy teoretically nếu bạn cần phải tải sass tải nó từ công chúng/tài sản tiền biên dịch/

+1

làm cách nào để tải tệp scss từ công khai/tài sản trong dev env? –

+0

Sử dụng 'Sass.compile (File.read (path_to_file))' rồi lưu tệp .css và chuyển đường dẫn đến phiên bản PDFKit. – hlcs

5

Trộm cắp một vài dòng từ mã middleware tìm thấy tại https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb

Bạn có thể sử dụng:

root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/" 
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2') 

dụ của tôi là:

html = render_to_string #render current action to string 
root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/" 
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2') 
kit = PDFKit.new(html, :print_media_type => true) 
+0

Cảm ơn! Thực sự hữu ích! – NickGnd

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