1

Djangoを使用してレポートサイトを作成しています。レポートは動的に生成され、いくつかのSVGチャートも含まれています。ユーザーが表示している現在のレポートに基づいて、ヘッダーとフッターを追加したPDFファイルを作成したいと思います。Phantomjsに出くわしましたが、2つの問題があります。最初は、ページでユーザーがログオンする必要があるため、サーバーにURLを送信すると、phantomjsがログページのPDFを作成します。次に、レポートはajaxを使用して生成されるため、同じURLでも異なるレポートが作成されます。これを行うためのより良い方法はありますか?

4

4 に答える 4

1

Wkhtmtopdfは、htmlをpdfとそのpythonLibに変換するための優れたツールです

于 2013-01-03T11:16:51.743 に答える
1

一般的な問題は、Webサーバーでの認証方法です。WKHTMLTOPDFとPHANTOMJSの両方で、認証トークンをそれらに渡し、Cookieでサーバーに返すようにすることでこれを行いました。

したがって、WKHTMLTOPDFの場合、これは次のようになります。

wkhtmltopdf --cookie=LtpaToken2=<sometoken>  

これは、認証トークンを渡すJavaWebサーバーで機能します。djangoについてはよくわかりませんが、認証には同様のCookieベースのメカニズムを使用する必要があります。次のことを行う必要があります。

  1. トークンサーブ側を取得します(通常、Cookieまたはリクエストヘッダーを参照することで取得できます)
  2. それをツール、wkhtmltopdfまたはphantomjsに渡します
  3. ツールが保護されたページを要求すると、Cookieを返す必要があります。どちらにも同じコマンドラインパラメータがあります。

AJAXの場合、最善の方法は遅延を入れることです。繰り返しますが、どちらにも遅延を構成するメカニズムがあります。WKHTMLTOPDFの場合は、コマンドラインパラメーターで指定できます。phantomjsではwindows.setTimeOutを指定できます。ページをレンダリングする前に、Ajaxが終了するのに十分な遅延を与えます。

于 2013-03-02T21:52:13.623 に答える
0

Princeは素晴らしいオプションであり(SVGを処理する必要があります)、非営利目的での使用は無料です。私は自分のプロジェクトの1つでpisaを使用していましたが、SVGを処理しません。

于 2013-01-03T12:19:58.760 に答える
0

さて、たくさんグーグルした後、私は何も見つけることができませんでした。そこで私は2つのハック的な解決策を思いつきました。

  1. ユーザーが表示しているページで、テキスト領域を非表示にするフォームを作成します。送信ボタンの名前は「PDFの生成」です。ページをレンダリングした後、JavaScriptを使用して必要なdiv内のすべてのhtmlを取得し、それらをテキスト領域。ボタンをクリックすると、htmlがサーバー側に渡され、Pythonを使用してローカルでhtmlファイルを作成し、Phantomjsを使用してhtmlファイルに従ってPDFを作成します。

  2. ユーザーが表示しているのとまったく同じページをレンダリングするURLを作成しますが、ユーザーがログインする必要はありません。したがって、ローカルホストのみがURLにアクセスできるようにApacheまたはNginxを構成する必要があります。したがって、Phantomjsは問題なくURLにアクセスし、PDFを生成できます。

于 2013-01-04T17:15:46.983 に答える