Java Print API - неправильно напечатанный символ пробела с использованием моноширинного шрифта 'Courier New' - PullRequest
6 голосов
/ 05 января 2012

Позвольте мне сначала описать картинку ниже:

  • Есть две печатные работы.Единственная разница между ними состоит в том, что несколько пробелов "" символы из бумаги слева заменяются точкой "."символ в документе справа.
  • Красная линия представляет левую границу, с которой должен быть выровнен текст
  • Зеленая кривая представляет мое намерение выровнять все соединенные символы в один столбец.На самом деле зеленая кривая должна быть вертикальной линией.

enter image description here

Я хочу, чтобы все символы, выделенные зеленой линией, печатались в одном столбце.

Шрифт строки моноширинный Courier New.Однако, похоже, что пробельные символы не печатаются как моноширинные (см. «Пунктирные» строки против строк с пробелами в начале).

Для печати строки я использую стандартный Java Print Service API через компонент JTextPane:

PrinterJob pj = PrinterJob.getPrinterJob(); 
pj.setPrintable(myTextPane);
pj.print();

Насколько мне известно, API службы печати Java фактически вызывает методы paint () myTextPane.Поэтому предварительный просмотр должен выглядеть точно так же, как печатная версия String.

Однако это не так.Предварительный просмотр, по-видимому, не интерпретирует моноширинные космические символы (см. Последнюю картинку).Предварительный просмотр выглядит точно так, как я хочу, чтобы текст печатался.

enter image description here

Есть ли какие-либо предложения, как заставить JavaPrintServiceAPI правильно печатать символы пробела?

1 Ответ

1 голос
/ 07 января 2012

Не думаю, что это можно исправить в API печати. ​​

Сначала разделите каждую строку после «зеленой» цифры на левую и (возможно, пустую) правую подстроку.

В вашем JTextArea используйте align для выравнивания таблицы HTML с двумя столбцами, как описано в Как использовать HTML в компонентах Swing .

Какальтернатива JTextPane, используйте GridLayout из JLabel.Дайте левому столбцу RIGHT_ALIGNMENT и правому столбцу LEFT_ALIGNMENT.

Двухстолбцовый JTable, который использует JLabel для рендеринга, может быть третьей альтернативой.Подробнее см. Как использовать таблицы - Основные понятия: редакторы и средства визуализации .

...