Java言語(不可ならその他の言語)で1mm単位で正確に直線や円を印刷するには?


Javaでの印刷処理は、Java Graphicsを通して直線や長方形、円など印刷しますが
その直線などをmm単位で正確に指定して印刷するにはどういう処理を書くべきですか?
Line2Dなどはドット単位で指定するので、それをミリ単位に変換する方法など。

現在、1インチ=25.4mmということで、1インチ72dpiと仮定して(dpi / 25.4d) * mmとしていますが、誤差がでます。

どこかで、Javaの印刷APIは未完成で正確な指定は仕様上不可能とみたのですが、どうなのでしょう?

また、Javaではないが、他のフレームワーク言語で1mm単位で直線などがひける言語がありましたらどうぞ。
できれば、サンプルURLつきを望みます。

最終的に完成させたいのは、Windowsアプリなので.netなどの紹介でも結構です。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/31 23:27:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:pigmon88 No.1

回答回数501ベストアンサー獲得回数25

ポイント150pt

javaが印刷しているわけではなく、せいぜいポストスクリプトという形式に変換するだけです。これをプリンターのドライバーが印刷します。だからドライバーの性能に依存するところが大きいと思います。

http://sourceforge.jp/projects/sfnet_rieps/releases/

id:neosite

回答ありがとうございます。
Java言語に限らず、印刷は環境依存ということですね。
難しいです。

2012/10/25 11:16:18
id:papa-tomo No.2

回答回数362ベストアンサー獲得回数107

ポイント100pt

SVGで描いたらどうでしょうか。JAVAならBatik SVG Toolkitなどを使って描けます。

SVGなら豊富な単位をサポートしていますので、無理なく描けると思います。

http://www.w3.org/Graphics/SVG/

他2件のコメントを見る
id:papa-tomo

あっと、SVG1.1にネイティブサポートしているのは、IE9からでした。

http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics

2012/10/25 11:19:06
id:neosite

回答ありがとうございます。
SVGはウェブブラウザ上では強みだとは思いますが、開発したかったのがWindowsのデスクトップアプリだったので、少し厳しいかなと。
今の私にレンダリングエンジンを載せる技術があればよかったんですが…

2012/10/25 11:22:26
id:oil999 No.3

回答回数1728ベストアンサー獲得回数320

Printableオブジェクトは1/72インチを単位とする座標系で印字サイズを指定することができます。
http://www.cresc.co.jp/tech/java/jps/JPS.htm

他1件のコメントを見る
id:oil999

> Printableで実装しているんですが、なぜかずれるんですよね

プリンタドライバの問題かもしれません。
ドライバのプロパティで、dpiや余白の設定を調整してみてください。

2012/10/26 20:33:36
id:neosite

プリンタ周りの設定を調べてみましたが、特に変わった設定はなかったですね。
それと、ソフトウェア公開のことを考えると、ユーザーにプリンタの個別設定をさせるのはちょっと厳しいです。

2012/10/27 16:50:12
id:gizmo5 No.5

回答回数504ベストアンサー獲得回数141

ポイント100pt

http://hondou.homedns.org/pukiwiki/pukiwiki.php?Java%C4%A2%C9%BC%20javax.print.DocPrinterJob%20%A4%F2%BB%C8%A4%C3%A4%BF%20Java2D%20%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%A4%CE%B0%F5%BA%FE
javax.print.DocPrinterJob を使ったソースですが、PrinterResolution や PrintQuality の指定が必要なんだと思います。

id:neosite

記事としてはリンク先は興味深いですが、今回の質問内容とはちょっと方向性が違うかなという気がします。

2012/10/27 16:55:33
  • id:Silvanus
    pigmon88さんのご回答の通り、プリンタードライバ(&ハード)に依存しますので
    あらゆるプリンタにおいて正確な寸法の出力結果を得る作図ルーティンというのは不可能です。
    特定のプリンタについてのみであれば、キャリブレーションをとる、
    つまり、データ上の寸法と実際の出力結果の寸法の相違(縦・横方向)を計測し
    作図ルーティンの中で補正をかけておくことで対処できます。

  • id:neosite
    ありがとうございます。
    プリンタごとのキャリブレーションをとるとのことなので、
    そこら辺をユーザー設定できれば擬似的にですが解決しそうですね

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません