我正在使用以下方法将 pdf 文档打印到我的打印机。如果我只想打印一次,它工作得很好,但是多次打印需要更长的时间。
public static void print()
{
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
FileInputStream psStream = null;
try
{
psStream = new FileInputStream(System.getProperty("user.home")+"\\My Documents\\document.txt");
}
catch (FileNotFoundException e)
{
System.out.println(e);
}
if (psStream == null)
return;
if (services.length > 0)
{
PrintService myService = null;
for (PrintService service : services)
{
System.out.println(service.getName());
if (service.getName().contains("printer_name"))
{
myService = service;
break;
}
}
DocPrintJob printJob = myService.createPrintJob();
Doc document = new SimpleDoc(psStream, flavor, null);
try
{
printJob.print(document, null);
} catch (PrintException e)
{
System.out.println(e);
}
} else
{
System.out.println("No PDF printer available.");
}
}
因此,如果我想将一个文档打印五次并print()
循环,那么每次打印文档之间都会有相当长的延迟。这对我来说很有意义,因为必须为每个文档重新建立与打印机的连接,并且必须重新发送文档。有没有办法使用这个 API 多次给同一个文档打印作业?
我想值得注意的是,我已经尝试将printJob.print(document,null)
命令放入一个生成PrintException: already printing
. 也许如果有办法让它等到当前文档完成后再发送下一个它可以工作?在这里不知所措。谢谢。
@mthmulders:我尝试了以下内容,但只打印了一份。我做错什么了吗?
Doc document = new SimpleDoc(psStream, flavor, null);
PrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
set.add(new Copies(5));
try
{
printJob.print(document, set);
} catch (PrintException e)
{
System.out.println(e);
}