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

Добре, ето го моят проблем:

Ние използваме FOP за създаване на "красив" отчет. Използваме опцията pdf, ако потребителят иска файл, AWT за предварителен преглед и опцията -print за отпечатването им. Използваме FOP 0.25.x, за който напълно разбирам, че не е най-новата версия, но надграждането до 0.95 изглежда нетривиална задача, която не искам непременно да предприема.

Както и да е, беше забелязано от един от нашите потребители, че при отпечатването на лични карти (генерирани чрез FOP -опция за печат) на принтера за лични карти, изображенията на картите (снимки на служителите) са имали известна повреда в тях... нещо като като зелени и червени точки и линии. Открихме също, че ако изпратим точно същата заявка за печат до един от нашите цветни лазерни принтери на HP, тя се отпечатва добре. За да добавим към странността, ако използваме FOP, за да създадем PDF на личната карта и след това да го отпечатаме чрез acrobat reader на принтера за карти, той се отпечатва добре.

В крайна сметка открих, че има нещо общо с мащабирането на изображенията...мащабирахме изображения с височина 600px до нещо като 120px. Ако намалях изображенията, дори само да ги наполовина, повредата намаля значително. По същия начин, когато увеличих изображенията, корупцията се увеличи.

Та въпросът ми: някой има ли идея какво става тук? Или някога се е сблъсквал с подобно нещо?

Тъй като не знам защо се случва това, не знам как да поправя основната причина, но работих чрез някои различни решения:

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