SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaの標準機能だけで実現する帳票印刷

Javaの標準機能だけで印刷する際の用紙のサイズや向き、余白の指定

Javaの標準機能だけで実現する帳票印刷 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

用紙の向きと余白の関係

 紙の向きにより余白の上下左右の解釈が変わります。見方によっては変わらないとも言えます。この連載で説明する方法では文字や画像の印刷位置は余白の大小の影響を受けませんから、ほとんど気にする必要はありません。とはいえ、余白部分はマスクされて描画されないので、10mmとか、5mmとか小さめにMediaPrintableAreaの設定をしておくのがいいでしょう。

 これで良ければ、この項の残り部分は読まずに、「PrinterJobで用紙サイズや余白を指定する印刷の実例」の項に進んでしまって構いません。横置きにすると左余白は上余白になるのか、下余白になるのか、左余白のままなのかという面倒なことを一応説明します。全部10.0fにしておけばどうだっていいのですが。

 OrientationRequested説明文(API仕様)のフィールドの詳細でLANDSCAPEの項には、

「コンテンツは媒体上に横長に印刷されます。ランドスケープ・モードは、出力ストリーム・ページを媒体に対してポートレート・モードから90度反時計回りに回転する操作として定義されます。注: 90度反時計回りとして定義されるのは、長辺に対する仕上げ処理をポートレート・モードとランドスケープ・モードで共通にし、単純化するためです。」

 とあります。

 長辺に対する仕上げ処理とは例えば綴るなら縦長なら左、横長なら上ということでしょうか。短辺を綴るなら縦長なら上、横長なら左でこれを共通にするなら90度時計回りが都合が良いとなるので、根拠としては弱い気もします。でも定義では「媒体に対して90度反時計回り」です。

 MediaPrintableAreaの説明文(API仕様)には、

「矩形の印刷可能領域を決定する場合、要求しているコンテキスト内で指定されている方向に関わらず、ポートレート・モードで印刷する場合の用紙の左上位置が原点となり、その座標(x,y)が設定されます。たとえばA4サイズ用紙の印刷可能領域は、ポートレート・モードおよびランドスケープ・モードのどちらの場合でも、高さが幅より大きくなります。 」

 とあります。

 要するに、どんな時も縦を長くする向きに置いて考えるんだよということです。

 上記のプログラムで余白を変更して試してみます(後に全体のプログラムを提示します)。

float L = 10.1f;
float R = 20.2f;
float T = 10.3f;
float B = 20.4f;

 PORTRAIT(縦置き)では次のような余白になります。

PORTRAITの余白
PORTRAITの余白

 これをこのままLANDSCAPE(横置き)指定にすると、「反時計回りに90度回転」ですから、

そのままLANDSCAPEにした時の余白
そのままLANDSCAPEにした時の余白

 「ポートレート・モードで印刷する場合の用紙の左上位置が原点」となり、「媒体に対してポートレート・モードから90度反時計回りに回転する」ので、余白の幅は変化せず、印刷されるドキュメントが回転します。回転したドキュメントにとっては、Lが上余白、Bが左余白になります。

 この辺の事情は、Linux、Windowsともに同じです。出来上がる印刷物の余白の大きさも同じです。ただ、LinuxとWindowsでは紙送りの向き、つまりプリンタから出てくる時の向きが逆になります。Windowsの場合、プリンタから先に出てくる辺がTopと考えてしまうと、とても混乱します。

 印刷ダイアログです。まずはPORTRAIT。「用紙の向き」の項でが選択され、プログラムのL,R,T,Bがきちんと反映されています。

PORTRAITの余白
PORTRAITの余白

 これをこのままLANDSCAPE(横置き)指定にすると、「用紙の向き」の項でが選択され、プログラムのL,R,T,Bが、上,下,右,左になります。上で考察した「Lが上余白、Bが左余白」に合致します。

そのままLANDSCAPEにした時の余白
そのままLANDSCAPEにした時の余白

 REVERSE_LANDSCAPEの場合は、「用紙の向き」の項でランドスケープ(反転)が選択され、プログラムのL,R,T,Bが、下,上,左,右になります。ポートレート・モードから90度時計回りに回転した状態に合致します。

そのままREVERSE_LANDSCAPEにした時の余白
そのままREVERSE_LANDSCAPEにした時の余白

次のページ
用紙の向きと余白の関係を確認するプログラム

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaの標準機能だけで実現する帳票印刷連載記事一覧

もっと読む

この記事の著者

安達 順一(アダチ ジュンイチ)

私立高校に理科・情報の教員として勤めていました。Linuxサーバー/クライアントの授業システムを作り、移動プロファイルで運用していました。教員用にもLinuxサーバーを用意し成績処理プログラムを書きました。情報の学校設定科目ではウェブページ制作とjavaのプログラミングの初歩の授業を作りました。情報...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11670 2019/10/24 21:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング