グラフ以外のすべてにうまく機能するように見える ExtJS オブジェクトの印刷ソリューションがあります。
CSS ヒントを使用@media print
して、ビューポートの下に「印刷」div を作成しました (画面には表示されませんが、ユーザーが印刷ボタンをクリックしたときに印刷される唯一の項目です)。
これを行うのは、オブジェクトがページにうまく収まるようにオブジェクトの比例したサイズを制御できるようにし、ツールバーなどの「非印刷」要素を削除できるようにするためです。アプリから ExtJS オブジェクトを印刷する場合は、この「印刷」div に追加してから を呼び出しますdocument.print
。
div の CSS は次のようになります。
@media print {
@page {size: landscape}
body * {
visibility: hidden;
}
.printer, .printer * {
visibility: visible;
}
.printer {
overflow: visible;
position: absolute;
left: 0;
top: 0;
}
}
これは、グリッドとフォーム、およびその他の ExtJS オブジェクトに対して正常に機能しています。
いくつかのチャートを印刷するように設定する必要がありますが、プリンター div にチャートを追加するたびに「レイアウトの実行に失敗しました」というエラーが表示され、チャートがまったく作成されません。これは、プリンター div が実際には画面に表示されておらず、チャートが表示方法に基づいてレイアウトされているためだと確信しています。
他の要素 (グリッドやフォームなど) は、レイアウトを行うために画面に表示されているかどうかを気にしないようです。そのため、チャート オブジェクトのこの要件をオーバーライドする方法はあるのでしょうか? それとも、これは表のコードに不可分に埋もれているのでしょうか? 印刷メカニズムを変更する必要がないため、私にとって理想的な取り扱いです。
これが可能かどうか誰にもわかりますか?
私のクラスExt.window.Window
もある代わりに、比例したサイズのオブジェクト内にチャートの印刷可能なバージョンを作成できます。printer
レイアウトが発生している間 (約 1 秒) 表示され、呼び出した直後に非表示になりますdocument.print
が、明らかに透過的ではありません。
@EvanTrimboli これは、他の質問で処理しようとしていた根本的な問題です。