实际场景需求 :网页端 自定义打印模板 可以在固定打印机打印还可以在 手机蓝牙打印机打印
最终实现方法:使用pdf文件作为最终打印模板
佳博蓝牙打印机 打印pdf文件想了很多方法~~~~
安卓代码
下面是实现佳博蓝牙打印机 打印pdf文件的具体源码
//demo 样式 void sendLabel() { LabelCommand tsc = new LabelCommand(); tsc.addSize(60, 60); // 设置标签尺寸,按照实际尺寸设置 tsc.addGap(0); // 设置标签间隙,按照实际尺寸设置,如果为无间隙纸则设置为0 tsc.addDirection(DIRECTION.BACKWARD, MIRROR.NORMAL);// 设置打印方向 tsc.addReference(0, 0);// 设置原点坐标 tsc.addTear(ENABLE.ON); // 撕纸模式开启 tsc.addCls();// 清除打印缓冲区 // 绘制简体中文 //tsc.addText(20, 20, FONTTYPE.SIMPLIFIED_CHINESE, ROTATION.ROTATION_0, FONTMUL.MUL_1, FONTMUL.MUL_1, "Welcome " // + "to use Gprinter!"); // 绘制图片 //Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.gprinter); System.out.println("路径:"+ MainActivity.this.getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath()); Bitmap b = null; File file = new File(MainActivity.this.getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath()+"/1.pdf"); if (file!=null) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)); final int pageCount = renderer.getPageCount(); Log.e("test_sign", "图片de 张数: " + pageCount); for (int i = 0; i < pageCount; i++) { PdfRenderer.Page page = renderer.openPage(i); int width = getResources().getDisplayMetrics().densityDpi / 72 * page.getWidth(); int height = getResources().getDisplayMetrics().densityDpi / 72 * page.getHeight(); b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //todo 以下三行处理图片存储到本地出现黑屏的问题,这个涉及到背景问题 Canvas canvas = new Canvas(b); canvas.drawColor(Color.WHITE); canvas.drawBitmap(b, 0, 0, null); Rect r = new Rect(0, 0, width, height); page.render(b, r, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); // close the page page.close(); } // close the renderer renderer.close(); } } catch (Exception ex) { ex.printStackTrace(); } tsc.addBitmap(120, 0, BITMAP_MODE.OVERWRITE, 360, b); //tsc.addQRCode(250, 80, EEC.LEVEL_L, 5, ROTATION.ROTATION_0, " www.gprinter.com.cn"); // 绘制一维条码 //tsc.add1DBarcode(20, 250, BARCODETYPE.CODE128, 100, READABEL.EANBEL, ROTATION.ROTATION_0, "Gprinter"); tsc.addPrint(1, 1); // 打印标签 tsc.addSound(2, 100); // 打印标签后 蜂鸣器响 tsc.addCashdrwer(LabelCommand.FOOT.F5, 255, 255); Vector<Byte> datas = tsc.getCommand(); // 发送数据 byte[] bytes = GpUtils.ByteTo_byte(datas); String str = Base64.encodeToString(bytes, Base64.DEFAULT); int rel; try { rel = mGpService.sendLabelCommand(mPrinterIndex, str); GpCom.ERROR_CODE r = GpCom.ERROR_CODE.values()[rel]; if (r != GpCom.ERROR_CODE.SUCCESS) { Toast.makeText(getApplicationContext(), GpCom.getErrorText(r), Toast.LENGTH_SHORT).show(); } } catch (RemoteException e) { e.printStackTrace(); } } }
主要代码块:
//引入pdf文件
File file = new File(MainActivity.this.getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath()+"/1.pdf");
//pdf文件转成图片数据
b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//图片数据转换打印机可识别的数据格式
tsc.addBitmap(120, 0, BITMAP_MODE.OVERWRITE, 360, b);
本文为程序员之家原创文章,转载无需和我联系,但请注明来自程序员之家www.baldhome.com