Question

Nous examinons l’impression silencieuse de documents PDF à partir de Java. L'impression sera appelée à partir du bureau et non via un navigateur, nous ne pouvons donc pas utiliser JavaScript. PDF Renderer est une solution opérationnelle mais leur qualité de rendu n'est pas acceptable. iText ne semble pas pouvoir être connecté au service d'impression Java. Il existe certaines bibliothèques Java commerciales, jPDFPrint de Qoppa, JPedal et ICEpdf, que nous n'avons pas encore testées.

Quelqu'un at-il une expérience de l'impression silencieuse de fichiers PDF à partir de Java?

Était-ce utile?

La solution

Apache PDFBox . Il est actuellement en incubation, mais la fonctionnalité d'impression PDF existait déjà auparavant. En interne, il utilise les services d'impression Java pour créer un travail d'impression. Il prend également en charge impression silencieuse .

Notez qu'il nécessite également Fontbox et que la version actuelle (à venir, la version 0.8.0) inclut un retour en arrière harmonieux pour les documents contenant des polices Type 0. Les polices de type 1 sont imprimées correctement. Cependant, dans la version 0.7.3, les tentatives d’impression de documents avec des polices de type 0 entraîneront la génération d’une exception.

Autres conseils

Peut-être que je ne comprends pas bien, mais pourquoi ne pas simplement utiliser l'API du service d'impression directement? Ce qui suit fonctionne pour moi (en supposant que le document PDF soit un tableau d'octets):

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

Cela fonctionne pour moi:

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

Consultez le site www.pdflib.com. Son format commercial mais PDFlib Lite est disponible gratuitement pour les projets open source. Il a des liaisons pour Java.

Un exemple utilisant JPedal est disponible à l'adresse http://www.jpedal.org/support_egSP.php

Vous aurez besoin de la version commerciale de IcePdf si vous souhaitez une prise en charge complète des polices.

J'ai l'habitude d'imprimer à Acrobat (Reader ou Full), mais c'est tout sauf silencieux (cela dépend toutefois du degré de silence de l'exigence silencieuse). Si cela vous intéresse, je peux vous lire le code natif qui effectue les appels DDE requis.

iText est destiné à la création de fichiers PDF (d'après un message que j'ai vu de l'auteur) et n'est donc probablement pas ce que vous voulez.

J’ai utilisé jPDFPrint de Qoppa avec succès dans ce but, mais ce n’est pas donné. Si vous pouvez vous le permettre, c'est la solution la plus robuste que j'ai trouvée jusqu'à présent. J'ai également été très impressionné par le niveau de soutien; ils ont même généré pour moi un exemple de code personnalisé.

J’ai essayé PDFBox, mais j’ai constaté qu’il ne supportait pas l'option "Réduire vers la zone imprimable". mise à l'échelle que vous obtenez avec Acrobat. Cette fonctionnalité ne préoccupe pas tout le monde, mais elle est essentielle pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top