5

エンタープライズ システムの統合を作成しようとしています。

2 つの異なる場所から多くのクライアントが使用している Web サーバーがあります。このサーバーには 2 つのネットワーク プリンターがインストールされています。

私がやりたいことは、これらのプリンターで PDF ドキュメントを印刷することです。プログラムで、要求されたプリンターにドキュメントを送信する必要があります。

リクエストが行われた場所を特定できます。ただし、実行時にデフォルトのプリンターを設定できません。

これはバックグラウンドで動作する Web サーバーであるため、プリンター ダイアログにデータを入力して、ユーザーにプリンターを選択させることはできません。プログラムで使用するプリンターを設定できる必要があります。

今のところ、システムに登録されているプリンターを使用して確認 PrinterJob.lookupPrintServices();でき、要求されたプリンターでサービスを設定できますが、デフォルトのプリンターは変更されず、システムはデフォルトのプリンターで印刷を続けます。

それを達成する方法についてあなたのアイデアを教えてください。

4

1 に答える 1

8

Webでさらに調査することで、問題を解決しました。私はそれを必要とするかもしれない他の人々のためにここにそれを与えています。

このWebサイトからの解決策を結論付けました:

http://webmoli.com/2008/11/03/java-print-pdf/

注:ウェブサイトで指定されたコードを実行するには、PdfRenderer .jar ライブラリをプロジェクトにインストールする必要があります。実行時に印刷します。

メソッドは次のとおりです。

/**
* Sets the printer service to be used for printing
*
* @param argPrintServiceName
* @throws PrinterException
*/
public void setPrintService(String argPrintServiceName) throws PrinterException {
PrintService[] printServices = PrinterJob.lookupPrintServices();
int i;
for (i = 0; i < printServices.length; i++) {
if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) {
printerJob.setPrintService(printServices[i]);
break;
}
}
if (i == printServices.length) {
throw new PrinterException(“Invalid print service name: ” + argPrintServiceName);
}
}

このメソッドにいくつかの変更を加える必要があります。printerJob はグローバル変数ではないため、印刷には影響しません。これを行うには、このメソッドの戻りパラメータを次のように PrintService に設定します。

 public static PrintService setPrintService(String argPrintServiceName) throws PrinterException {
        PrintService psr = null;
    PrintService[] printServices = PrinterJob.lookupPrintServices();
    int i;
    for (i = 0; i < printServices.length; i++) {
    if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) {
        psr = printServices[i];          
    break;
    }
    }
    if (i == printServices.length) {
    throw new PrinterException("Invalid print service name: " + argPrintServiceName);
    }
    return psr;
    }

メインメソッドでは、次のようなメソッドを呼び出します:

PrintService ps = setPrintService("Printer Name Here");

ここで、このサービスを他のメソッドに送信する必要があります。

これを変える:

PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF");

PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF", ps);

これらは、次のように変更する必要がある他のメソッドです。

public PrintPdf(byte[] content, String jobName, PrintService ps) throws  
        IOException, PrinterException 
        {
        initialize(content, jobName, ps);
    } 



 public PrintPdf(InputStream inputStream, String jobName, PrintService ps)
    {
     *
     *
     initialize(pdfContent, jobName, ps);
    }

pjob を割り当てた後に、次のコード行を追加します。pjob.setPrintService(ps);

private void initialize(byte[] pdfContent, String jobName, PrintService ps) throws      
 IOException, PrinterException 
 {
  *
  *
        pjob = PrinterJob.getPrinterJob();
        pjob.setPrintService(ps);
  *
  *
  ...
 }

このコードは完全に機能し、さらに PDF を直接印刷できます。

于 2013-03-06T14:32:07.040 に答える