Domanda

Stiamo esaminando la stampa silenziosa di documenti PDF da Java. La stampa verrà invocata dal desktop e non attraverso un browser, quindi non possiamo usare JavaScript. PDF Renderer è una soluzione operativa ma la loro qualità di rendering non è accettabile. iText non sembra essere collegabile con il servizio di stampa Java. Ci sono alcune librerie Java commerciali, jPDFPrint di Qoppa, JPedal e ICEpdf che non abbiamo ancora provato.

Qualcuno ha esperienza con la stampa silenziosa PDF da Java?

È stato utile?

Soluzione

Apache PDFBox . È attualmente in incubazione, ma la funzionalità di stampa PDF è già esistita. Internamente, utilizza Java Print Services per creare un processo di stampa e supporta anche stampa silenziosa .

Si noti che richiede anche Fontbox e l'attuale (prossima versione 0.8.0) ha incluso un grazioso fallback per i documenti con caratteri di tipo 0. I caratteri di tipo 1 sono stampati correttamente; tuttavia, nella versione 0.7.3, i tentativi di stampare documenti con caratteri di tipo 0 comporteranno il lancio di un'eccezione.

Altri suggerimenti

Forse sto fraintendendo, ma perché non usare direttamente l'API del servizio di stampa? Per me funziona quanto segue (presuppone che tu abbia il documento PDF come array di byte):

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

Questo funziona per me:

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

Dai un'occhiata a www.pdflib.com. Il suo commerciale ma PDFlib Lite è disponibile gratuitamente per progetti open source. Ha attacchi per java.

C'è un esempio usando JPedal a http://www.jpedal.org/support_egSP.php

È necessaria la versione commerciale di IcePdf se si desidera il supporto completo dei caratteri.

Ho esperienza nel fare in modo che Acrobat (Reader o Full) esegua la stampa, ma è tutt'altro che silenzioso (è incustodito, tuttavia - dipende solo da quanto "silenzioso" sia il requisito silenzioso). Se c'è interesse, posso spararti il ??codice nativo che effettua le chiamate DDE richieste.

iText è destinato alla creazione di file PDF (per un post che ho visto dall'autore), e quindi probabilmente non è quello che vuoi.

Ho usato con successo la jPDFPrint di Qoppa proprio per questo scopo, ma non è economico. Se te lo puoi permettere, è la soluzione più robusta che ho trovato finora. Sono stato anche molto colpito dal livello di supporto; hanno anche generato un codice di esempio personalizzato per me.

Ho provato PDFBox, ma ho scoperto che non supporta " Riduci nell'area stampabile " ridimensionamento della pagina che si ottiene con Acrobat. Non tutti si preoccuperanno di questa funzione, ma è essenziale per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top