Печать pdf-файла на термопринтере

введите здесь описание изображения

У меня возникает проблема, печать через Bluetooth на термопринтере из файла PDF становится текстовым.

Печать файла PDF через Bluetooth-принтер 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 на термопринтере Bluetooth. Пожалуйста помогите. Спасибо.


person Robby Ali Darmawan    schedule 29.07.2019    source источник
comment
привет, братан, у тебя есть решение. Пожалуйста, помоги мне, братан   -  person Kabilan    schedule 13.08.2019


Ответы (2)


Вопрос очень ясен. Как мы видим, распечатанная квитанция имеет синтаксис форматирования. Который используется для форматирования текста и изображений в файле PDF. Итак, принтер, через который вы пытаетесь печатать, не поддерживает печать файла PDF. Поэтому, если возможно, вы должны предоставить файл в совместимом формате, таком как текстовый файл.

Чтобы узнать больше о форматировании текста на принтере Bluetooth, вы можете посмотреть этот пост здесь. Дайте мне знать, решит ли это вашу проблему или нет.

person Vishal Roy    schedule 29.07.2019

Термопринтер работает следующим образом

  1. Открытое сокетное подключение к принтеру
  2. Отправка закодированных данных, понятных принтеру
  3. Закрыть соединение

Итак, вопрос здесь сводится к тому, в каком формате данные должны быть отправлены, чтобы принтер мог их понять и соответственно распечатать. Это зависит от производителя принтера. Кодировки либо хорошо задокументированы, упакованы в SDK/драйвер для использования, либо являются стандартными кодировками с открытым исходным кодом для универсальных принтеров ESC/POS.

В конце концов, чтобы напечатать PDF-файл, вам нужно сделать следующее:

  1. Преобразование PDF-файла в Bitmap[] страниц.
  2. Кодируйте страницы одну за другой с помощью команды печати растрового изображения, предоставленной производителем.
  3. Передайте эти закодированные строковые данные на принтер.

Например, посмотрите на общую реализацию ESC/POS в следующем репозитории GitHub https://github.com/DantSu/ESCPOS-ThermalPrinter-Android

PrinterTextParserImg.bitmapToHexadecimalString()
person Arnab Kar    schedule 27.07.2021