1

我正在尝试从 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()之后结束流。

4

2 回答 2

3

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

于 2013-01-15T15:00:33.180 回答
1

这有点取决于您使用的打印机以及用于打印它的界面。

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

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

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

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

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

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

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

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

于 2013-01-15T15:08:53.293 回答