Javaでの印刷処理は、Java Graphicsを通して直線や長方形、円など印刷しますが
その直線などをmm単位で正確に指定して印刷するにはどういう処理を書くべきですか?
Line2Dなどはドット単位で指定するので、それをミリ単位に変換する方法など。
現在、1インチ=25.4mmということで、1インチ72dpiと仮定して(dpi / 25.4d) * mmとしていますが、誤差がでます。
どこかで、Javaの印刷APIは未完成で正確な指定は仕様上不可能とみたのですが、どうなのでしょう?
また、Javaではないが、他のフレームワーク言語で1mm単位で直線などがひける言語がありましたらどうぞ。
できれば、サンプルURLつきを望みます。
最終的に完成させたいのは、Windowsアプリなので.netなどの紹介でも結構です。
javaが印刷しているわけではなく、せいぜいポストスクリプトという形式に変換するだけです。これをプリンターのドライバーが印刷します。だからドライバーの性能に依存するところが大きいと思います。
http://sourceforge.jp/projects/sfnet_rieps/releases/
SVGで描いたらどうでしょうか。JAVAならBatik SVG Toolkitなどを使って描けます。
SVGなら豊富な単位をサポートしていますので、無理なく描けると思います。
http://www.w3.org/Graphics/SVG/
あっと、SVG1.1にネイティブサポートしているのは、IE9からでした。
http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics
回答ありがとうございます。
SVGはウェブブラウザ上では強みだとは思いますが、開発したかったのがWindowsのデスクトップアプリだったので、少し厳しいかなと。
今の私にレンダリングエンジンを載せる技術があればよかったんですが…
Printableオブジェクトは1/72インチを単位とする座標系で印字サイズを指定することができます。
http://www.cresc.co.jp/tech/java/jps/JPS.htm
> Printableで実装しているんですが、なぜかずれるんですよね
プリンタドライバの問題かもしれません。
ドライバのプロパティで、dpiや余白の設定を調整してみてください。
プリンタ周りの設定を調べてみましたが、特に変わった設定はなかったですね。
それと、ソフトウェア公開のことを考えると、ユーザーにプリンタの個別設定をさせるのはちょっと厳しいです。
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 の指定が必要なんだと思います。
記事としてはリンク先は興味深いですが、今回の質問内容とはちょっと方向性が違うかなという気がします。
回答ありがとうございます。
2012/10/25 11:16:18Java言語に限らず、印刷は環境依存ということですね。
難しいです。