3

プリンターが Postscript (.ps) ファイルを印刷できるかどうかを判断しようとしています。次の方法を使用して、プリンターが次のコードで 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" );
  }
}

DocFlavor.INPUT_STREAM.POSTSCRIPTorを渡すと、 DocFlavor.BYTE_ARRAY.POSTSCRIPTand が返さWin32 Printer : HP LaserJet 2300L PSWin32 Printer : CutePDF Writerます (どちらも「仮想」プリンターです。前者は PDF の作成に使用され、後者は Postscript の作成に使用されます)。「HP Universal Print Driver for Windows PostScript」をインストールするWin32 Printer : HP Universal Printing PSと、Postscript 対応として表示されます。ただし、このドライバーが使用されているかどうかは定かではないため、接続されている他のプリンターでは Postscript ファイルを印刷できないと解釈しています。

次に、次のサンプル コードを使用して、接続されているいくつかのプリンターに Postscript ファイルをフィードしようとしました。

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 );

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

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

使用できるサンプルの Postscript ファイルをいくつか見つけまし

4

2 に答える 2

2

(これはコメントするには長すぎます)

私の最終的な目標は、プリンターが Postscript をサポートしているかどうかを判断することです。

プログラムで決定したい場合、以下はあまり役に立たないかもしれませんが...

ドキュメントを見ましたが、LaserJet P4014N が 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 サポートの問題のトラブルシューティングに役立つ場合があります)。

于 2012-01-18T19:08:30.260 に答える
0

私はJavaSE印刷環境に精通していません。ただし、PrintServiceLookup APIドキュメントを見るだけで、なぜを使用しているのか疑問に思いますPrintServiceLookup.lookupDefaultPrintService()。これにより、環境が優先するPrintServiceが提供されます。PrintServiceLookup.lookupPrintServices(DocFlavor flavor, AttributeSet attributes)お好みのPrintServiceを指定できるようです。

DocFlavorのドキュメントには、「」のMIMEタイプを指定して、application/postscriptPostScript言語データを受け入れるPrintServiceを提供するようにシステムに指示できると記載されています。

実際、DocFlavour.BYTE_ARRAY POSTSCRIPTあなたにとって有用なパラメータであるかもしれない事前定義されたクラスがあるように見えます。

于 2012-01-18T18:48:56.210 に答える