ticket - Impresión en Java directamente en una impresora de red Postscript
no puedo imprimir desde java (4)
No estoy seguro de que puedas hacerlo sin biblioteca adicional.
Este ejemplo muestra cómo enviar el archivo a una impresora de red, pero requiere una biblioteca de Adobe (basada en J2EE Livecycle ES comercial, por lo que no es una solución genérica "gratuita" ...).
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();
}
}
}
Tengo el código / datos Postscript (?) En la memoria (en una aplicación web 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?
Gracias, Dave
Echa un vistazo a java.awt.print. Es la API de impresión genérica en Java.
Desafortunadamente, no está orientado a lidiar con el contenido postscript que ya tienes. Está diseñado para permitirle "dibujar" en un pedazo de papel con las API gráficas Java 2d.
abra un socket TCP al puerto LPR en la impresora de destino.
envía tus datos; mientras la impresora lo comprenda, eres genial.
no olvide un Line feed cuando haya terminado.
(luego cierre el puerto)
Puede enviarlo directamente a una impresora de red en el puerto 9100. Escribí una publicación de blog 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.