Pregunta

Estamos investigando la impresión silenciosa de documentos PDF desde Java. La impresión se invocará desde el escritorio y no a través de un navegador, por lo que no podemos usar JavaScript. PDF Renderer es una solución operativa, pero su calidad de representación no es aceptable. iText no parece ser conectable con el servicio de impresión de Java. Hay algunas bibliotecas comerciales de Java, jPDFPrint de Qoppa, JPedal e ICEpdf que aún no hemos probado.

¿Alguien tiene alguna experiencia con la impresión silenciosa de PDF desde Java?

¿Fue útil?

Solución

Apache PDFBox . Actualmente está en incubación, pero la funcionalidad de impresión de PDF ha existido antes de eso. Internamente, utiliza los Servicios de impresión de Java para crear un trabajo de impresión, y también admite impresión silenciosa .

Tenga en cuenta que también requiere Fontbox, y que la versión actual (próxima versión 0.8.0) ha incluido el respaldo elegante para documentos con fuentes de tipo 0. Las fuentes de tipo 1 se imprimen correctamente; sin embargo, en 0.7.3, los intentos de imprimir documentos con fuentes Tipo 0 darán como resultado una excepción.

Otros consejos

Tal vez no entiendo bien, pero ¿por qué no usar la API del servicio de impresión directamente? Lo siguiente funciona para mí (asume que tienes el documento PDF como una matriz de bytes):

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

Esto funciona para mí:

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

Echa un vistazo a www.pdflib.com. Su versión comercial, pero PDFlib Lite está disponible de forma gratuita para proyectos de código abierto. Tiene enlaces para java.

Hay un ejemplo que utiliza JPedal en http://www.jpedal.org/support_egSP.php

Necesitará la versión comercial de IcePdf si desea soporte completo de fuentes.

Tengo experiencia en hacer que Acrobat (Reader o Full) haga la impresión, pero es todo menos silencioso (sin embargo, está desatendido, solo depende de qué tan silencioso sea el requisito). Si hay interés, puedo dispararle el código nativo que hace las llamadas DDE requeridas.

iText está diseñado para crear archivos PDF (por una publicación que vi del autor) y, por lo tanto, probablemente no sea lo que quieres.

He usado jPDFPrint de Qoppa con bastante éxito para este propósito, pero no es barato. Si puedes pagarlo, es la solución más robusta que he encontrado hasta ahora. También me ha impresionado mucho el nivel de apoyo; incluso generaron un código de muestra personalizado para mí.

Probé PDFBox, pero descubrí que no es compatible con la opción "Reducir al área de impresión". escala de página que se obtiene con Acrobat. No todos se preocuparán por esta característica, pero es esencial para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top