java - 在 Java 中预览和打印通用文本的独立于打印机的方式

标签 java swing printing jtextpane

我研究了在 Java 中预览和打印通用文本的可能性。我所依赖的要求是:

  1. 我应该能够为预览组件和打印文本指定字体系列和字体大小。
  2. 打印预览必须与打印文本完全相同。
  3. 打印必须独立于打印机设备(没有打印机特定命令来定义字体等)。
  4. 打印约。 20 页通用文本必须立即开始(不得因数据处理造成任何明显延迟)

为了满足上述要求,我首先尝试了 Java Print Service API。我创建了 JTextPane,其中包含要预览和打印的文本。通过使用 JTextPane,我能够指定字体,因此结果看起来很漂亮。为了从 JTextPane 打印数据,我使用了标准程序,该程序独立于打印机设备

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

如果在执行 print() 方法后 15 秒内无法开始打印 20 页纯文本,那么一切都会好起来的。

但是,当我打印与原始字节数组(“应用程序/八位字节流”)相同的文本时,打印会立即开始,并且使用很少的 PCL 特定命令来设置正确的字体。但这种方法是特定于打印机的,并且预览文本也存在问题,以便预览看起来与打印文本完全相同。

JTextPane 的问题很可能是由于发送到打印机的数据太大(逐像素)而引起的,而第二种解决方案是几个字节的问题。不幸的是,这些解决方案都不足以满足我的需求,因为它们不能满足所有要求。

解决方案可能是打印机控制语言(PCL、ESC/P...)上有一些“外观”,这将允许我独立于打印机设备设置文本字体。虽然无法解决打印预览的问题,但至少可以立即开始打印。

有什么建议如何打印纯文本而不违反上述 4 个标准吗?

最佳答案

上述问题似乎与 Linux 打印驱动程序和 Cups 有关。 我尝试在 Windows 上打印一些文本,一切正常。打印甚至立即开始。

关于java - 在 Java 中预览和打印通用文本的独立于打印机的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735508/

相关文章:

java - hibernate 恩弗斯 : How to check if a field has changed between two revisions?

java - ArrayList 对象运行时输入被视为字符串

java - Component.requestFocus 和手动对焦有什么区别

java - 如何使 JFrame 和 JMenubar 不在 public static void main(String[] args) 中

C++ 打印包含数据结构的数组

java - 为什么 JAR 文件不包含文档?

java - 如何使用java以编程方式发送短信?

java - 将 Actionlistener 类型转换为整数 java

html - 在 CSS 中打印的页边距

html - css - 打印页面 - 标题重复不起作用