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
的替代方法,请使用JLabel
的GridLayout
。 给左列RIGHT_ALIGNMENT
和右列LEFT_ALIGNMENT
。
使用JLabel
进行渲染的两列JTable
可能是第三种选择。 有关详细信息,请参见如何使用表 – 概念:编辑器和渲染器 。