2012-01-18 20 views
3

私は、プリンタがPostscript(.ps)ファイルを印刷できるかどうかを判断しようとしています。以下の方法を使用して、私は、プリンタが次のコードでポストスクリプトを印刷できるかどうかを判断しようとしました:私はDocFlavor.INPUT_STREAM.POSTSCRIPTDocFlavor.BYTE_ARRAY.POSTSCRIPTそれを通過してきたし、それがWin32 Printer : HP LaserJet 2300L PSWin32 Printer : CutePDF Writerを返しますPostscript印刷のサポートの決定

private void findPrinters(DocFlavor flav) { 
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flav, null); 

    System.out.println(flav); 
    if (services != null && services.length != 0) { 
    System.out.println("SUPPORTED:"); 
    for (PrintService service : services) { 
     System.out.println(service); 
    } 
    } else { 
    System.out.println("NOT SUPPORTED"); 
    } 
} 

(あるどちらも"仮想"プリンタ - 前者はPDFの作成に使用され、後者はポストスクリプトの作成に使用されました。 「Windows PostScript用HPユニバーサルプリントドライバ」をインストールすると、Win32 Printer : HP Universal Printing PSがポストスクリプト対応として表示されます。しかし、このドライバが使用されているかどうかはわかりません。そのため、他の付属プリンタがPostscriptファイルを印刷できないと解釈します。

それから私は、次のサンプルコードで接続されたプリンタのカップルにPostScriptファイルを供給しようとした:A(

FileInputStream in = null; 
PrintService prnSvc = PrintServiceLookup.lookupDefaultPrintService(); 
DocPrintJob printJob = prnSvc.createPrintJob(); 
Doc doc; 

in = new FileInputStream("some.ps"); 

if (prnSvc.isDocFlavorSupported(DocFlavor.INPUT_STREAM.POSTSCRIPT)) { 
    /* USE THIS FOR A PS-capable printer */ 
    doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.POSTSCRIPT, null); 
} else { 
    /* USE THIS FOR OTHER PRINTER */ 
    doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.AUTOSENSE, null); 
} 

printJob.print(doc, null); 

それはポストスクリプト対応プリンタで正しく印刷だけでなく、ネットワークプリンタの1つでしょうHP LaserJet P4014N)は、Postscriptをサポートしていないと言っています。レシートプリンタでは、Postscriptファイルをテキストのように印刷します。ネットワークプリンタがJava(ジェネリックドライバなど)に正しく応答しないこと、実際にPostscriptをサポートできることが示唆されています。私はドキュメントを見てきましたが、LaserJet P4014NがPostscriptをサポートしているかどうかを判断できませんでした。私は別のプリンタ(HP Laserjet 2055dn)を見つけて、USB経由でコンピュータに接続しましたが、上記の方法で印刷することはできますが、PostscriptをサポートしていないとJavaは報告しています。

多分私は何か間違っていますか?そうでない場合は、プリンタがPostscriptをサポートしているかどうかを正しく検出するにはどうすればよいですか?私の究極の目標は、PostscriptをJPGに変換していない(解像度は失われていますが、ソースには画像があります)、Postscriptのサポートがあるかどうかを判断して印刷することです。 Postscript対応ではないプリンタにPostscriptファイルを印刷するための提案があれば、それを聞いてみたいです!追加情報が必要な場合はお知らせください。

使用できるサンプルPostscriptファイルhereが見つかりました。

答えて

0

私はJava SE印刷環境に精通していません。しかし、ちょうどPrintServiceLookup API docsを見て、私はあなたがPrintServiceLookup.lookupDefaultPrintService()を使用しているのだろうと思う。これは、環境が好むPrintServiceを提供します。 PrintServiceLookup.lookupPrintServices(DocFlavor flavor, AttributeSet attributes)はあなたが好むPrintServiceを指定できるようです。

DocFlavor documentationには、「application/postscript」のMIMEタイプを指定して、PostScript言語データを受け入れるPrintServiceをシステムに指示することができます。

実際には、あらかじめ定義されたDocFlavour.BYTE_ARRAY POSTSCRIPTクラスが有益なパラメータであるようです。その後、

+0

実際の印刷を行う2番目のコードブロックは、私が手動でテストしているプリンタに手動で変更するデフォルトプリンタを使用します。最初のコードブロックは、プリンタがPostscriptをサポートしているかどうかを教えてくれるものです。 – nevets1219

1

(これはコメントのために長すぎる)

私の究極の目標は、あなたがプログラムでそれを判断したい場合は、プリンタがポストスクリプトをサポートしているかいない

かどうかを決定することです以下は大きな助けにならないかもしれないが...

私はドキュメントを見ましたが、LaserJet がPostscriptをサポートしているかどうかを判断できませんでした。

プリンターがネイティブにPostScriptを話し、プリンターのIPを持っている場合、ドライバーは必要ありません。単にPostScriptファイルをプリンターに送信すれば、プリンターが印刷します。例えば

ここに私のホームオフィスに私はローカルIP 10.0.0.44上でのPostScriptをサポートしているHPのプリンタを持っていると私は単純にコマンドラインから、実行してそのプリンタに.PSファイルを印刷することができます:

cat test.ps | netcat 10.0.0.44 9100 

これはあなたの質問に対する回答ではないので(コメントは長すぎます)、もしあなたがそうした場合(またはドライバを使用せずに直接Javaからファイルを送信した場合)、プリンタはPostScriptファイルが正しく書かれていれば、プリンタが実際にPostScriptをネイティブで使用していることを確認できます(Java/PostScriptサポートのトラブルシューティングに役立ちます)。

+0

btw私がなぜ* cat * then * netcat *をやっているのか私に聞かないでください。 – TacticalCoder

+0

モデル番号は、ネイティブPostScriptを持っているかどうかを判断するのに必ずしも十分ではありません。例を挙げれば、あなたは元々PostScriptをレンダリングできるモジュールを受け取った古い(素晴らしい)LaserJet 4+をたくさん持っていますが、デフォルトで4+はPostScriptをサポートしていませんでした(4M +とは逆に:最初からPostScriptをサポートしています)。 – TacticalCoder

+0

これは簡単なテスト方法と思われますが、エンドユーザが同じことをすることは期待できないので、プリンタがPostscriptをサポートしているかどうかをプログラムで知る必要があります。 – nevets1219