2009-05-07 11 views
0

Okay, also hier ist mein Problem:Problem mit FOP Bildskalierung in Java

Wir verwenden FOP für die Erstellung "hübsch" Berichtausgabe. Wir verwenden die Option pdf, wenn der Benutzer eine Datei wünscht, AWT für die Vorschau und die Option -print zum Drucken. Wir verwenden FOP 0.25.x, was ich vollständig erkenne, ist nicht die neueste Version, aber ein Upgrade auf 0.95 scheint eine nicht-triviale Aufgabe zu sein, die ich nicht unbedingt durchführen möchte.

Wie auch immer, es wurde von einem unserer Benutzer bemerkt, dass beim Drucken von ID-Karten (generiert über FOP-print-Option) auf den Ausweisdrucker die Bilder auf den Karten (Bilder der Angestellten) etwas Korruption hatten. ..sort von ähnlich wie grün und rot Punkte und Linien. Wir haben auch festgestellt, dass, wenn wir die exakt gleiche Druckanforderung an einen unserer HP Farblaserjets gesendet haben, dieser einwandfrei gedruckt wurde. Wenn wir FOP verwenden, um eine PDF-Datei der ID-Karte zu erstellen und sie dann über den Acrobat-Reader auf dem Kartendrucker zu drucken, wird die Druckausgabe einwandfrei ausgeführt.

Ich entdeckte schließlich, dass es etwas mit der Skalierung der Bilder zu tun hatte ... wir skalierten 600px hohe Bilder auf etwas wie 120px. Wenn ich die Bilder herunterskalierte, sie sogar halbierte, ging die Korruption merklich zurück. Wenn ich die Bilder vergrößerte, ging die Korruption in die Höhe.

Also meine Frage: Hat jemand eine Idee, was hier los ist? Oder ist so etwas jemals passiert?

Da ich weiß nicht, warum dies geschieht, weiß ich nicht, wie die Ursache zu beheben, aber ich habe durch einige verschiedene Abhilfen gearbeitet:

1) Verwenden FOP ein PDF erstellen des Bildes und drucken Sie das dann über Java. Dies scheint eine naheliegende Antwort zu sein, aber etwas Googeln hat gezeigt, dass das Drucken eines PDFs über Java nicht trivial ist. Ich habe das PDF-Renderer-Projekt auf java.net gesehen, scheint aber für eine einzelne, sehr spezifische Anwendung ziemlich umfangreich zu sein.

2) Versuchen Sie die Größe der Bilder zu ändern, bevor Sie sie an FOP übergeben. Dies schien auch ziemlich einfach, aber unsere verschiedenen Benutzer können Stylesheets für diese ID-Karten einrichten, wie sie wollen, und die Verwendung von "pt" und "in" Sizing in ihnen scheint ziemlich üblich zu sein ... Ich kenne keinen guten Weg dazu Ordnen Sie das einem Pixel zu, wenn Sie die Größe ändern.

Wenn jemand einen Einblick in die Grundursache, Möglichkeiten, diese Work arounds funktionieren, und/oder eine andere Idee, Sie würde in meiner Schuld sein.

Antwort

0

Ich endete mit der zweiten Sache, die ich in der ursprünglichen Frage erwähnt ... d. Größe ändern, bevor Sie es FOP geben. Ich stellte fest, dass ich die dpi des Druckers, auf dem ich gedruckt hatte, abrufen konnte, und berechnete etwas, um die Größe des Pixels zu bestimmen. Scheint perfekt in all meinen Tests zu funktionieren ... keine richtige Lösung, aber eine angemessene Lösung.

0

Die meisten bestimmten Erklärung:
Bild Korruption? Es ist ein Fehler.

Warum nicht 0,95 verwenden? Früher oder später müssen Sie upgraden, Apache-Konsortium wird nicht Bugs in 0.25.x-Versionen beheben.

Sie können nicht hoffen, Workarounds für alle Fehler zu finden, die in Zukunft auftreten könnten.

+0

Der Grund, nicht zu aktualisieren, ist, dass wir in den neueren Versionen der Software ein anderes Tool verwenden (C# basiert, kann mich nicht erinnern, welches), also werden wir wirklich nie dieses Upgrade durchführen müssen ... besonders aufgrund dessen, wie viel von 0,25 auf 0,95 geändert wurde. – Morinar