2013-05-01 3 views
7

Bei einigen Druckern werden die Ausdrucke aus irgendeinem Grund beim Drucken über die Java JVM (Java 7) automatisch um die Standardeinstellungen erweitert. Dies scheint bei älteren Druckern zu sein, und es ist ziemlich selten, aber es passiert mit mehr als einem Druckermodell. Auch das Aktualisieren der Treiber löst das Problem nicht.Java-Druck - Vergrößerte Ausdrucke auf einer kleinen Anzahl von Druckern

Die Software verwendet die JFreeReport (classic engine) -Bibliothek, und wenn Sie die Bibliothek zum Exportieren als PDF verwenden, ist alles hervorragend. Auch die Druckvorschau mit der Bibliothek ist perfekt. Wenn es jedoch um das Drucken geht, und dies nur mit einer sehr kleinen Anzahl von Druckern, werden die Ausdrucke vergrößert. Sie werden nicht herangezoomt, aber die Schriftarten sind viel größer und nicht richtig beabstandet, so dass sie sich gegenseitig überlappen.

Die gleichen Drucker mit JDK 6 scheinen gut zu funktionieren. Scheint, ich versuche immer noch, das Problem zu isolieren. Mein Gedanke ist, dass möglicherweise diese Drucker Java 7

nicht unterstützen. Update: Ich fand this thread which seems to indicate that there are some issues with JDK 7u21. Ich habe in den Versionshinweisen nichts gesehen, um dieses Problem anzugehen. Außerdem ist hier another example of the a similar bug report.

Update2: Für jeden interessierten, schrieb ich einen Blog-Eintrag namens Printing is Broken on Mac OS X with Java 7 über dieses Problem, das mehr Details und was ich entdeckt hatte.

+0

Vorerst eine temporäre Datei Ich erstelle und dann "lp tempFile.pdf" aufrufen, aber das ist nicht ideal, da angenommen wird, dass der Standarddrucker der richtige ist. Es muss eine Lösung geben. Ich kann nicht glauben, dass Oracle und Apple diesen grellen Fehler seit Monaten verlassen haben. Dies ist für viele Anwendungen sehr wichtig !!! –

Antwort

0

Offenbar gibt es keine Lösung. Das Problem besteht darin, dass die von der JVM festgelegten Schriftattribute vom Mac OS als reported in this bug report und this bug report ignoriert werden.

Die einzige Lösung ist eine temporäre Datei zu erstellen und drucken Sie es dann unter Verwendung:

try 
{ 
    Process process = Runtime.getRuntime().exec(new String[]{"lp", tempFileFullPath}); 
    process.waitFor(); 
} catch (Exception e) { 
    // error handling 
} 

Natürlich ist dies in einem Thread oder durch SwingUtils feuert abhängig werden kann, wenn Sie eine GUI-Anwendung haben, aber es ist der einzige Weg, der zu dieser Zeit möglich ist.

2

Dies ist ein known bug leider. Zwar gibt es ein paar Problemumgehungen (die in Ihren Links erwähnte symmetrische Druckauflösung, die Umwandlung in ein gepuffertes Bild, dann das Drucken), jedoch ist mir bis jetzt keine Lösung bekannt.

Verwandte Themen