人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: neosite
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● pigmon88
●150ポイント

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

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


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

2 ● パパトモ
●100ポイント

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

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

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


パパトモさんのコメント
JAVAに寄らないのであれば、SVGで描いたりレンダリングする方法は多数ありますから、Windows上でのSVG表現について調べると、目的に合致した方法が見つかると思います。

パパトモさんのコメント
それと、SVGはXMLを使って図形を描くためのものですので、描くのはXMLが扱える言語であれば何でもOKです。レンダラーは色々とありますが、IE8以降であれば、レンダリング可能ですから、印刷する方法はいくらでもあると思います。

パパトモさんのコメント
あっと、SVG1.1にネイティブサポートしているのは、IE9からでした。 http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics

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

3 ● oil999
●0ポイント

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


neositeさんのコメント
回答ありがとうございます。 そのページは実装時に参考にしました。 現時点で、Printableで実装しているんですが、なぜかずれるんですよね。

oil999さんのコメント
> Printableで実装しているんですが、なぜかずれるんですよね プリンタドライバの問題かもしれません。 ドライバのプロパティで、dpiや余白の設定を調整してみてください。

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

4 ● みかん
●150ポイント

http://www.oracle.com/technetwork/java/index.html


5 ● gizmo5
●100ポイント

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 の指定が必要なんだと思います。


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ