java 斑马 打印不出来_java – Zebra打印机GC420t无法打印图像EPL 2 GW

在Java中使用JasperReport生成图像并尝试通过Zebra GC420t打印机打印时遇到问题。尽管图像生成成功,但打印机无法正常打印。已检查连接和端口,尝试了SO链接中的校准建议,但无效。代码中包含了尝试使用DocPrintJob和EPL 2 GW命令直接打印二进制图像数据,但仍然无法打印。
摘要由CSDN通过智能技术生成

使用JasperReport生成图像,然后尝试在Zebra打印机

GC420t上打印该图像.生成图像但不打印.我已经仔细检查了连接和端口.我读过

this SO link和

the calibration,但没有任何作用.

码:

public void generateReport(Map parameters, List labels)

throws JRException, IOException, ConnectionException, ZebraPrinterLanguageUnknownException{

// TODO Auto-generated method stub

JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(labels);

System.out.println(" Wait !!");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

if(jasperPrint != null && jasperPrint.getPages()!=null && jasperPrint.getPages().size()>=0){

FileOutputStream fos = new FileOutputStream("C:\\Users\\desktop\\Labels.png");

//JasperExportManager.exportReportToPdfStream(jasperPrint, fos);

BufferedImage rendered_image = null;

rendered_image = (BufferedImage) JasperPrintManager.printPageToImage(jasperPrint, 0, 1.6f);

ImageIO.write(rendered_image, "png", fos);

Connection thePrinterConn = new DriverPrinterConnection("GC420t");

try{

for (DiscoveredPrinterDriver printer : UsbDiscoverer.getZebraDriverPrinters()){

System.out.println(printer);

}

thePrinterConn.open();

if(zPrinter==null){

zPrinter = ZebraPrinterFactory.getInstance(thePrinterConn);

}

PrinterStatus printerStatus = zPrinter.getCurrentStatus();

if(printerStatus.isReadyToPrint){

System.out.println("Ready to print !!");

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

DocAttributeSet das = new HashDocAttributeSet();

FileInputStream fis = new FileInputStream("C:\\Users\\desktop\\Labels.png");

Doc mydoc = new SimpleDoc(fis, flavor, das);

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

aset.add(OrientationRequested.PORTRAIT);

@SuppressWarnings("unused")

PrinterJob pj = PrinterJob.getPrinterJob();

PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, aset);

PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();

for (int i = 0; i < services.length; i++){

System.out.println(services[i].getName());

}

if(services.length == 0){

if(defaultService == null){

//no printer found

}

else{

//print using default

DocPrintJob job = defaultService.createPrintJob();

try{

job.print(mydoc, aset);

}catch (PrintException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

else{

PrintService service = ServiceUI.printDialog(null, 200, 200, services, defaultService, flavor, aset);

if (service != null){

DocPrintJob job = service.createPrintJob();

try{

job.print(mydoc, aset);

}catch(PrintException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//ZebraImageI image = ZebraImageFactory.getImage("C:\\Users\\desktop\\Labels.png");

}

else{

System.out.println("Something went wrong");

}

}finally{

thePrinterConn.close();

}

System.out.println("Report generated !!");

}

}

我阅读了EPL 2 manual并将图像转换为二进制图形数据以立即打印.

码:

private byte[] getEplGraphics(int top, int left, BufferedImage bufferedImage) throws IOException {

ByteArrayOutputStream fs = new ByteArrayOutputStream();

//int canvasWidth = bufferedImage.getWidth();

// loop from top to bottom

System.out.println(bufferedImage.getHeight());

System.out.println(bufferedImage.getWidth());

int maxY = bufferedImage.getHeight() + (64- bufferedImage.getHeight()%64);

int maxX = bufferedImage.getWidth() + (64- bufferedImage.getWidth()%64);

System.out.println(maxX);

System.out.println(maxY);

int p3 = maxX / 8;

int p4 = maxY/ 8;

int len = 0;

String gw = "N\nGW0,0," + p3 + "," + p4 + ",";

fs.write(gw.getBytes());

for (int y = 0; y < maxY; ++y) {

// from left to right

for (int x = 0; x < maxX;) {

byte abyte = 0;

// get 8 bits together and write to memory

for (int b = 0; b < 8; ++b, ++x) {

// set 1 for white,0 for black

int dot = 1;

// pixel still in width of bitmap,

// check luminance for white or black, out of bitmap set to white

if (x < bufferedImage.getWidth() && y < bufferedImage.getHeight()) {

int c = bufferedImage.getRGB(x, y);

int red = (c & 0x00ff0000) >> 16;

int green = (c & 0x0000ff00) >> 8;

int blue = c & 0x000000ff;

Color color = new Color(red, green, blue);

int luminance = (int) ((color.getRed() * 0.3) + (color.getGreen() * 0.59)

+ (color.getBlue() * 0.11));

dot = luminance > 127 ? 1 : 0;

}

abyte |= (byte) (dot << (7 - b)); // shift left,

// then OR together to get 8 bits into a byte

}

// System.out.print( (char)(abyte + 48 ) );

// write here

len++;

fs.write(abyte);

}

}

System.out.println("GW Length::"+len);

// Assign memory position here

// fs.write('\n');

fs.write("\nP1".getBytes());

fs.flush();

// System.out.println(fs);

return fs.toByteArray();

}

将图像转换为二进制图形数据后,它不会打印数据.

如何让打印机打印图像?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值