【问题标题】:Java printing directly to a Postscript network printerJava 直接打印到 Postscript 网络打印机
【发布时间】:2008-11-24 19:44:50
【问题描述】:

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

谢谢, 戴夫

【问题讨论】:

  • 你能把它锁定到特定的操作系统吗?
  • 嗯,我正在 Ubuntu 上开发并在 Ubuntu 或 WinXP 上进行部署。我希望将打印机视为具有 IP 地址的设备,从而绕过所有特定于操作系统的废话。

标签: java networking printing postscript


【解决方案1】:

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

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

完成后不要忘记换行。

(然后关闭端口。)

【讨论】:

  • 实际上 lpr/lpd 协议不仅仅是管道数据,我前段时间在sourceforge.net/projects/jlpr写了一个Java实现
  • 如果你真的想在端口 515 上使用 LPR 协议,那么上面的 Tony 的代码是必要的,并且对我有用。但是,对于支持原始端口 9100 的打印机,您实际上只需打开一个套接字并转储数据。可以像(在 linux 上)一样简单 nc [ip-address] 9100
【解决方案2】:

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

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

问题在于大多数激光打印机不支持 PostScript。您通常需要为其安装打印机插件。

【讨论】:

  • 你能不能再分享一下这个链接,它坏了
  • 大多数 低成本 激光打印机缺乏 postscript 支持。根据我的经验,现在大多数企业级激光打印机都包含 postscript 3 级仿真。
【解决方案3】:

我不确定你是否可以在没有额外库的情况下做到这一点。

这个example 向您展示了如何将文件发送到网络打印机,但需要一个 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();
        }
    }
}

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2018-07-24
      • 2017-04-21
      • 2012-05-28
      相关资源
      最近更新 更多