Java Print API - 使用等宽 'Courier New' 字体错误打印空格字符

标签 java swing printing jtextpane

我先描述下图:

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

enter image description here

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

字符串的字体是等宽的 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 正确打印等宽空格字符有什么建议吗?

最佳答案

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

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

在您的JTextArea 中,使用align 对齐两列HTML 表格,如How to Use HTML in Swing Components 中所述。 .

作为 JTextPane 的替代方案,使用 JLabelGridLayout。给左列 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/

相关文章:

java - else on if 语句没有通过

java - Spring Boot 上的 Jersey - ApplicationPath

java - setText() 在 mouseClicked() 函数中不起作用

java - 有没有办法动态更改 JScrollPane 的边框标题?

javascript - 如何将某些样式应用于打印页面上的第一个和最后一个元素?

java - 从 JSON 文件解析时无法从 JsonElement 转换为 String

java - 根据其他列表的 ID 匹配从列表中删除对象

javascript - Window.print 不打印新选项卡中的内容,而是打印上一个选项卡中的内容

JavaFX PixelWriter 性能低下

java - 如何打印单个 JPanel 的内容?