10

我在内存中(在 Java Tomcat webapp 中)有 Postscript 代码/数据(?),我想直接发送到联网的 PS 打印机。有没有一种简单的方法(即只是弹出一个端口并发送文本)来打印它,绕过所有特定于操作系统的驱动程序和东西(希望甚至不需要额外的罐子)?显示如何执行此操作的示例代码的链接?

谢谢,戴夫

4

4 回答 4

8

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

发送您的数据;只要打印机理解它,你就很酷。

完成后不要忘记换行。

(然后关闭端口。)

于 2008-11-26T01:16:16.980 回答
2

您可以将其直接发送到端口 9100 上的网络打印机。我在这里写了一篇关于此的博客文章:

http://frank.zinepal.com/printing-directly-to-a-network-printer

问题是大多数激光打印机不支持 PostScript。您通常必须为此购买打印机插件。

于 2011-01-27T20:59:59.233 回答
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();
        }
    }
}
于 2008-11-24T19:53:34.683 回答
0

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

不幸的是,它并不是针对处理您已经拥有的后记内容。它旨在让您使用 java 2d 图形 API 在一张纸上“绘图”。

于 2008-11-25T23:39:21.763 回答