我先描述下图:
- 有两份打印的论文。它们之间的唯一区别是左边纸上的几个空格“”字符被点“.”代替。右边是纸上的字符。
- 红线表示文本应对齐的左边框
- 绿色曲线表示我打算将它连接的所有字符对齐到一个列中。事实上,绿色曲线应该是一条垂直线。
我希望将绿线突出显示的所有字符打印在一列中。
字符串的字体是等宽的 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 表格,如How to Use HTML in Swing Components 中所述。 .
作为 JTextPane
的替代方案,使用 JLabel
的 GridLayout
。给左列 RIGHT_ALIGNMENT
和右列 LEFT_ALIGNMENT
。
使用 JLabel
进行渲染的两列 JTable
可能是第三种选择。参见 How to Use Tables—Concepts: Editors and Renderers了解详情。
关于Java Print API - 使用等宽 'Courier New' 字体错误打印空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8744836/