我在内存中(在 Java Tomcat webapp 中)有 Postscript 代码/数据(?),我想直接发送到联网的 PS 打印机。有没有一种简单的方法(即只是弹出一个端口并发送文本)来打印它,绕过所有特定于操作系统的驱动程序和东西(希望甚至不需要额外的罐子)?显示如何执行此操作的示例代码的链接?
谢谢,戴夫
我在内存中(在 Java Tomcat webapp 中)有 Postscript 代码/数据(?),我想直接发送到联网的 PS 打印机。有没有一种简单的方法(即只是弹出一个端口并发送文本)来打印它,绕过所有特定于操作系统的驱动程序和东西(希望甚至不需要额外的罐子)?显示如何执行此操作的示例代码的链接?
谢谢,戴夫
打开到目标打印机上 LPR 端口的 TCP 套接字。
发送您的数据;只要打印机理解它,你就很酷。
完成后不要忘记换行。
(然后关闭端口。)
您可以将其直接发送到端口 9100 上的网络打印机。我在这里写了一篇关于此的博客文章:
http://frank.zinepal.com/printing-directly-to-a-network-printer
问题是大多数激光打印机不支持 PostScript。您通常必须为此购买打印机插件。
我不确定您是否可以在没有额外库的情况下做到这一点。
此示例向您展示如何将文件发送到网络打印机,但需要 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();
}
}
}
查看 java.awt.print。它是java中的通用打印API。
不幸的是,它并不是针对处理您已经拥有的后记内容。它旨在让您使用 java 2d 图形 API 在一张纸上“绘图”。