1.2k questions

1.4k answers

361 comments

339 users

Categories

Sidebar
0 votes
3.1K views
by lee-m-7328 (120 points)
I am processing ORM messages for Lab Orders. If I cannot determine the correct lab info, I need to print the order to a printer in the lab. I would like to be able to print to the IP address of the printer, so I don't need to install each printer on the Qvera server.

2 Answers

0 votes

I haven't found any proven examples of connecting to a printer in Java over TCP/IP.  This site provides a possible solution, althrough I have not tried it. https://www.experts-exchange.com/questions/27966415/How-to-send-a-print-a-file-on-the-network-print-using-java.html

Below is an example of how I have been able to search for a specific printer on the network and then print the current message on the printer.  This does require that the OS has installed the printer drivers and therefore is aware that the printer exists.

var inputStream = null;
try {
   var i = 0;
   var pservices = javax.print.PrintServiceLookup.lookupPrintServices(null, null);
   var pservice = null;
   qie.warn("pservices.length = " + pservices.length);
   for (i = 0; i < pservices.length; i++) {
      qie.warn("pservices[" + i + "] = " + pservices[i]);
      if (StringUtils.contains(pservices[i].getName(), "HP LaserJet 400")) {
         pservice = pservices[i];
         break;
      }
   }
   
   var docFlavors = pservice.getSupportedDocFlavors();
   qie.warn("docFlavors.length = " + docFlavors.length);
   for (i = 0; i < docFlavors.length; i++) {
      qie.warn("docFlavors[" + i + "] = " + docFlavors[i]);
   }
   var docFlavor = javax.print.DocFlavor.INPUT_STREAM.AUTOSENSE;
   qie.warn("docFlavor = " + docFlavor);
   
   qie.warn("pservice = " + pservice);
   var docPrintJob = pservice.createPrintJob();
   qie.warn("docPrintJob = " + docPrintJob);
   docPrintJob.addPrintJobListener(new javax.print.event.PrintJobAdapter() {
      printDataTransferCompleted : function(event) {qie.info("dataTransferCompleted: " + event)},
      printJobCompleted : function(event) {qie.info("jobCompleted: " + event)},
      printJobFailed : function (event) {qie.info("jobFailed: " + event)},
      printJobCanceled : function (event) {qie.info("jobCanceled: " + event)},
      printJobNoMoreEvents : function(event) {qie.info("jobNoMoreEvents: " + event)},
      printJobRequiresAttention : function(event) {qie.info("jobRequiresAttention: " + event)}
   });
   inputStream = org.apache.commons.io.IOUtils.toInputStream(message.getNode('/'), "UTF-8");
   var doc = new javax.print.SimpleDoc(inputStream, docFlavor, null);
   qie.warn("doc = " + doc);
   //var docFlavor = doc.getDocFlavor();
   //qie.warn("docFlavor = " + docFlavor);

   docPrintJob.print(doc, null);
   
} catch (e) {
   qie.error("Wow.  Caught this error: " + e);
   throw e;
} finally {
   if (inputStream == null) {
      try {
         inputStream.close();
      } catch (err) {
         qie.error("Failed to close inputStream.");
      }
   }
}

 

 

by mike-r-7535 (13.8k points)
0 votes

You can write your text to a file and then print the contents of that file to your default printer.

 

importPackage(java.io);

var out = new BufferedWriter(new FileWriter("c:\\myTestTemp.txt"));
out.write("Hello this is a test\r\nThat has multiple lines\r\nof text");
out.flush();
out.close();

var ff = new File("c:\\myTestTemp.txt");
var desktop = java.awt.Desktop.getDesktop();
desktop.print(ff);

by michael-h-5027 (14.8k points)
...