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

Mic*_*ian 6 java printing swing jtextpane

我先来描述下图:

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

在此输入图像描述

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

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

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

PrinterJob pj = PrinterJob.getPrinterJob(); 
pj.setPrintable(myTextPane);
pj.print();
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

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

tra*_*god 1

我认为您无法在打印 API 中修复此问题。

\n\n

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

\n\n

在您的 中JTextArea,使用align来调整两列 HTML 表格,如如何在 Swing 组件中使用 HTML 中所述。

\n\n

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

\n\n

JTable用于渲染的两列JLabel可能是第三种选择。有关详细信息,请参阅如何使用 Tables\xe2\x80\x94Concepts:编辑器和渲染器

\n