Q25:下記サイズの用紙に対しては、次のデータが紙2、3枚分ぐらいあいて印刷され上手く出来ません。固定伝票を上手く改ページさせる方法がありますか?
Q25-1:
以前質問させて頂いた15×11サイズの連帳に対しては、問題なく印刷できたのですが、下記サイズの用紙に対しては、次のデータが紙2、3枚分ぐらいあいて印刷され上手く出来ません。
固定伝票を上手く改ページさせる方法がありますか?
帳票は
・横:8in(20.32p) 縦:4in(10.16p)(連帳)
・横:10.8in(27.43p) 縦:4.5in(11.43p)(連帳)
です。印字方向は縦で印刷したいので、縦を高くして印刷しています。
プリンタはNECのラインプリンタ(PR-D750/210A)です。
また、用紙の縦横の関係ですが、MZの帳票の用紙設定で幅と高さを指定しますが、高さが長ければ縦、横が長ければ横と言った形になっておりますが、それを強制ではなくユーザー指定で縦、横にする事は無理でしょうか?それが出来たら今回の問題は解決出来そうな感じがします。
関連ファイル:イメージ.xls
A25-1:
ご連絡いただきましたような帳票印刷に関する現象を当方では把握しておらず、また、該当プリンタを所有していないため、ソフトウェア的に現象を再現しようと試みているのですができておりません。あくまで想像ですが、プリンタの幅方向の印刷可能範囲を超えた場合に、プリンタ側で文字が改行されるのではないかと考えております。
また、用紙の縦横の関係は、MZ PlatformのベースとなっておりますJava(jre)の仕様による制約です。Javaでは、用紙サイズとして縦長の用紙しか認識しない仕様となっております。従いまして、MZ Platformではその仕様に合わせ、帳票編集画面で設定が横長の場合には、自動的に用紙の向きを横にし(内部で常に縦長の用紙にして)、Java側へ渡すという動作になっております。
印刷ダイアログに横長用紙を表示するには、MZ PlatformではなくJava環境に修正を施す必要があります。そのため、Javaのライセンスの関係により、オープンソースのJava環境を用いることになります。
その検討結果についてご報告いたします。
■状況報告:
JavaのPrintService実装クラス(sun.print.Win32PrintService)には、横長用紙の情報が渡ってはいるものの、クラス内で排除する動作となっています。
これを解決するには、独自のPrintServiceクラスを実装すれば良いのですが、Windowsネイティブとの通信を含む多数の関連クラスを実装する必要があり、対応が困難と判断いたしました。
最も簡単な対応はJRE内のWin32PrintService.javaを修正することですが、JRE内の既存クラスを改変し使用することはJavaのライセンスに抵触します。
また、Sunが提供するJREのWin32PrintService.javaは公開されておりません。
そのため、リバースエンジニアリング(逆コンパイル)が必要になりますが、これについても禁止されております。
そこで、Sunが提供するGPLライセンスのオープンソースJava環境(JDK)であるOpenJDKの使用を検討しました。
GPLライセンスのもとでソースファイルの修正が可能であり、ビルド済みの環境一式をお渡しすることもできます。
■対応:
当方で上述のソースファイルの修正およびOpenJDKのビルドを行い、動作環境(jre)を一式作成しました。
文字が正しく表示/印刷されない場合がある等の問題はございますが、その他の動作は良好です。ご入用の場合には、ご連絡お願いいたします。