Под Win16 Вы можете использовать функцию SpoolFile, или Passthrough escape, если принтер поддерживает последнее. Под Win32 Вы можете использовать WritePrinter.
Ниже пример открытия принтера и записи чистого потока данных в принтер. Учтите, что Вы должны передать корректное имя принтера, такое, как "HP LaserJet 5MP", чтобы функция сработала успешно.
Конечно, Вы можете включать в поток данных любые необходимые управляющие коды, которые могут потребоваться.
P.S. В принципе, вместо LPT1 может стоять что угодно, даже сетевой сервер печати (\\server\prn) - все равно печатает. Можно и параметр в конструктор вставить и т.д.
Программный код на языке Delphi, который пишет текст на принтере с помощью функции Windows API WritePrinter. Код разделен на две части: standalone-процедура и класс TTextPrinter, который обертывает эту функциональность и предоставляет методы для записи текста и переноса строк.
Эта процедура принимает два параметра: PrinterName (имя принтера, который нужно использовать) и S (текст, который нужно записать на принтер). Она открывает указанный принтер, начинает документ, пишет текст на принтер с помощью WritePrinter, а затем закрывает документ и принтер.
Класс имеет четыре свойства: FNumberOfBytesWritten (количество байтов, записанных на принтер), FHandle (указатель на принтер), FPrinterOpen (флаг, указывающий, является ли принтер открыт) и FErrorString (строка ошибки, которая может использоваться для отладки).
Класс имеет три метода:
SetErrorString: устанавливает строку ошибки на основе последнего Windows API-ошибки.
write(const Str: string): пишет строку на принтер с помощью функции WriteFile. Он конвертирует входную строку в OEM-символы с помощью функции CharToOem и затем записывает ее на принтер.
WriteLn(const Str: string): пишет перенос строки, за которым следует указанный текст.
Класс также имеет конструктор, который инициализирует указатель на принтер в CreateFile('LPT1', ...), а также деструктор, который закрывает указатель на принтер при уничтожении объекта.
Замечания:
Код предполагает, что принтер уже установлен и настроен на системе.
Код использует функцию WritePrinter, которая пишет raw-данные на принтер. Это означает, что вам нужно убедиться, что ваш текст кодируется корректно (например, в OEM-символах) перед записью его на принтер.
Код не обрабатывает ошибки хорошо; если возникает ошибка при записи на принтер, программа будет выбрасывать исключение и завершаться.
Вы можете модифицировать процедуру WriteRawStringToPrinter для использования другого имени принтера или добавления дополнительной функциональности (например, печати нескольких страниц).
В целом, этот код предоставляет основу для записи текста на принтер с помощью Delphi. Вы можете расширить его для обработки более сложных сценариев, таких как печать изображений или форматирование текста с жирным или курсивом стилями.
Как отправить на принтер чистый поток данных под Windows, используя функции SpoolFile, Passthrough escape или WritePrinter, а также пример кода на Delphi для записи текста в принтер.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.