Тихая печать PDF изнутри Java - PullRequest
13 голосов
/ 11 сентября 2009

Мы ищем тихую печать документов PDF изнутри Java. Печать будет вызываться с рабочего стола, а не через браузер, поэтому мы не можем использовать JavaScript. PDF Renderer - это оперативное решение, но качество его рендеринга неприемлемо. Похоже, что iText не подключается к сервису печати Java. Существует несколько коммерческих библиотек Java, jPDFPrint от Qoppa, JPedal и ICEpdf, которые мы еще не опробовали.

Кто-нибудь имеет опыт работы с PDF-печатью без вывода сообщений на Java?

Ответы [ 7 ]

11 голосов
/ 11 сентября 2009

Apache PDFBox . В настоящее время он находится в стадии инкубации, но до этого функционал печати PDF уже существовал. Внутренне он использует Java Print Services для создания задания на печать, а также поддерживает печать без вывода сообщений .

Обратите внимание, что для него также требуется Fontbox, и в текущую версию (готовящийся к выпуску 0.8.0) добавлен изящный откат для документов со шрифтами типа 0. Шрифты типа 1 напечатаны правильно; однако в 0.7.3 попытки печати документов со шрифтами типа 0 приведут к исключению.

2 голосов
/ 10 мая 2012

Это работает для меня:

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.");
    }       
}
2 голосов
/ 11 сентября 2009

Может быть, я неправильно понимаю, но почему бы просто не использовать API службы печати напрямую? Следующее работает для меня (предполагается, что у вас есть PDF-документ в виде байтового массива):

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.");
}
0 голосов
/ 01 июня 2010

iText предназначен для создания PDF-файлов (согласно сообщению, которое я видел у автора), и поэтому, вероятно, не то, что вам нужно.

Я достаточно успешно использовал jPDFPrint от Qoppa именно для этой цели, но это не дешево. Если вы можете себе это позволить, это самое надежное решение, которое я когда-либо нашел. Я также был очень впечатлен уровнем поддержки; они даже сгенерировали некоторый пользовательский пример кода для меня.

Я пробовал PDFBox, но обнаружил, что он не поддерживает масштабирование страницы «Сжать в область печати», которое вы получаете с помощью Acrobat. Не все будут заботиться об этой функции, но она важна для меня.

0 голосов
/ 12 сентября 2009

У меня есть опыт в том, чтобы Acrobat (Reader или Full) выполнял печать, но это совсем не тихо (хотя и без присмотра - зависит только от того, насколько «тихо» требование молчания). Если есть интерес, я могу снять вам нативный код, который делает необходимые вызовы DDE.

0 голосов
/ 11 сентября 2009

Есть пример использования JPedal на http://www.jpedal.org/support_egSP.php

Вам понадобится коммерческая версия IcePdf, если вам нужна полная поддержка шрифтов.

0 голосов
/ 11 сентября 2009

Взгляните на www.pdflib.com. Его коммерческий, но PDFlib Lite доступен бесплатно для проектов с открытым исходным кодом. У него есть привязки для Java.

...