Frage

Wir suchen in den stillen Drucken von PDF -Dokumenten aus Java. Der Druck wird vom Desktop und nicht über einen Browser aufgerufen, sodass wir JavaScript nicht verwenden können. PDF -Renderer ist eine operative Lösung, aber ihre Rendering -Qualität ist nicht akzeptabel. Itext scheint mit dem Java -Druckservice nicht steckig zu sein. Es gibt einige kommerzielle Java -Bibliotheken, JPDFprint von Qoppa, Jpedal und ICEPDF, die wir noch nicht ausprobiert haben.

Hat jemand Erfahrung mit dem PDF -stillen Druck von Java?

War es hilfreich?

Lösung

Apache PDFBox. Es befindet sich derzeit in Inkubation, aber die PDF -Druckfunktionen haben es zuvor schon vorhanden. Intern werden die Java -Printdienste verwendet, um einen Druckauftrag zu erstellen, und es unterstützt auch stiller Druck.

Beachten Sie, dass auch Fontbox erforderlich ist, und der Strom (bevorstehende Veröffentlichung von 0.8.0) hat den Grapeful Fallback für Dokumente mit Typ -0 -Schriftarten enthalten. Typ -1 -Schriftarten werden korrekt gedruckt; In 0,7.3 werden jedoch Versuche, Dokumente mit Typ 0 -Schriftarten zu drucken, zu einer Ausnahme führen.

Andere Tipps

Vielleicht verstehst ich Missverständnis, aber warum nicht einfach die Print -Service -API direkt verwenden? Die folgenden Funktionen für mich (vorausgesetzt, Sie haben das PDF -Dokument als Byte -Array):

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.");
}

Das funktioniert für mich:

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.");
    }       
}

Schauen Sie sich www.pdflib.com an. Sein comercial, aber pdflib lite ist kostenlos für Open -Source -Projekte erhältlich. Es hat Bindungen für Java.

Es gibt ein Beispiel, das jpedal bei verwendet http://www.jpedal.org/support_egsp.php

Sie benötigen die kommerzielle Version von ICEPDF, wenn Sie eine vollständige Schriftunterstützung wünschen.

Ich habe Erfahrung damit, Akrobat (Leser oder voll) zu machen, aber es ist alles andere als still (es ist jedoch unbeaufsichtigt - hängt nur davon ab, wie "still" die stille Anforderung ist). Wenn es Interesse gibt, kann ich Ihnen den nativen Code aufnehmen, der die erforderlichen DDE -Anrufe erzeugt.

ITEXT ist zum Erstellen von PDF -Dateien bestimmt (gemäß einem Beitrag, den ich vom Autor gesehen habe), und daher ist es daher wahrscheinlich nicht das, was Sie wollen.

Ich habe Qoppas JPDFprint für genau diesen Zweck ziemlich erfolgreich verwendet, aber es ist nicht billig. Wenn Sie es sich leisten können, ist es die robusteste Lösung, die ich bisher gefunden habe. Ich war auch sehr beeindruckt von der Unterstützung; Sie haben sogar einen benutzerdefinierten Beispielcode für mich generiert.

Ich habe PDFbox ausprobiert, aber festgestellt, dass es nicht die Skalierung "Schrumpfung auf druckbare Bereich" unterstützt, die Sie mit Acrobat erhalten. Nicht jeder wird sich um diese Funktion kümmern, aber es ist für mich wichtig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top