文件尚未通过 java 中的打印机设备打印
Posted
技术标签:
【中文标题】文件尚未通过 java 中的打印机设备打印【英文标题】:File has not been printed Through Printer device in java 【发布时间】:2016-05-20 08:56:24 【问题描述】:我想打印一个文件。我为此编写了这段代码。但它不打印我的文件。 选择服务:
String printerName = "Canon MF4320-4350".toLowerCase();
PrintService service = null;
PrintService[] services = PrinterJob.lookupPrintServices();
// Retrieve a print service from the array
for (int index = 0; service == null && index < services.length; index++)
if (services[index].getName().toLowerCase().indexOf(printerName) >= 0)
service = services[index];
用于打印:
byte[] bytes = null;
Path path = FileSystems.getDefault().getPath("D:\\Test.docx");
bytes = Files.readAllBytes(path);
DocFlavor docFlavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
PrintRequestAttributeSet faset = new HashPrintRequestAttributeSet();
faset.add(new Copies(5));
faset.add(Sides.ONE_SIDED);
DocAttributeSet daset = new HashDocAttributeSet();
daset.add(OrientationRequested.LANDSCAPE);
daset.add(Sides.ONE_SIDED);
Doc myDoc = new SimpleDoc(bytes, docFlavor, daset);
//create the DocPrintJob
DocPrintJob job = service.createPrintJob();
job.print(myDoc, faset);
【问题讨论】:
【参考方案1】:这不是打印的工作方式 - 当 Word 打印出 docx
文件时,它不会将文件的原始字节发送到打印机。相反,它将文件转换为发送给打印驱动程序的低级打印命令。
Java 打印 API 可以处理 2d rendering via drawing commands,或者它允许您将原始字节流发送到打印机,但您有责任制作打印机可以理解的字节。
另请参阅this question,并查看docx4j。
【讨论】:
谢谢你,Adrian,但是如果我把 .txt 文件放在这里,它也不起作用。 如果您打算通过向打印机发送字节流进行打印,最好的参考是 Linux 打印为您的打印机使用的过滤器 (wiki.debian.org/PrinterDriver/Canon/UFR-II)。我不认为佳能喷墨打印没有翻译为 UFR 的纯文本。 比你 :),除了向打印机发送字节流之外,还有其他方法吗? 所有打印技术都很复杂:您可以生成自己的页面布局,或者运行 Word,或者使用 Linux 打印服务器来转换格式,或者选择本机理解您的格式的打印机型号想要。以上是关于文件尚未通过 java 中的打印机设备打印的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 PowerShell 将“设备和打印机”中的对象查询到数组中
java 获取电脑设备打印机状态,越具体越好,做过的请帮忙理下思路,好