Я изучил возможности предварительного просмотра и печати общего текста на Java. Требования, от которых я зависит:
- Я должен иметь возможность указать семейство шрифтов и размер шрифта как для компонента предварительного просмотра, так и для печатного текста.
- Предварительный просмотр должен выглядеть точно так же, как печатный текст.
- Печать должна быть независимой от устройства принтера (никаких специальных команд принтера для определения шрифтов и т. Д.).
- Печать ок. 20 страниц общего текста должны начаться немедленно (без существенной задержки, вызванной обработкой данных)
Чтобы соответствовать вышеупомянутым требованиям, я сначала попробовал API Java Print Service. Я создал JTextPane, который содержал текст для предварительного просмотра и печати. Используя JTextPane, я смог указать шрифт, чтобы результат выглядел красиво. Для печати данных из JTextPane я использовал стандартную процедуру, которая не зависит от принтера
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(myTextPane);
pj.print();
Все будет хорошо, если печать 20 страниц обычного текста не начнется через 15 секунд после выполнения метода print ().
Однако печать начинается немедленно, когда я печатаю тот же текст, что и необработанный байтовый массив ('application / octet-stream'), с несколькими специальными командами PCL, чтобы установить правильный шрифт. Но этот подход специфичен для принтера, и есть проблема с предварительным просмотром текста, так что предварительный просмотр выглядит точно так же, как печатный текст.
Проблема с JTextPane, скорее всего, вызвана тем, что данные, отправляемые на принтер, слишком велики (попиксельно), тогда как второе решение занимает несколько байтов. К сожалению, ни одно из этих решений не является достаточным для меня, потому что они не отвечают всем требованиям.
Вероятно, решение было бы, если бы существовал некоторый «фасад» над языками управления принтером (PCL, ESC / P, ...), который позволял бы мне устанавливать шрифт текста независимо от устройства принтера. Проблема с предварительным просмотром не будет решена, но, по крайней мере, печать начнется немедленно.
Какой-нибудь совет, как напечатать простой текст, не нарушая вышеупомянутые 4 критерия?