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

时间:2012-01-05 15:16:50

标签: java swing printing jtextpane

首先让我描述下图:

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

enter image description here

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

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

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

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

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

然而,它没有。预览似乎没有误解等宽空间字符(参见最后一张图)。预览看起来与我希望打印的文本完全相同。

enter image description here

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

1 个答案:

答案 0 :(得分:1)

我认为您无法在打印API中解决此问题。

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

JTextArea中,使用align来证明两列HTML表的合理性,如How to Use HTML in Swing Components中所述。

作为JTextPane的替代方案,请使用GridLayout JLabel。给左列RIGHT_ALIGNMENT和右列LEFT_ALIGNMENT

使用JTable进行渲染的两列JLabel可能是第三种选择。有关详细信息,请参阅How to Use Tables—Concepts: Editors and Renderers