2008-11-24 150 views
9

我在內存中(在Java Tomcat Web應用程序中)有Postscript代碼/數據(?),我想直接發送到聯網的PS打印機。有沒有簡單的方法(即只是彈出打開一個端口併發送文本)來打印這個,繞過所有的O/S特定的驅動程序和東西(並希望甚至不需要額外的罐子)?示例代碼的鏈接顯示如何做到這一點?Java直接打印到Postscript網絡打印機

謝謝, 戴夫

+0

你可以將其鎖定到特定的操作系統嗎? – 2008-11-24 20:52:06

+1

那麼,我正在Ubuntu上開發並在Ubuntu或WinXP上部署。我希望將打印機作爲一個具有IP地址的設備,從而繞過所有O/S特定的廢話。 – 2008-11-24 21:55:58

回答

7

打開TCP套接字到目標打印機上的LPR端口。

發送您的數據;只要打印機理解它,你就很酷。

當您完成時,請不要忘記換行。

(然後關閉端口)。

+3

實際上,對於lpr/lpd協議,有一點比管道數據多一點,我前一段時間寫了一個Java實現,在http://sourceforge.net/projects/jlpr/ – 2009-09-21 08:30:20

0

我不知道你能做到這一點無需額外庫。

example展示瞭如何將文件發送到網絡打印機,但requieres土坯庫(基於商業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(); 
     } 
    } 
} 
0

檢出java.awt.print。它是java中的通用打印API。

不幸的是,它不是圍繞處理已有的postscript內容。它的設計目的是讓你在一張紙上用Java 2d圖形API「繪製」。