2012-01-13 52 views
1

我有一個自定義報告,它通過Graphics2D進行繪製,並使用大量微小的BufferedImage精靈。 PrinterJob.print()似乎對每個精靈大致調用了一次Printable.print()(實際的計數可能會變化),所以有些頁面會重新渲染150次......這會導致打印速度慢得令人無法接受,兩頁約爲10秒。用Java打印 - Printable.print()調整圖像大小

我發現這一點:Why does the java Printable's print method get called multiple times with the same page number?

但它似乎並沒有解釋我的具體問題(或僅部分解釋了吧)。我創建了一個只有少量精靈的測試報告,並且在垂直或水平座標軸上添加和刪除圖像時,出現了少量的調整大小。

使用Bullzip打印到PDF時,我注意到在放大圖像之後,它們使用雙線性或雙三次算法放大。這些圖像中的一個,具有索引調色板是獨一無二的,看起來並沒有縮放。我確認縮放是一種Java行爲,Bullzip不會通過打印到真實的打印機並觀察相同的圖像進行縮放而不是執行。

因此,它打擊我打印API試圖重新調整圖像到任何DPI它的想法,但由於某種原因,它每次遇到一個它認爲需要這種治療的圖像時調用Printable.print()

如何解決此問題?我試着在上設置渲染提示,當我調用Printable.print()時,得不到任何效果。我不知道還有什麼辦法可以找到並檢查打印API的源代碼。

回答

0

我想我只是偶然發現它。我剛剛修改的一個報告在某些幾何圖形上繪製了一個圖像,並且我注意到圖像框背後的幾何圖形部分被柵格化,並且與框外部相比看起來很模糊。有問題的圖像(除了一個索引的彩色圖像以外)都有一個8位的alpha通道。

我之前注意到,Java的print rasterizer不喜歡半透明的東西(使用它的一個報告被完全柵格化,我認爲是300dpi ...),但我忘記了這些圖像也有alpha通道。

當我有機會時,我可能會通過進一步增加圖像的分辨率和使用1位alpha來解決此問題。縮小屏幕查看時,它會再次顯示一些alpha值,並且看起來沒問題。