Java Print API – 使用等宽的“Courier New”字体错误地打印空格字符

我先来描述下图:

  • 有两份印刷纸。 它们之间的唯一区别是左边纸张中的空格“”字符很少被点“替换”。 右边的文字中的人物。
  • 红线表示文本应对齐的左边框
  • 绿色曲线表示我打算将它连接的所有字符对齐到一个列中。 事实上,绿色曲线应该是一条垂直线。

在此处输入图像描述

我希望绿线突出显示的所有字符都打印在一列中。

String的字体是monospaced Courier New。 但是,似乎空格字符不会打印为等宽字体(请参阅“虚线”线与开头的空格字符行)。

要打印字符串,我在JTextPane组件上使用标准Java Print Service API:

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

据我所知,Java Print Service API实际上调用了myTextPane的paint()方法。 因此,预览应与String的打印版本完全相同。

但事实并非如此。 预览似乎没有误解等宽空间字符(参见最后一张图)。 预览看起来与我想要打印的文本完全相同。

在此处输入图像描述

有关如何强制JavaPrintServiceAPI正确打印等宽空格字符的任何建议吗?

我不认为你可以在打印API中解决这个问题。

首先将“绿色”数字后面的每一行划分为左和(可能为空)右子串。

JTextArea ,使用align来对两列HTML表进行对齐,如如何在Swing组件中使用HTML中所述

作为JTextPane的替代方法,请使用JLabelGridLayout 。 给左列RIGHT_ALIGNMENT和右列LEFT_ALIGNMENT

使用JLabel进行渲染的两列JTable可能是第三种选择。 有关详细信息,请参见如何使用表 – 概念:编辑器和渲染器