2011-11-08 9 views
18

私は、pdfkitを使用してpdf文書を作成するレール3.1アプリケーションを持っています。生成されたpdfsにはスタイリングがないという点を除いて、私はwkhtmltopdfが私のスタイルシートへのアクセスを持っておらず、それより大きな問題ではないと仮定しています。これらのスタイルシートへのアクセスをどのように許可するかという手掛かりは誰にもありますか?基本的には#220のレールスカストに従っていますが、新しいイニシャライザを作成してpdfkitをレール3.1で動作させる必要がありました。pdfkitはPDF形式ではありません

これは私がレール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 
} 

PDFへのリンクで動作するようにpdfkitを取得するために使用していた初期化子で次のようになります。これは私のリンクを提供します

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

スタイリングがないpdfへ以下のような私のapplication.rbで

私が設定しているpdfkit:

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

は、私も私のレイアウトにこれを追加した/ application.html.erbファイル:

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

私は、いくつかのより多くのコードを追加していますが、視覚的または他の情報が必要な場合、私は義務付けるさせていただきます。 – tomciopp

+0

私は同じ問題を抱えています。 Rails 3.1とアセットパイプラインを使用すると、上記のイニシャライザとハックがすべて役に立たなくなります。その周りに道を見つけることができません。 – Nuby

+0

':media =>" all "'が指定されていますか?私は、デフォルトが「スクリーン」のみであることに驚きました。チェックするもう1つの方法:ブラウザに印刷を依頼する場合は、ページのスタイルは変わりませんか? –

答えて

1

私が使用している宝石'wicked_pdf'とそのヘルパーは、CSSをページに含めることができます。内部的にヘルパーはすべてのCSSファイルを読み込み、ページ自体にインクルードします。したがって、PdfKitを使用したい場合は、非インラインスタイルシートを含める方法を調べてみてください。

0

Rails 3.1でPDFKitを正常に実行しました。私はdifferent setupを使っています。

最初は同じ問題がありましたが、これはstylesheet_link_tagのデフォルトがmedia => "screen"に設定されているためです。明示的にmedia => "all"を指定してください。

+2

layouts/application.html.erbファイルにmedia => "all"を指定しました。問題はないはずです。あなたはあなたの別の設定を詳しく説明できますか?そうすれば、この作業ができるかどうか分かりますか?開発環境を変更しただけなので、これも生産環境でも動作するかどうかを確認しましたか? – tomciopp

+0

@ demondeac11:あなたが指定したのを見ましたが、別のレイアウトを使用していますか?あなたのページを印刷するためにChromeにスタイルを付けるように要求するか確認しましたか?私の別の設定へのリンクに従ってください。プロダクションの設定は環境によって異なります。通常、アセットを静的に(CDNやロードバランサなどから)静的に提供します。 –

2

この問題も同様に発生しました.Rails 3.1でアセットパイプラインを追加すると、pdfkitにはスタイルシートのリンクに問題があるようです。この問題については、GitHub issueを参照してください。

wicked_pdfに切り替わりました。本当にうれしく思います。彼らはこの問題を解決し、Rails 3.2.x(3.1.xを試していない)でうまく動作します。

2

私にとっては、ubuntuのインストールに問題がありました。私はちょうどソースから再インストールしました:

# 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 

そしてすべては私のために今働きます。だから私の助言は、このコマンドでwkhtmltopdfをインストールしないでくださいsudo apt-get install wkhtmltopdfとソースからインストールします。私はあなたがページ全体、問題自由な回避策は、PDFは今

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 

まだあることをグーグルで人々のためだけのリマインダーをレンダリングするソリューションを探しているのを知って、インストールプロセス

2

のフルinstructions 。CSSはそうteoreticallyあなたはあなたが使用することができますhttps://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb

で発見ミドルウェア・コードから数行を盗むプリコンパイルされたパブリック/資産/

+1

dev envのpublic/assetsからscssファイルをロードするにはどうすればよいですか? –

+0

'Sass.compile(File.read(path_to_file))'を使って.cssファイルを保存し、パスをPDFKitインスタンスに渡します。 – hlcs

5

からSASS負荷にそれをロードする必要がある場合は、CSSでなければなりません:

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

私の例は次のとおりです。

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

ありがとう!本当に役に立ちました! – NickGnd

関連する問題