Я пытаюсь печатать PDF-файлы без вывода сообщений из Java-приложения (точнее, веб-приложения J2EE).
В этом приложении я создаю 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-рендерер это работало отлично. (Шрифты также отображаются в свойствах PDF и т. Д. ...)