我正在寻找一种使用网络打印机打印jasper报告的方法,但找不到任何相关内容。
我通过网络配置了打印机,并且可以正常工作。我可以使用Windows中安装的驱动程序进行打印。我也可以使用socket(ip,port)连接到它,并使用java打印原始文本。
我想避免在主机上安装打印驱动程序以便与打印机通信。我已经可以使用套接字了
我只想打印使用该套接字设计的jasper报告。我该怎么做?非常感谢
此代码适用于驱动程序,我传递打印机名称,并且由于驱动程序已安装在计算机上而可以打印。
InputStream stream = null;
stream = new FileInputStream("C:\\myjasperdesign.jasper");
JasperPrint jasperReport = JasperFillManager.fillReport(stream, null, makeDataSourceTemplate(cPrint));
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A4);
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(printerName, null));
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperReport));
SimplePrintServiceExporterConfiguration configuration = new SimplePrintServiceExporterConfiguration();
configuration.setPrintRequestAttributeSet(printRequestAttributeSet);
configuration.setPrintServiceAttributeSet(printServiceAttributeSet);
configuration.setDisplayPageDialog(false);
configuration.setDisplayPrintDialog(false);
exporter.setConfiguration(configuration);
exporter.exportReport();
这是我的插座。无需安装任何驱动程序,这也可以很好地打印原始文本。
Socket clientSocket = null;
try {
clientSocket = new Socket(host, port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("Printer works ");
/*Cut the paper*/
char ESC = (char) 27;
char CR = (char) 29;
char CR2 = (char) 64;
char V = (char) 86;
String cmd = ESC + "" + CR2 + "" + CR + "" + V;
outToServer.writeBytes(cmd);
/*END Cut the paper*/
outToServer.flush();
clientSocket.shutdownOutput();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
我想合并套接字和Jasper报告并在没有驱动程序的情况下打印。
有什么想法吗?