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.");
}
}
}