2013-05-01 212 views
7

在某些打印機上,無論出於何種原因,當通過Java JVM(Java 7)進行打印時,打印輸出會自動放大,並顯示默認設置。這似乎與較舊的打印機一樣,並且這種情況非常罕見,但是它發生在多個打印機型號上。還升級驅動程序不能解決問題。Java打印 - 在少量打印機上放大打印輸出

該軟件使用JFreeReport(經典引擎)庫,使用該庫導出爲PDF時,一切都非常好。使用該庫的打印預覽也是完美的。但是,當涉及到打印時,只有非常少量的打印機才能打印輸出。它們沒有放大,但是字體要大得多,而且間距不恰當,以致它們彼此重疊。

這些與JDK 6相同的打印機似乎工作正常。看來,我仍在試圖找出問題。我的想法是,這些打印機可能不正確支持Java 7

更新:我發現this thread which seems to indicate that there are some issues with JDK 7u21。我沒有看到發佈說明中的任何內容來解決這個問題。另外這裏是another example of the a similar bug report

Update2:對於任何有興趣的人,我寫了一篇名爲Printing is Broken on Mac OS X with Java 7的博客文章,其中包含更多細節和我發現的內容。

+0

現在我創建一個臨時文件,然後調用「lp tempFile.pdf」,但這並不理想,因爲它假設默認打印機是正確的。必須有一個解決方案。我無法相信甲骨文和蘋果已經連續數月都沒有留下這個重大的問題。這對於很多應用程序來說是至關重要的! – 2013-05-27 02:12:55

回答

0

顯然沒有解決方案。問題是由Mac OS設置的JVM設置的字體屬性被忽略爲reported in this bug reportthis bug report

唯一的解決方法是創建一個臨時文件,然後使用打印:

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

當然,這可以在一個線程中或通過取決於如果您有一個GUI應用程序SwingUtils被解僱了,但它的這是唯一可行的方法。

2

這是一個可悲的known bug。雖然有幾個解決方法(在您的鏈接中提到的對稱打印分辨率,轉換爲bufferedimage,然後打印),我還沒有意識到任何修復。