java打印代码不工作
我正在使用下面显示的java代码在连接到我的计算机的HP DeskJet1000 USB打印机上打印文本文件。每当我运行此代码时,都会发送打印作业,但打印机不会打印任何内容。状态显示打印机正在打印,但它甚至不接收页面。请帮忙!我的代码如下:java打印代码不工作,java,printing,Java,Printing,我正在使用下面显示的java代码在连接到我的计算机的HP DeskJet1000 USB打印机上打印文本文件。每当我运行此代码时,都会发送打印作业,但打印机不会打印任何内容。状态显示打印机正在打印,但它甚至不接收页面。请帮忙!我的代码如下: package printing; import java.io.FileInputStream; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSe
package printing;
import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
/** @author Majid */
public class Printing {
public static void main (String [] args) {
// TODO code application logic here
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();
/* locate a print service that can handle it */
PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
/* create a print job for the chosen service */
int printnbr = 0;
DocPrintJob pj = pservices [printnbr].createPrintJob ();
try {
FileInputStream fis = new FileInputStream ("e:/fypdatabase/test.txt");
Doc doc = new SimpleDoc (fis, flavor, null);
//PrintJobWatcher pjDone = new PrintJobWatcher (pj);
/* print the doc as specified */
pj.print (doc, aset);
}
catch (Exception ex) {
ex.printStackTrace ();
}
}
}
您的代码实际上正在工作。但可能您试图打印到错误的打印机 试试这个:
package printing;
import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
/** @author Majid */
public class Printing {
public static void main (String [] args) {
// TODO code application logic here
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();
/* locate a print service that can handle it */
PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
try {
int printer = getPrinter(pservices);
if(printer == -1) {
throw new Exception("No network printer found");
}
DocPrintJob pj = pservices[2].createPrintJob();
FileInputStream fis = new FileInputStream ("c:/Temp/test.txt");
Doc doc = new SimpleDoc (fis, flavor, null);
pj.print (doc, aset);
}
catch (Exception ex) {
ex.printStackTrace ();
}
}
private int getPrinter(PrintService[] pservices) {
int printer = -1;
for(int i = 0; i<pservices.size(); i++) {
if(pservices[i].getName().contains("\\\\")) {
System.out.println("network printer: " + pservices[i].toString());
printer = i;
break;
}
}
return printer;
}
}
包装印刷;
导入java.io.FileInputStream;
导入javax.print.*;
导入javax.print.attribute.HashPrintRequestAttributeSet;
导入javax.print.attribute.PrintRequestAttributeSet;
/**@作者马吉德*/
公共类印刷{
公共静态void main(字符串[]args){
//此处的TODO代码应用程序逻辑
DocFlavor=DocFlavor.INPUT\u STREAM.AUTOSENSE;
PrintRequestAttributeSet aset=新的HashPrintRequestAttributeSet();
/*找到可以处理它的打印服务*/
PrintService[]pservices=PrintServiceLookup.lookupPrintServices(flavor,aset);
试一试{
int printer=getPrinter(pservices);
如果(打印机==-1){
抛出新异常(“未找到网络打印机”);
}
DocPrintJob pj=pservices[2]。createPrintJob();
FileInputStream fis=新的FileInputStream(“c:/Temp/test.txt”);
Doc Doc=new SimpleDoc(fis,flavor,null);
pj.打印(文件、aset);
}
捕获(例外情况除外){
例如printStackTrace();
}
}
私有int getPrinter(PrintService[]pservices){
int打印机=-1;
对于(int i=0;i@moskiteau)为什么要在
DocPrintJob pj = pservices[2].createPrintJob();
而不是将打印机的值作为pservices的索引
DocPrintJob pj = pservices[printer].createPrintJob();
(很抱歉,如果这不是澄清这个问题的正确位置,但这是我在这里的第一个问题,我不知道如何以任何其他方式提问)打印机是否可以从其他应用程序(如Word或记事本)工作?是的,它可以从所有其他应用程序完美打印。您不需要检查返回了多少打印服务,只需要硬编码来使用索引0即可(只是想知道是否安装了一些伪打印机)@Benj,我已经检查了所有内容,正如我所说,我可以在“状态”窗口中看到打印作业,打印机只是没有打印作业。我在Windows Server 2008上也遇到了同样的问题。您找到原因了吗?