2013-02-03 14 views
9

私のクライアント用の自動レポート生成ツールを実装しようとしています。 私はpdf形式でレポートを作成する必要があります。私は、Jquery flotを使用してグラフを作成するのが非常に快適です。私は、PDF内のグラフを取得する方法が必要です。フロートグラフを使用したPDFレポートの作成

私はフライングソーサー(xhtmlrenderer)を使ってグラフの画像をキャプチャしようとしましたが、グラフがJavaScriptによって作成されているようには見えません。

xhtmlrendererはjavascriptで作成された要素をキャプチャできますか?

またはグラフの画像をキャプチャできる他のツールですか?

答えて

9

Flotは、そのグラフをHTML5 <canvas>要素に描画します。以下のように考えられるシナリオは次のようになります。this answerで説明したように

  1. toDataURLキャンバスから画像データを取得します。
  2. jsPDFでPDFを作成し、最初の例のようにaddImageを使用して画像を埋め込みます。

しかしノート彼らはキャンバスに描かれていないので、このシナリオでは、あなたは彼らがposition:relativeと位置付けシンプル<div>要素であり、画像内の任意の軸ラベルは表示されません。私はthis postを見つけました。FlotがFlotにキャンバスにテキストを描画させるようなFlotプラグインを提供していますが、動作しているかどうかはわかりません。UPD:キャンバス上の描画ラベルは、oncoming 0.8リリース(コメント参照)に含まれています。

BUT凡例もキャンバス上に描画されていない、それはまた、適切に位置決め<div>あります。 Flotコミュニティの人々がこれを使って何かをしようとしているようだ、私はthe firstコアを修正する2つのプルリクエストを見つけた。the otherはプラグインを導入している。どちらも約9か月間に合併されず、v。0.9マイルストーンとマークされ、これは次のものであり、予定日はありません。少なくとも、それらの人たちを複製して作業をテストすることは可能です。

再開:FLOT周り多くの人々がこの問題に関係している、残念ながらまだそれを行うには安定し、アウト・オブ・ボックス方法はありません - 0.9が最終的にこの問題に時々出てくることを唯一の希望対処しました。

+2

現在のマスターブランチ(0.8.0)実際にキャンバスに軸ラベルを描くありません。その機能を完成させる(多くの人がHTMLテキストを使用する方法を望んでいるため)のは、0.8.0をリリースする前の最後の作業項目です。伝説からキャンバスまでのプロット全体を描く能力は、私たちの将来の計画の大部分です。最初の2つは実際にはうまく実装されておらず、2つ目は軸ラベルに使用しているモデルと一致しないため、2つの既存のプルリクエストを結合していません。 – DNS

+0

@DNS、 "公式"情報のおかげで!私は軸ラベル上の私の答えの部分を更新しました。 – NIA

+0

コアを修正したプルリクエストが私のために働いていました。 –

2

あなたがこのサーバサイドで行うことができ、あなたがUnixベースのシステムにいる場合、私はwkhtmltopdfを試してみるでしょう。今

EDITS SOME TIME AFTER

日、私は素晴らしいphantomjsを使用することになり、このサーバーサイドを行います。私はflotベースのプロジェクトでこれを使っていましたが、それは完全に機能します。

+0

あまりにも窓で動作します。 – ollo

5

Flot + Html2Canvas + jsPDFでこれを実現する方法の例をJSFiddleにまとめました。エクスポートされたPDFには、軸、凡例などが含まれます。:

html2canvas($("#placeholder").get(0), { 
    onrendered: function(canvas) { 
    document.body.appendChild(canvas); 

    var imgData = canvas.toDataURL('image/png'); 
    var doc = new jsPDF('landscape'); 

    doc.addImage(imgData, 'PNG', 10, 10, 190, 95); 
    doc.save('sample-file.pdf'); 
    } 
}); 

JS Fiddle

+0

私は同じ問題に直面しています... pdfは正常に動作していますが、分割ページも適切に伸びていません。このための任意の更新された答え? –

+0

複数のページでそれを生成する方法。 –

+0

['addPage'](http://rawgit.com/MrRio/jsPDF/master/docs/global.html#addPage)の機能を確認してください –

関連する問題