Проблема с масштабированием изображения FOP в Java

Итак, вот моя проблема:

Мы используем FOP для создания «красивого» вывода отчета. Мы используем параметр pdf, если пользователю нужен файл, AWT для предварительного просмотра и параметр -print для их печати. Мы используем FOP 0.25.x, который, как я полностью понимаю, не является самой новой версией, но обновление до 0.95 кажется нетривиальной задачей, которую я не обязательно хочу выполнять.

Во всяком случае, один из наших пользователей заметил, что при печати удостоверений личности (сгенерированных с помощью опции FOP -print) на принтере удостоверений личности изображения на карточках (изображения сотрудников) имели некоторые повреждения... как зеленые и красные точки и линии. Мы также обнаружили, что если мы отправляем точно такой же запрос на печать на один из наших цветных лазерных принтеров HP, он печатает нормально. Чтобы добавить к странности, если мы используем FOP для создания PDF-файла удостоверения личности, а затем распечатываем его через Acrobat Reader на карточном принтере, он печатается нормально.

В конце концов я обнаружил, что это как-то связано с масштабированием изображений... мы масштабировали изображения высотой 600 пикселей примерно до 120 пикселей. Если я уменьшал размер изображений, даже просто уменьшая их вдвое, искажение заметно уменьшалось. Точно так же, когда я увеличивал изображения, коррупция увеличивалась.

Итак, мой вопрос: кто-нибудь знает, что здесь происходит? Или когда-нибудь сталкивался с таким?

Поскольку я не знаю, почему это происходит, я не знаю, как исправить основную причину, но я работал над некоторыми различными обходными путями:

1) Используйте FOP для создания PDF-файла изображения, а затем распечатайте его через Java. Это кажется очевидным ответом, но некоторые поиски в Google показали, что печать PDF-файла через Java нетривиальна. Я видел проект PDF Renderer на java.net, но он кажется довольно громоздким для одного очень конкретного приложения.

2) Попробуйте изменить размер изображения, прежде чем отдать его в FOP. Это также казалось довольно простым, однако наши различные пользователи могут настраивать таблицы стилей для этих удостоверений личности, как они хотят, и использование в них размеров «pt» и «in» кажется довольно распространенным... Я не знаю ни одного хорошего способа сопоставьте это с изменением размера пикселя.

Если у кого-то есть понимание первопричины, способов заставить эти обходные пути работать и / или другая идея, вы будете в моем долгу.


person Morinar    schedule 07.05.2009    source источник


Ответы (2)


Наиболее достоверное объяснение:
повреждение изображения? это ошибка.

Почему бы не использовать 0,95? Рано или поздно вам придется обновиться, консорциум Apache не будет исправлять ошибки в версиях 0.25.x.

Вы не можете надеяться найти обходные пути для всех ошибок, которые могут возникнуть в будущем.

person ivan_ivanovich_ivanoff    schedule 07.05.2009
comment
Причина отказа от обновления заключается в том, что в более новых версиях программного обеспечения мы используем совершенно другой инструмент (на основе C#, не могу вспомнить какой), поэтому нам действительно никогда не понадобится обновлять его... особенно из-за того, как многое изменилось с 0,25 до 0,95. - person Morinar; 08.05.2009

В итоге я сделал вторую вещь, которую я упоминаю в исходном вопросе... т.е. изменить его размер, прежде чем передать его в FOP. Я обнаружил, что могу получить dpi принтера, на который я печатал, и выполнить некоторые математические операции, чтобы получить размер в пикселях. Кажется, во всех моих тестах работает отлично ... не настоящее решение, а адекватный обходной путь.

person Morinar    schedule 08.05.2009