2013-05-01 15 views
7

W przypadku niektórych drukarek, z dowolnego powodu, wydruki są automatycznie powiększane, co wydaje się być domyślnymi ustawieniami podczas drukowania za pomocą Java JVM (Java 7). Wydaje się, że jest tak w przypadku starszych drukarek i jest to dość rzadkie, ale dzieje się tak z więcej niż jednym modelem drukarki. Również aktualizacja sterowników nie rozwiązuje problemu.Drukowanie w języku Java - Powiększone wydruki na małej liczbie drukarek

Oprogramowanie korzysta z biblioteki JFreeReport (klasyczne silniki), a podczas korzystania z biblioteki do eksportu jako plik PDF wszystko działa świetnie. Również podgląd wydruku przy użyciu biblioteki jest doskonały. Jednak jeśli chodzi o drukowanie, a dotyczy to tylko bardzo małej liczby drukarek, wydruki są powiększane. Nie są one powiększane, ale czcionki są znacznie większe i niepoprawnie rozmieszczone, tak aby nakładały się na siebie nawzajem.

Te same drukarki z JDK 6 wydają się działać dobrze. Wydaje się, wciąż próbuję wyizolować problem. Myślę, że prawdopodobnie te drukarki nie obsługują poprawnie Java 7

Znalazłem this thread which seems to indicate that there are some issues with JDK 7u21. W uwagach do wydania nie widziałem niczego, co mogłoby rozwiązać ten problem. Ponadto jest tutaj another example of the a similar bug report.

Update2: Dla wszystkich zainteresowanych, napisałem wpis na blogu o nazwie Printing is Broken on Mac OS X with Java 7 dotyczący tego problemu, który zawiera więcej szczegółów i informacje o tym, co odkryłem.

+0

Teraz tworzę plik tymczasowy, a następnie wywołanie "lp tempFile.pdf", ale nie jest to idealne rozwiązanie, ponieważ zakłada, że ​​domyślna drukarka jest poprawna. Musi być jakieś rozwiązanie. Nie mogę uwierzyć, że Oracle i Apple opuściły ten poważny rażący błąd przez wiele miesięcy. Jest to bardzo ważne dla wielu aplikacji !!! –

Odpowiedz

0

Najwyraźniej nie ma rozwiązania. Problem polega na tym, że atrybuty czcionek ustawione przez maszynę JVM są ignorowane przez system Mac OS jako reported in this bug report i this bug report.

Jedynym rozwiązaniem jest utworzenie pliku tymczasowego, a następnie wydrukować go za pomocą:

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

Oczywiście może to być wystrzelone w wątku lub poprzez SwingUtils zależności czy masz aplikację GUI, ale to jedynym możliwym sposobem w tym czasie.

2

Niestety jest to known bug. Chociaż jest kilka obejść (symetryczna rozdzielczość drukowania wspomniana w twoich linkach, konwersja na zbuforowany obrazek, a następnie drukowanie), nie jestem jeszcze znany z jakiejkolwiek poprawki.

Powiązane problemy