Open tanakac opened 4 years ago
チャートのヘッダ部に「週 41」のような文字あり、これを描画している個所を探そう 週は、week = \u9031と定義されている。 ** リファレンスジャンプでWeekTextFormatter.javaを発見。 このあたりで作成した文字列を String middleText = MessageFormat.format("{0} {1}", myWeekText, weekNo); * TextPainter.javaあたりで描画するのか。 ** public void paint(Text next) {
問題はこのように画面用に作成してレンダリングが完了した画像を印刷にそのまま使うこと。 一度解像度を下げた画像から高解像度画像が作れないのは自明。 ** 印刷時に解像度を高く指定しても印刷結果に変化なし。 https://stackoverflow.com/questions/3057514/java-setting-resolution-and-print-size-for-an-image REDUCE_FACTOR_DEFAULTなる変数を変えても印刷結果に変化なし。
やはり論理描画たるCanvasから印刷イメージを作ることが必要だろう。 ** Canvasは、画面再描画の度に描画しているのだから、印刷のときに描画しなおすことにそれほどの苦はないのではないか?
** ソース構造が分からないので、とりあえず操作のUIを探してみる。 * リソース発見した。ソース探査開始。 **「印刷」は、project.print=\u5370\u5237のように定義してある。 **** 利用箇所をGrepで探す。 ganttproject/src/net/sourceforge/ganttproject/action/project/PrintAction.java
** 偶然、PrintManagerなるクラスを発見、Tag Jumpする。 import net.sourceforge.ganttproject.print.PrintManager; クラス内にprintChart()という関数を発見、初手からRenderdImageという画像形式にしている。 これがピンボケの主因だと思う。 ただし、画像とフォントを別にrenderする体力もないと思う。 *** 修正の方向性の提案。 解像度を上げたり、圧縮率を下げたり、我慢できる画質にするのどうか?
**** 偶然、PrintPreviewなるクラスを発見。 import net.sourceforge.ganttproject.print.PrintPreview;