У меня есть пользовательский отчет, который рисует через Graphics2D
и использует множество крошечных BufferedImage
спрайтов. PrinterJob.print()
, кажется, вызывает Printable.print()
примерно один раз для каждого спрайта (фактическое число может варьироваться в обоих направлениях), поэтому некоторые страницы перерисовываются 150 раз ... Это приводит к недопустимо медленной печати, около 10 секунд для двух стр.
Я нашел это: Почему метод печати java Printable вызывается несколько раз с одним и тем же номером страницы?
Но, похоже, это не объясняет мою конкретную проблему (или объясняет только частично). Я создал отчет об испытаниях, который имеет только несколько спрайтов, и было небольшое количество изменений размера, которые увеличивались и уменьшались при добавлении и удалении изображений по вертикальной или горизонтальной осям.
При печати в PDF с использованием Bullzip я заметил, что после увеличения изображений они масштабируются с использованием билинейного или бикубического алгоритма. Одно из этих изображений, которое уникально тем, что имеет индексированную цветовую палитру, не масштабируется. Я подтвердил, что масштабирование является поведением Java и не выполняется Bullzip, печатая на реальном принтере и наблюдая, как масштабируются те же изображения, а не как нет.
Таким образом, мне кажется, что API печати пытается изменить масштаб изображения до того значения DPI, которое он имеет в виду, но по какой-то причине он вызывает Printable.print()
каждый раз, когда сталкивается с изображением, которое, по его мнению, нуждается в этой обработке.
Как мне исправить это поведение? Я попытался установить подсказки рендеринга для Graphics2D
, которые я получаю при вызове Printable.print()
, но безрезультатно. Я не знаю, что еще делать, если не попытаться найти и изучить исходный код API печати.