簡體   English   中英

為什么使用相同的頁碼多次調用java Printable的print方法?

[英]Why does the java Printable's print method get called multiple times with the same page number?

來自sun的文檔

“在移動到下一頁之前,打印系統可能會要求多次渲染頁面。”

示例總是顯示如下:

Printable print(Graphics g, PageFormat pageFormat, int page) {
    if (page == 0)
      do...
    else if(page == blah...)
}

如果您遵循此模式,您的代碼通常可以正常工作,因為它是基於頁碼顯式的。 不遵循這種模式給我帶來了巨大的痛苦,直到我意識到它被多次調用相同的頁碼並開始緩存頁面。

為什么使用相同的頁碼多次調用java Printable的print方法?

Java打印系統受底層OS打印系統的支配,並且該系統可以請求多次呈現單個頁面。

一個原因是帶狀打印 - 如果打印機沒有足夠的內存來一次呈現整個頁面 - 在這種情況下,操作系統將再次向Java請求頁面,以便它可以打印帶狀頁面(“帶”) )。 這是Java 2D程序員指南中“ 打印概念 ”一節中提到的特定情況。

可能還有其他原因; 它真的取決於操作系統的打印系統。

它可能有很多原因。

根據底層打印系統,它可能希望“預先”計算某些屬性(例如:頁面范圍,墨水使用等),而不必緩沖整個文檔。

而且,某些打印系統是“基於帶”的,而不是基於頁面的。 例如,噴墨打印機將一次打印出一個水平條帶的柵格數據。 Java打印系統可以一次僅緩沖幾個頻段(或者甚至可能只緩沖一個頻段),而不是緩沖頁面的光柵數據(600dpi美國字母頁面大約100MB)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM