佳博蓝牙打印机打印PDF文件源码

程序员之家


实际场景需求 :网页端 自定义打印模板 可以在固定打印机打印还可以在 手机蓝牙打印机打印


最终实现方法:使用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);

1584170253123518.zip


程序员之家
请先登录后发表评论
  • 最新评论
  • 总共0条评论