使用光栅 PTR 打印机在 java 中打印文件
Posted
技术标签:
【中文标题】使用光栅 PTR 打印机在 java 中打印文件【英文标题】:Printing files in java with raster PTR printer 【发布时间】:2013-07-17 11:33:26 【问题描述】:我有两段代码用于使用 java 进行打印,如下所示:
第一个密码
for(int i = 0; i < files.length; i++)
String file = "C:\\images\\colour\\"+files[i].getName();
String filename = file;
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);
if (service != null)
DocPrintJob job = service.createPrintJob();
PrintJobListener listener = new PrintJobAdapter()
public void printDataTransferCompleted(PrintJobEvent e)
System.exit(0);
;
job.addPrintJobListener(listener);
FileInputStream fis = new FileInputStream(filename);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
此代码有一个 printDialog 并在打印机上按预期打印
第二个代码:
try
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);
if (pss.length == 0)
throw new RuntimeException("No printer services available.");
PrintService ps = pss[3];
System.out.println("Printing to " + ps);
DocPrintJob job = ps.createPrintJob();
FileInputStream fin = new FileInputStream(files[i]);
Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);
job.print(doc, pras);
fin.close();
catch (IOException ie)
ie.printStackTrace();
catch (PrintException pe)
pe.printStackTrace();
在没有打印对话框的情况下打印,这是我所追求的,但这会在打印机上打印一个空白页。
现在可能的目标是只使用这些代码之一,但我提供了我尝试过的内容。我需要让代码 1 工作但没有打印机对话框。
如果我确实从代码 1 中删除了 printerDialog,那么它基本上与代码 2 相同(在此打印机上打印空白)。
我相信问题在于 PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);
代码一中传递的参数不再被传递
是否有从 PrintService 传递参数 service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, DocFlavor.INPUT_STREAM.GIF, pras);在不使用对话框的情况下进入打印机,或者是否有一种方法可以跳过对话框,就像用户单击了“是”一样?
首先为非常长的帖子道歉。希望有人可以帮忙,或者给我一些建议。提前谢谢你
【问题讨论】:
【参考方案1】:如果您的目标只是打印文件,则有更简单的方法,例如使用java.awt.Desktop.print
这里是执行我下面提到的批处理文件的代码,以获得更好的格式
Process p;
String execBatchPath = "your file path";
try
p = Runtime.getRuntime().exec("cmd /c start " + execBatchPath);
p.waitFor();
catch (IOException e)
FileIO.writeLog("IO exception while trying to run the batch");
ErrorUtils.manageCatch(e);
catch (InterruptedException e)
FileIO.writeLog("Batch process was interrupted");
ErrorUtils.manageCatch(e);
【讨论】:
这种方法可以指定打印机吗? 不,但这是我对同一问题的解决方案。您可以使用命令rundll32 printui.dll,PrintUIEntry /y /q /n "printer name"
通过java 编写一个批处理文件,然后让它执行。这将更改机器上的默认打印机,并且 Desktop.print 命令使用您计算机的设置,因此它将始终打印到当前设置为默认值的打印机。用这样的东西执行
请问getGoodBatchExecString是什么?
哦,对不起,这与答案无关。我从我之前编写的程序中复制粘贴它。基本上我的方法得到了一个字符串,它是filePath,但它总是很不稳定并且不起作用,所以我写了另一种方法来修复它。生病修复我的例子,使其更准确
tbodt 是正确的,但是您可以检查操作系统是基于 windows 还是基于 unix,如果它是 unix,那么您可以编写一个 bash 脚本来做类似的事情,但过程会有所不同.以上是关于使用光栅 PTR 打印机在 java 中打印文件的主要内容,如果未能解决你的问题,请参考以下文章