質問

Java内からのPDFドキュメントのサイレント印刷を検討しています。印刷はブラウザではなくデスクトップから呼び出されるため、JavaScriptを使用できません。 PDFレンダラーは運用上のソリューションですが、そのレンダリング品質は受け入れられません。 iTextはJava印刷サービスとプラグインできないようです。いくつかの商用Javaライブラリ、QoppaによるjPDFPrint、JPedal、およびまだ試していないICEpdfがあります。

JavaからのPDFサイレント印刷の経験はありますか?

役に立ちましたか?

解決

Apache PDFBox 。現在インキュベーション中ですが、PDF印刷機能はその前にありました。内部的には、Java印刷サービスを使用して印刷ジョブを作成し、サイレント印刷

Fontboxも必要であり、現在の(今後の0.8.0リリース)には、Type 0フォントを持つドキュメントの適切なフォールバックが含まれていることに注意してください。タイプ1フォントは正しく印刷されます。ただし、0.7.3では、タイプ0フォントでドキュメントを印刷しようとすると、例外がスローされます。

他のヒント

私は誤解しているかもしれませんが、Print Service APIを直接使用しないのはなぜですか?私には次のように動作します(PDFドキュメントをバイト配列として持っていると仮定します):

DocFlavor flavor = DocFlavor.BYTE_ARRAY.PDF;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
if (services.length > 0)
{
    DocPrintJob printJob = services[0].createPrintJob();
    Doc document = new SimpleDoc(pdfBytes, flavor, null)
    printJob.print(document, null);
}
else
{
    System.out.println("No PDF printer available.");
}

これは私のために働く:

public void print() {
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
    FileInputStream psStream = null;  
    try {  
        psStream = new FileInputStream("c:\\test.pdf");  
        } catch (FileNotFoundException ffne) {  
          ffne.printStackTrace();  
        }  
    if (psStream == null) {  
        return;  
    }       
    if (services.length > 0)
    {
        PrintService myService = null;
        for(PrintService service : services) {
            System.out.println(service.getName());
            if(service.getName().contains("my printer")) {
                myService = service;
                break;
            }
        }
        DocPrintJob printJob = myService.createPrintJob();
        Doc document = new SimpleDoc(psStream, flavor, null);
        try {
            printJob.print(document, null);
        } catch (PrintException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    else
    {
        System.out.println("No PDF printer available.");
    }       
}

www.pdflib.comをご覧ください。商用ですが、PDFlib Liteはオープンソースプロジェクトで無料で利用できます。 javaのバインディングがあります。

JPadalを使用した例が http://www.jpedal.org/support_egSP.php <にあります

完全なフォントサポートが必要な場合は、IcePdfの商用バージョンが必要になります。

Acrobat(ReaderまたはFull)に印刷を行わせた経験はありますが、それはサイレント以外の何物でもありません(ただし、無人です-サイレント要件がどの程度「サイレント」であるかに依存します)。興味があれば、必要なDDE呼び出しを行うネイティブコードを撮影できます。

iTextは、PDFファイルを作成することを目的としており(著者から見た投稿ごと)、おそらくあなたが望むものではありません。

この目的のためにQoppaのjPDFPrintを非常にうまく使用しましたが、安くはありません。余裕があれば、これは私がこれまでに見つけた最も堅牢なソリューションです。サポートのレベルにも非常に感銘を受けました。いくつかのカスタムサンプルコードも生成してくれました。

PDFBoxを試しましたが、「印刷可能領域に縮小」をサポートしていないことがわかりました。 Acrobatで得られるページスケーリング。誰もがこの機能を気にするわけではありませんが、それは私にとって不可欠です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top