私の解決策には、wkhtml2pdf、 js、url parameters、およびjoomla component の作成が含まれます。
2 つのサイト ビューを持つ基本的な Joomla コンポーネントを作成しました。1 つは HTML でレポートを生成し、もう 1 つは iframe でレポート ビューを表示します。レポートにはアクセスするための URL があり、それを埋め込む方法があります。このコンポーネントには、レポートを生成するための js と css も含まれており、メディア フォルダーに含めるために個別のファイルに抽出されました (ただし、これは機能ではなく、コードをクリーンにするためでした)。
レポート ビューは、レポートが正しくレンダリングされるようにページ ヘッダーに次の変更を加える必要がありました (グラフ用に保存)。そうしないと、リソースが間違ったタイミングで読み込まれました。
$document = &JFactory::getDocument();
$document->setBase('');//base tag screws up svg urls so get rid of it
$document->addscript('http://www.google.com/jsapi');
$document->addscript(JURI::root(true).'/media/com_metahealthzone/javascript/chart.js');
$document->addStyleSheet(JURI::root(true).'/media/com_metahealthzone/css/chart.css');
iframe で使用される URL には ?template=system を追加する必要があり、テンプレートの css がまだ適用されているため、tmpl=component は機能しませんでした。
Google のビジュアライゼーションを正しく表示するために、javascript を の最後にOnLoadCallback
追加して svg を取得し、タグlinearGradient
の子として aを追加して(Google がグラデーションをサポートしていない理由はわかりません)、すべての要素を取得します。グラデーションが必要なグラフで、塗りつぶしを に設定します。svg 名前空間のために忘れずに使用し、グラデーションタグを定義ではなくグラデーションの子にします。defs
id="svg_grad"
'url(#svg_grad)'
setAttributeNS
stop
私はまだ VML (愚かな IE) の微調整を行う必要があります。
私も克服しなければならなかった wkhtml2pdf に関するいくつかの問題がありました。js を使用して DOM に要素を追加すると、他のブラウザーのように動作しません。document.getElement*
型関数を使用して新しい要素を取得できないため、返されたハンドルを保持する必要があります。また、wkhtml2pdf を使用して js が実行されるのを待つように指示する必要があります。そうしないと--no-stop-slow-scripts
、グラフが表示されません (遅いです)。また、引数を使用して wkhtml2pdf の Cookie を設定して、ユーザーのセッションを偽装する必要がありました--cookie <name> <value>
。