То, почему делает метод печати Printable Java, называют многократно с тем же номером страницы?

Из документации солнца

"Система печати могла бы запросить, чтобы страница была представлена многократно прежде, чем переместиться в следующую страницу".

Примеры всегда показывают что-то вроде этого:

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

Если Вы следуете за этим шаблоном, Ваш код обычно хорошо работает, потому что это явно на основе номера страницы. Не после этого шаблона причинил мне большую боль, пока я не понял, что это становилось названным многократно с тем же номером страницы и начало кэшировать страницы.

То, почему делает метод печати Printable Java, называют многократно с тем же номером страницы?

11
задан dennisjtaylor 22 December 2009 в 00:48
поделиться

2 ответа

Система печати Java находится во власти базовой системы печати ОС, и эта система может запросить многократную печать одной страницы.

Одна из причин - печать в диапазоне -- если у принтера недостаточно памяти для одновременной печати всей страницы -- в этом случае ОС снова запросит Java-страницу, чтобы можно было распечатать ее полосками ("полосками"). Это конкретный случай, упомянутый в Руководстве программиста Java 2D, в разделе "Концепции печати".

Могут быть и другие причины; это действительно зависит от системы печати ОС.

.
13
ответ дан 3 December 2019 в 08:04
поделиться

Есть несколько причин, по которым он может это делать.

В зависимости от базовой системы печати он может захотеть вычислить некоторые свойства "спереди" (например: размеры страницы, использование чернил и т.д.) без необходимости буферизации всего документа.

Кроме того, некоторые системы печати "на основе полосы", а не на основе страницы. Например, струйные принтеры будут распечатывать по одному горизонтальному диапазону растровых данных за раз. Вместо буферизации растровых данных страницы (около 100 МБ для американской буквенной страницы с разрешением 600 точек на дюйм) система печати Java может буферировать только несколько полос (или, возможно, даже одну полосу) одновременно

.
2
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: