0

Webアプリのサーバー側で印刷するためにpdfドキュメントを送信する必要があります。プリンターはpdf印刷などを完全にサポートしており、サーバーにもネットワーク接続されています。pdfもサーバーに保存されます。

私がしようとしているのは、ボタンをクリックしてpdfファイルを印刷することです。現在、私は以下のコードを持っています:

//Server side printing
public class PrintDocument {

    public void printText(String text) throws PrintException, IOException {

        //Looks for all printers
        //PrintService[] printServices = PrinterJob.lookupPrintServices();

        PrintService service = PrintServiceLookup.lookupDefaultPrintService();
        InputStream is = new ByteArrayInputStream(text.getBytes("UTF8"));
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        pras.add(new Copies(1));

        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc doc = new SimpleDoc(is, flavor, null);
        DocPrintJob job = service.createPrintJob();

        PrintJobWatcher pjw = new PrintJobWatcher(job);
        job.print(doc, pras);
        pjw.waitForDone();
        is.close();
    }
}

class PrintJobWatcher {

    boolean done = false;

    PrintJobWatcher(DocPrintJob job) {
        job.addPrintJobListener(new PrintJobAdapter() {
            public void printJobCanceled(PrintJobEvent pje) {
                allDone();
            }

            public void printJobCompleted(PrintJobEvent pje) {
                allDone();
            }

            public void printJobFailed(PrintJobEvent pje) {
                allDone();
            }

            public void printJobNoMoreEvents(PrintJobEvent pje) {
                allDone();
            }

            void allDone() {
                synchronized (PrintJobWatcher.this) {
                    done = true;
                    System.out.println("Printing has successfully completed, please collect your prints)");
                    PrintJobWatcher.this.notify();
                }
            }
        });
    }

    public synchronized void waitForDone() {
        try {
            while (!done) {
                wait();
            }
        } catch (InterruptedException e) {
        }
    }
}

しかし、私はいくつかの質問/問題があります.pdfを入力ストリームに入れて印刷するにはどうすればよいですか?両面印刷などのオプションを選択できますか?JSF Webアプリ内からこれを呼び出すにはどうすればよいですか?

ありがとう

4

3 に答える 3

0

このブログを見てください。両面印刷オプションを使用してドキュメントを印刷する必要がありました。Javaで直接両面印刷することはできません。ただし、回避策としては、ghostscript を使用して PDF を PS (ポスト スクリプト ファイル) に変換します。これに、PJL コマンドまたは Post スクリプト コマンドのいずれかを追加できます。

詳細はこちら

http://reddymails.blogspot.com/2014/07/how-to-print-documents-using-java-how.html

同様の質問も読んでください

javax.print ライブラリを使用して属性 (トレイ制御、両面印刷など) を指定して印刷する

于 2015-01-24T03:42:51.847 に答える
0

この記事によると、 PJLブロック (ウィキペディアのリンクには PJL リファレンス ドキュメントへのポインタが含まれています) とそれに続く PDF データを使用して印刷ジョブを開始できるはずです。

PJL のおかげで、両面印刷など、プリンターが提供するすべての機能を制御できるはずです。ブログ記事では、2 つの PDF を組み合わせて印刷した場合のステープルについても言及しています。

記事のコメントも必ず読んでください。特許の発明者として記載されている人物からのコメントと、PJL コマンドに関する追加情報があります。

于 2013-02-06T23:57:21.987 に答える