3

Java アプリケーションを使用して PDF ファイルを印刷する必要があります。私はそのようなアプローチを試みました:

FileInputStream psStream = new FileInputStream("<path to file>");
PrintService service = getPrinterByName("some printer name");
if (service != null) {
    DocPrintJob printJob = service.createPrintJob();
    Doc document = new SimpleDoc(psStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
    try {
        printJob.print(document, null);
    } catch (PrintException e) {
        e.printStackTrace();
    }
}

private PrintService[] getPrintersList() {
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);

    return services;
}

private PrintService getPrinterByName(String name) {
    PrintService[] list = getPrintersList();
    if (list.length > 0) {
        for (PrintService service : list) {
            if (service.getName().contains(name)) {
                return service;
            }
        }
    }
    return null;
}

これを偽のプリンター (プリンターとして PDFCreator を使用) でテストしたところ、すべて問題ありませんでしたが、実際のプリンターで印刷しようとしても何も起こりませんでした。

次に、PDFBoxを使用しました。ドキュメントが印刷されましたが、単語と単語の間に奇妙な点があり、あるべきではない場所にありました。

では、Java アプリケーションから PDF を印刷した経験があり、この情報を共有できる人がいるでしょうか?

4

1 に答える 1

1

PDF ファイルをプリンターに直接送信することは、ネイティブで PDF 形式をサポートするプリンターでのみ機能します。これは、どの仮想 PDF プリンターでもサポートされますが、ほとんどのハードウェア プリンターではサポートされません。PDF ファイルを確実に印刷するには、ライブラリを使用してそのコンテンツをプリンターにレンダリングする必要があります。

次に、SO のこの質問を見てください:
どの Java ベースの PDF レンダリング ライブラリを印刷に使用する必要がありますか?

更新: 上記のリンクは壊れていますが、Google 検索を行う以外に代わりはありません。残念ながら、スタック オーバーフローの所有者は、ライブラリの推奨事項に関する質問は歓迎されないと判断しました。

于 2012-09-11T14:18:58.677 に答える