2009-05-21 2 views
1

空港経由で複雑なスイングアプリケーションUIを物理プリンタに印刷しています。私はMacの& Windowsマシンの両方を同じプリンタに印刷している。 Macからの印刷はすばらしく見える。ウィンドウからの印刷は、フォントやグラフの行など、すべてが非常にピクセル化されています。Mac&Windowsでのスイングからの印刷 - 追記のサポートはどこですか?

周囲の掘り出し物によって、使用可能なPrintServicesがプラットフォームによって異なることが明らかになりました。

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT; 
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet(); 
PrintServiceLookup.lookupPrintServices(flavor, attrs); 

上記はmacから実行されると、単一要素の配列を返します。ウィンドウから、空の配列を返します。これは、ポストスクリプトデータではなく、ウィンドウが72 DPIイメージをプリンタに送信していると考えています。

これはMacの& Windows JVM実装の違いですか? Windowsで印刷を行うための回避策はありますか?私は自分の350dpiのラスタライズされた画像を生成してプリンタに送ることができることを理解していますが、これらのことは数百ページにも及んでいます。

+0

私はこの質問につまずいたと私はそれが古代の知っている、あなたは、おそらくこのことを認識しているが、コードの2行目は不要であり、 'lookupPrintServices'は、属性を設定する必要がない場合に2番目の引数を' null'にします。 –

答えて

1

私は答えを得たと思う:java.awt.printerjobシステムプロパティはsun.awt.windows.WPrinterJobに設定されました。あなたのプリンタでのぼんやりしたピクセル出力が好きなら、これは便利なPrinterJobサブクラスです。それはそうと同じように、利用できる場合は代わりに、私はsun.print.PSPrinterJobのインスタンスを取得:

PrinterJob printerJob = null; 
try { 
    if (System.getProperty("java.awt.printerjob").equals("sun.awt.windows.WPrinterJob")) { 
     // WPrinterJob sends crappy GIF images to the printer, and everything looks all blocky 
     // try to get an instance of a PSPrinterJob instead 
     printerJob = (PrinterJob) Class.forName("sun.print.PSPrinterJob").newInstance(); 
    } 
} catch (Throwable e1) { 
    log.log(Level.SEVERE, "Could not instaniate sun.print.PSPrinterJob", e1); 
} 
if (printerJob == null) { 
     printerJob = PrinterJob.getPrinterJob(); 
} 
+0

FYI、MacのJava 8はこの値を 'sun.lwawt.macosx.CPrinterJob'に設定しているようです – tresf

関連する問題