PDF -рендерин, облажающийся в PDF -файлах?
Вопрос
Я пытаюсь молчать файлы PDF -файла из приложения Java (более конкретно j2ee webapp).
В этом приложении я создаю PDF -файлы с ITEXT. Составленные файлы - это буквы формы, каждая из которых состоит из ровно одной страницы.
Чтобы отобразить и распечатать эти файлы PDF, я попытался использовать библиотеку PDF-Renderer. (Глянь сюда: https://pdf-derender.dev.java.net/ )
Я нашел какой -то полезный пример кода в http://juixe.com/techcown/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 должен предотвратить именно это ...
РЕДАКТИРОВАТЬ: Я только что увидел, что печать ITEXT, созданный PDF, также удаляет встроенные шрифты. Опять же, перед рендерингом/печати через PDF-Renderer работал совершенно хорошо. (Шрифты также появились в свойствах PDF и т. Д. ...)
Решение
Может быть, ITEXT создает PDF -файлы, которые не совместимы с вашим рендерером? Вы проверяли, какую PDF -версию он создает? Может быть, можно указать более старую версию?