Печать квитанции в файл - PullRequest
2 голосов
/ 15 мая 2019

Я могу распечатать квитанцию ​​(формат принтера в байтах []) через термопринтер, например:

// Print a receipt
OutputStream outputStream = mPrinterSocket.getOutputStream();
for (byte[] packet : content)
    outputStream.write(packet);
outputStream.flush();

Но мне не удается сохранить квитанцию ​​(формат принтера в байтах []) в файл (pdf или изображение). Я попробовал:

// Save a receipt
try (OutputStream outputStream = new FileOutputStream(filePath)) {
    for (byte[] packet : content) {
        outputStream.write(packet);
        outputStream.flush();
    }
} catch (Exception exception) {
    exception.printStackTrace();
}

Но он вернул поврежденный файл, содержащий:

䀛 琛 ᬐ šℝ 䴑 ਊℝ 䴀 ੍੍ ㄊ ⼵ 㔰 ㄯ <ㄱ ㈺ ‱ ††††† 慔 汢 ⁥਱ 䔛 ਁ '潂 獩 潳 獮 ††††††††††† ᬊ E ‱ 潃 慣††††††††††† ⸲〲ᬊ Е ‱ 慆 瑮 ⁡ †††††††††† ⸲〲ლⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭ ਭ 䔛 吁 呏 䱁 ††††††††† 䔠 剕 㐠 㐮 ਰਊ 䔛䴀 牥 楣 ⃠ 楢 湥 ⁴ਡਊਊᴊ V </p>

Отличается ли процесс «печати байта [] в файл» от «сохранения байта [] в файл»? Например, я использую символ {0x1b, 0x45, 0x01}, чтобы выделить текст жирным шрифтом, это проблема? Я хотел бы избежать переформатирования всего или использования внешней библиотеки.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Я бы обернул FileOutputStream в BufferedOutputStream вместо использования простого FOS.При чтении или записи в файл всегда рекомендуется использовать буфер.

Кроме того, вам не нужно flush() после каждого пакета, только вне цикла - как в вашем первомпример.Это также улучшает производительность.

0 голосов
/ 15 мая 2019

Вы можете использовать библиотеку itext для Android, чтобы создать файл PDF и сохранить его. Подробнее читайте здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...