Я пытаюсь беззвучно печатать файлы PDF из приложения Java (точнее, J2EE Webapp).
В этом приложении я создаю файлы PDF с помощью iText. Создаваемые файлы представляют собой шаблоны писем, каждая из которых состоит ровно из одной страницы.
Для рендеринга и распечатки этих PDF-файлов я попытался использовать библиотеку pdf-renderer. (См. Здесь: https://pdf-renderer.dev.java.net/)
Я нашел полезный пример кода по адресу http://juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/ и действительно, вскоре я смог напечатать первый документ с моей рабочей машины.
Но теперь самое забавное:
После печати каждый из PDF-файлов как-то облажался. Он все еще читался и все такое, но все форматирование было немного сумасшедшим. Линейные тормоза там, где их не должно быть, артефакты ошибок в изображении, разделение текста внезапно становится длиннее или короче, как предполагалось ...
Кроме того, то, что было напечатано, также было этой «взломанной» версией ... Так что, я думаю, ошибка должна быть где-то в процессе рендеринга.
Это исходный код, отвечающий за весь процесс рендеринга и печати:
File f = this.file; //This accesses the created PDF file
FileInputStream fis = new FileInputStream(f);
FileChannel fc = fis.getChannel();
ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
PDFPrintPage pages = new PDFPrintPage(pdfFile);
// Create Print Job
PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
pjob.setJobName(f.getName());
Book book = new Book();
book.append(pages, pf, pdfFile.getNumPages());
pjob.setPageable(book);
Еще один интересный факт: зависание PDF происходит только с созданными документами iText PDF. Если я попытаюсь напечатать какой-нибудь другой случайный PDF-файл, он не будет искажен.
Есть идеи о том, в чем может быть проблема? И как рендеринг вообще может повлиять на мои PDF-файлы? Насколько я понимаю этот исходный код, режим READ_ONLY должен предотвращать именно это ...
РЕДАКТИРОВАТЬ: Я только что увидел, что печать PDF-файла, созданного с помощью iText, также удаляет встроенные шрифты. Опять же, перед рендерингом / печатью через pdf-renderer это работало отлично. (Шрифты также отображались в свойствах PDF и т. Д. ...)