Pergunta

Estamos analisando a impressão silenciosa de documentos em PDF de dentro de Java. A impressão será invocada da área de trabalho e não através de um navegador, para que não possamos usar o JavaScript. O renderizador de PDF é uma solução operacional, mas sua qualidade de renderização não é aceitável. O iText não parece estar travável com o serviço de impressão Java. Existem algumas bibliotecas Java Commercial, JPDFPrint da QOPPA, JPEDAL e ICEPDF que ainda não experimentamos.

Alguém tem alguma experiência com a impressão silenciosa em PDF da Java?

Foi útil?

Solução

Apache pdfbox. Atualmente, está em incubação, mas a funcionalidade de impressão em PDF já existe antes disso. Internamente, ele usa os serviços de impressão Java para criar um trabalho de impressão e também suporta impressão silenciosa.

Observe que também requer o Fontbox e a atual (próxima versão 0.8.0) incluiu um fallback gracioso para documentos com fontes tipo 0. As fontes tipo 1 são impressas corretamente; No entanto, em 0,7.3, as tentativas de imprimir documentos com fontes tipo 0 resultarão em uma exceção sendo lançada.

Outras dicas

Talvez eu seja mal -entendido, mas por que não usar a API de serviço de impressão diretamente? O seguinte funciona para mim (pressupõe que você tenha o documento PDF como uma 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.");
}

Isso funciona para mim:

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

Dê uma olhada no www.pdflib.com. Seu lite comercial, mas PDFlib está disponível gratuitamente para projetos de código aberto. Possui ligações para Java.

Há um exemplo usando o jpedal em http://www.jpedal.org/support_egsp.php

Você precisará da versão comercial do ICEPDF se desejar suporte completo à fonte.

Eu tenho experiência em fazer acrobat (leitor ou cheio) fazer a impressão, mas é tudo menos silencioso (embora não seja atendido - apenas depende de quão 'silencioso' é o requisito silencioso). Se houver interesse, posso atirar no código nativo que faz as chamadas DDE necessárias.

O ITEXT destre -se à criação de arquivos PDF (de acordo com uma postagem que vi do autor) e, portanto, provavelmente não é o que você deseja.

Eu usei o JPDFPrint da QOPPA com bastante sucesso para exatamente esse fim, mas não é barato. Se você pode pagar, é a solução mais robusta que encontrei até agora. Também fiquei muito impressionado com o nível de apoio; Eles até geraram algum código de amostra personalizado para mim.

Eu tentei o PDFBox, mas descobri que ele não suporta a escala de página "encolhimento para a área imprimível" que você recebe com o Acrobat. Nem todo mundo vai se importar com esse recurso, mas é essencial para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top