【问题标题】:Java PrintWriter Not Ejecting Printer PaperJava PrintWriter 不弹出打印纸
【发布时间】:2013-01-15 14:57:45
【问题描述】:

我正在尝试从 Java 程序测试打印。我目前有

 Socket s = new Socket(printer_ip, 9100);

 PrintWriter pw = new PrintWriter(s.getOutputStream());

 pw.println("This is a print test");

 pw.println("\n\n\n");

 pw.flush();

 pw.close();

 s.close();

程序确实将文本打印到打印机,但不会弹出纸张。 ??? 我还缺少什么?

我认为在 flush() 之后它会识别出输入已经完成,它应该在 close() 之后结束流。

【问题讨论】:

    标签: java sockets printing wifi printwriter


    【解决方案1】:

    PrintWriter 不用于打印到文字打印机。它用于将字符写入输出设备(通常是控制台)。你应该看看这个tutorial on Java Printing,因为它比你的代码示例复杂一点

    【讨论】:

    【解决方案2】:

    这在某种程度上取决于您使用的打印机和用于打印它的界面。

    您完全可以打印的事实告诉我,您的打印机处于打印 ASCII 文本的模式。这就是过去所有老式拖拉机馈送点阵打印机的工作方式,但现代激光和喷墨打印机的工作方式并非如此。现代打印机打印整页,而不仅仅是行。

    但如果您使用的是较旧的打印机,或模仿旧打印机的界面,您需要做两件事中的一件。

    第一,您可以向打印机发送一个 FORMFEED 字符,即 ASCII 代码 14(或 Control-L)。许多打印机会使用该字符并进入下一页。

    另一种技术是预先知道一页上有多少行,跟踪打印了多少行,然后当您想要前进页面时,只需将许多额外的新行打印到打印机即可前进一行一行。

    大多数具有标准纸张和字体大小的通用打印机,如果您使用的是 8.5 x 11" 纸张,则为每页 66 行或每英寸 6 行。但打印机可以使用不同的字体,而这不会影响这一点. 所以,用你的打印机检查一下。一个简单的测试就是打印 100 行编号,然后看看页面上有多少行。

    因此,对于您的示例,您打印了 4 行,您需要额外打印 62 行才能进入下一页。

    这两种技术都有其目的和用途。 FORMFEED 很好,因为它是一个简单的命令,您不必跟踪任何内容,但这也意味着打印机必须“知道”一页有多长。

    如果您使用同一台打印机打印一堆不同尺寸的表格,那么将打印机重置为不同的尺寸可能会让用户感到很痛苦(打印机并不以拥有世界上最好的用户界面而闻名),所以,相反,计算机知道页面大小并简单地推进行。这可以使表单交换更加容易。

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多