PDF Renderer портит мои PDF-файлы?

Я пытаюсь беззвучно печатать файлы 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 и т. Д. ...)


person fgysin    schedule 16.12.2009    source источник


Ответы (1)


Может быть, iText создает PDF-файлы, несовместимые с вашим средством визуализации? Вы проверили, какую версию PDF он создает? Может можно указать более старую версию?

person Martin Wickman    schedule 16.12.2009
comment
Я не верю, что проблема в этом. Все файлы, которые я пытался распечатать, имеют версию PDF-1.4. - person fgysin; 16.12.2009