2008-11-24 34 views
9

Tengo un código/datos Postscript (?) En la memoria (en una aplicación Java Tomcat) que me gustaría enviar directamente a una impresora PS en red. ¿Existe una manera fácil (es decir, simplemente abrir un puerto y enviar el texto) para imprimir esto, pasando por alto todos los controladores específicos de O/S y esas cosas (y con suerte ni siquiera requieren tarros adicionales)? ¿Un enlace al código de ejemplo que muestra cómo hacer esto?Impresión en Java directamente en una impresora de red Postscript

Gracias, de Dave

+0

¿Puede bloquear esto en un sistema operativo específico? –

+1

Bueno, estoy desarrollando en Ubuntu e implementando ya sea en Ubuntu o WinXP. Tenía la esperanza de tratar a la impresora como un dispositivo con una dirección IP, evitando así toda la basura específica de O/S. –

Respuesta

7

abre un socket TCP al puerto LPR en la impresora de destino.

envíe sus datos; mientras la impresora lo comprenda, eres genial.

no olvide un avance de línea cuando haya terminado.

(a continuación, cierre el puerto.)

+3

En realidad, hay un poco más de protocolo lpr/lpd que simplemente canalizar los datos. Hace algún tiempo escribí una implementación de Java en http://sourceforge.net/projects/jlpr/ –

0

no estoy seguro de que puede hacerlo sin biblioteca adicional.

Este example muestra cómo enviar el archivo a una impresora de red, pero requiere una biblioteca de adobe (basada en J2EE comercial Livecycle ES, por lo que no es una solución "gratuita" genérica ...).

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

Echa un vistazo a java.awt.print. Es la API de impresión genérica en Java.

Desafortunadamente, no está orientado a tratar con el contenido postscript que ya tiene. Está diseñado para permitirle "dibujar" en un pedazo de papel con las API gráficas Java 2d.

2

Puede enviarlo directamente a una impresora de red en el puerto 9100. escribí un post sobre esto aquí:

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

El problema es que la mayoría de las impresoras láser no son compatibles con PostScript. Por lo general, debe obtener un complemento de impresora para ello.

+0

. ¿Pueden compartir este enlace nuevamente? está roto – George

+0

La mayoría de las impresoras láser de * bajo costo carecen de soporte PostScript. En mi experiencia, la mayoría de las impresoras láser de clase empresarial incluyen la emulación Postscript nivel 3 hoy en día. – RedGrittyBrick

Cuestiones relacionadas