【问题标题】:Printing a pdf file on a thermal printer在热敏打印机上打印 pdf 文件
【发布时间】:2019-12-06 09:18:44
【问题描述】:

我遇到问题,通过热敏打印机上的蓝牙从 pdf 文件打印变成文本视图。

Print Pdf file via Bluetooth Printer Android 我尝试了这些示例,但没有达到我的预期。

这是我当前的代码

代码文件来源:

       String checkout     = "checkout";
       String fpath        = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) +"/"+ checkout + ".pdf";

打印代码

       FileInputStream fis = new FileInputStream(file);
       ByteArrayOutputStream bos = new ByteArrayOutputStream();
       byte[] buf = new byte[1024];

       try {
           for (int readNum; (readNum = fis.read(buf)) != -1;) {
               bos.write(buf, 0, readNum);
               System.out.println("read " + readNum + " bytes,");
           }
       } catch (IOException ex) {
           System.out.println("ERROR!");
       }
       byte[] bytesPDF = bos.toByteArray();
       byte[] printformat = { 27, 33, 0 }; //try adding this print format
       mService.write(printformat);
       mService.write(bytesPDF);

我希望能够通过热敏蓝牙打印机打印 pdf 文件。请帮我。谢谢。

【问题讨论】:

  • 嗨兄弟你有解决方案。请帮助我兄弟

标签: android bluetooth byte thermal-printer


【解决方案1】:

这个问题很清楚。正如我们所看到的,打印的收据具有格式语法。用于格式化 PDF 文件中的文本和图像。因此,您尝试打印的打印机不支持打印 PDF 文件。因此,如果可能,您应该以兼容的格式提供文件,例如文本文件。

要了解有关在蓝牙打印机中格式化文本的更多信息,您可以查看此帖子 here。让我知道这是否能解决您的问题。

【讨论】:

    【解决方案2】:

    热敏打印机的工作原理是

    1. 打开与打印机的套接字连接
    2. 发送打印机可以理解的编码数据
    3. 关闭连接

    因此,这里的问题归结为要发送的数据的格式是什么,以便打印机能够理解并相应地打印。这取决于打印机的制造商。这些编码要么有据可查,打包到 SDK/驱动程序中以供使用,要么是 ESC/POS 通用打印机的开源标准编码。

    最后,打印 PDF 文件需要做的是 -

    1. 将 PDF 文件转换为页面的位图[]。
    2. 按照厂家提供的打印位图命令,逐页编码。
    3. 将此编码的字符串数据传递给打印机。

    例如,请查看以下 GitHub 存储库中的通用 ESC/POS 实现 https://github.com/DantSu/ESCPOS-ThermalPrinter-Android

    PrinterTextParserImg.bitmapToHexadecimalString()
    

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 1970-01-01
      • 2019-08-15
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多