【问题标题】:Railo Java PrintingRailo Java 打印
【发布时间】: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


    【解决方案1】:

    其实DocFlavor.STRING是一个嵌套类。所以你需要使用$ 来获取它的引用:

    StringFlavor = createObject("java","javax.print.DocFlavor$STRING");   
    

    然后就可以访问公共字段了:

    writeDump( StringFlavor.TEXT_PLAIN );
    

    旁注,printService.init() 不应该工作。 PrintService 是一个接口,不能实例化。所以调用init() 应该会报错。

    【讨论】:

    • 这是有道理的,$string 解决了这个问题。我最终使用了 printServiceLookup.lookupPrintServices(javacast("null",""), javacast("null",""));获取所有打印机的列表。不过,我仍然无法完成打印作业。
    • 发生了什么 - 错误?你能append your new code 和任何错误信息吗?
    • 我不认为printer.getSupportedDocFlavors()[1].AUTOSENSE 是最好的解决方案...我不熟悉AUTOSENSE,所以很遗憾我在那里没有任何建议。
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2017-03-01
    • 2013-05-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多