Java 直接打印到 Postscript 网络打印机

10
我在Java Tomcat webapp中的内存中有Postscript代码/数据(?), 希望将其直接发送到网络化的PS打印机。是否有一种简单的方式(即只需打开一个端口并发送文本)来打印此内容,绕过所有特定于操作系统的驱动程序和其他内容(并且希望不需要额外的jar包)?请提供示例代码的链接。
谢谢, Dave

你能将其锁定到特定的操作系统吗? - James Van Huis
1
好的,我在Ubuntu上进行开发,并部署到Ubuntu或WinXP上。我希望将打印机视为具有IP地址的设备,从而绕过所有特定于操作系统的烦恼。 - David Jaquay
4个回答

8

打开一个TCP套接字连接到目标打印机的LPR端口。

发送你的数据;只要打印机理解,一切都好。

完成后不要忘记换行符。

(然后关闭端口。)


3
实际上,lpr/lpd协议并不仅仅是将数据管道传输,我之前在http://sourceforge.net/projects/jlpr/编写了一个Java实现。 - Tony Edgecombe
如果你真的想在端口515上使用LPR协议,那么Tony上面的代码是必需的,并且对我有效。然而,对于支持原始端口9100的打印机,你只需要打开一个套接字并转储数据。可以像这样简单(在Linux上):nc [ip-address] 9100 <something.txt - Franjo Markovic

2

你能否再分享一下这个链接,它已经失效了。 - George
大多数低成本激光打印机不支持PostScript。根据我的经验,现在大多数商用激光打印机都包括PostScript Level 3仿真。 - RedGrittyBrick

0

请查看 java.awt.print。它是 Java 中的通用打印 API。

不幸的是,它不适合处理您已有的 PostScript 内容。它旨在让您使用 Java 2D 图形 API 在纸张上“绘制”。


0

我不确定你能否在没有额外库的情况下完成它。

这个示例向你展示如何将文件发送到网络打印机,但需要一个Adobe库(基于商业J2EE Livecycle ES),所以不是通用的“免费”解决方案。

import com.adobe.livecycle.output.client.*;
import java.util.*;    
import java.io.File;    
import java.io.FileInputStream;    
import com.adobe.idp.Document;    
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;

public class SendToPrinter {

    public static void main(String[] args) {
        try{
            //Set LiveCycle ES service connection properties                            
            Properties ConnectionProps = new Properties();
            ConnectionProps.setProperty("DSC_DEFAULT_EJB_ENDPOINT", "jnp://localhost:1099");
            ConnectionProps.setProperty("DSC_TRANSPORT_PROTOCOL","EJB");          
            ConnectionProps.setProperty("DSC_SERVER_TYPE", "JBoss");
            ConnectionProps.setProperty("DSC_CREDENTIAL_USERNAME", "administrator");
            ConnectionProps.setProperty("DSC_CREDENTIAL_PASSWORD", "password");
            //Create a ServiceClientFactory object
            ServiceClientFactory myFactory = ServiceClientFactory.createInstance(ConnectionProps);
            //Create an OutputClient object
            OutputClient outClient = new OutputClient(myFactory); 
            //Reference XML data that represents form data
            FileInputStream fileInputStream = new FileInputStream("C:\\Adobe\\Loan_data.xml"); 
            Document inputXML = new Document(fileInputStream);
            //Set print run-time options
            PrintedOutputOptionsSpec printOptions = new PrintedOutputOptionsSpec(); 
            printOptions.setPrinterURI("\\\\Printer1\\Printer");
            printOptions.setCopies(2);

            //Send a PostScript print stream to printer
            OutputResult outputDocument = outClient.generatePrintedOutput(
                    PrintFormat.PostScript,
                    "Loan.xdp",
                    "C:\\Adobe",
                    "C:\\Adobe",
                    printOptions,
                    inputXML); 

            //Write the results of the operation to OutputLog.xml
            Document resultData = outputDocument.getStatusDoc();
            File myFile = new File("C:\\Adobe\\OutputLog.xml");
            resultData.copyToFile(myFile);
        }
        catch (Exception ee)
        {
            ee.printStackTrace();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接