【发布时间】:2014-05-14 10:39:02
【问题描述】:
我正在尝试让一个程序将标签打印到服务器的附加打印件(USB)上。我已经能够从批处理文件打印到它,但由于某种原因,打印命令在coldfusion执行命令中失败。我目前的解决方案是通过 Java 访问打印机。我对这个解决方案的问题是我不能调用它们中的任何一个 java 方法。
解决方案基于此答案How to print strings with line breaks in java
以下代码部分似乎可以正常工作。
var printService = createObject("java","javax.print.PrintService");
var printServiceLookup = createObject("java","javax.print.PrintServiceLookup");
var docFlavor = createObject("java","javax.print.DocFlavor");
writeDump( printService.init() );
writeOutput('<hr>');
writeDump( printServiceLookup );
writeOutput('<hr>');
writeDump( docFlavor );
当我尝试执行刚刚创建的对象中存在的任何方法时,问题就出现了。
当我尝试执行时
writeDump( DocFlavor.STRING.TEXT_PLAIN );
我明白了:
Application Execution Exception
Error Type: java.lang.NoSuchMethodException : 0
Error Messages: No matching Constructor for javax.print.DocFlavor() found
请记住,我正在尝试将一组 ZPL 打印命令发送到连接到计算机的打印机。如果能够通过套接字成功地做到这一点,但也需要能够通过本地连接的打印机来做到这一点。因此,如果可以与 Railo 和 Windows 一起使用,其他解决方案也是可以接受的。
更新日期:2013 年 4 月 3 日
var printer = javacast("null","");
var printers = printServiceLookup.lookupPrintServices( javacast("null",""), javacast("null","") );
for( var i=1; i le ArrayLen( printers ); i++ ) {
if( printers[i].getName() eq printername ) {
printer = printers[i];
break;
}
}
if( i gt ArrayLen( printer ) ) {
throw('Printer #printername# was not found');
}
var Job = printer.createPrintJob();
var LabelCmdbytes = javaCast( "byte[]", javaCast( "String", LabelCmd ).getBytes() );
var Labeldoc = Doc.init( LabelCmdbytes, printer.getSupportedDocFlavors()[1].AUTOSENSE, javacast("null","" ) );
Job.print( Labeldoc, javacast("null","")
此解决方案有效,但我认为 printer.getSupportedDocFlavors()[1].AUTOSENSE 不是 DocFlavor 值的最佳解决方案。 环境是带有 Railo 4.1.x 的 Windows 7
【问题讨论】:
标签: java printing coldfusion railo