19

pdfkitを使用してpdfドキュメントを作成するrails3.1アプリがあり、生成されたpdfにスタイルがないという事実を除いて、すべてが指定どおりに機能します。wkhtmltopdfは私のスタイルシートにアクセスできず、それよりも大きな問題ではないと思います。これらのスタイルシートへのアクセスをどのように許可するかについて、誰かが手がかりを持っていますか?私は基本的にこのテーマでrailscast#220に従いましたが、pdfkitをrails 3.1で動作させるには、新しい初期化子を作成する必要がありました。

これは、pdfkitをrails3.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へのリンクは次のようになります。

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

これにより、スタイリングのないpdfへのリンクが表示されます。

私のapplication.rbでは、pdfkitを次のように構成しました。

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

これをlayouts/application.html.erbファイルにも追加しました。

<%= stylesheet_link_tag    "application", :media => "all" %>
4

6 に答える 6

6

https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rbにあるミドルウェア コードから数行盗む

以下を使用できます。

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)
于 2013-08-12T20:15:57.580 に答える
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、ソースからインストールすることです。 インストールプロセスの完全な手順

于 2012-04-18T00:08:28.377 に答える
2

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

最終的にwicked_pdfに切り替えましたが、とても満足しています。彼らはこの問題を解決し、Rails 3.2.x (3.1.x は試していません) で問題なく動作します。

于 2012-02-22T21:10:50.727 に答える
2

ページ全体をレンダリングするソリューションを探していることは知っていますが、問題のない回避策がまだあることをグーグルの人々に思い出させてください

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

現在、pdf.css は css である必要があるため、sass をロードする必要がある場合は、事前にコンパイルされた public/assets/ からロードする必要があります。

于 2012-08-14T08:45:34.087 に答える
1

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

于 2011-11-08T08:52:48.920 に答える