Java PrintWriter没有弹出打印纸

时间:2013-01-15 14:57:45

标签: java sockets printing wifi printwriter

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

您可以打印的事实告诉我您的打印机处于打印ASCII文本的模式。这就是所有旧拖拉机喂食点阵打印机在当天的工作方式,但现代激光和喷墨打印机的工作方式并非如此。现代打印机打印整页,而不仅仅是行。

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

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

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

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

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

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

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