В Python есть несколько способов печати на принтер, от простых до более сложных, в зависимости от ваших требований. Вот основные подходы:
1. Используя os. startfile (только Windows):
Этот метод самый простой, но он работает только на Windows. Он отправляет файл напрямую на принтер, используя ассоциацию файлов операционной системой.
Import os
File_to_print = "my_document. pdf" # Или ".txt", ".jpg" И Т.Д.
Try:
os. startfile(file_to_print, "print")
print(f"Файл {file_to_print} отправлен на печать.")
Except FileNotFoundError:
print(f"Файл {file_to_print} не найден.")
Except Exception as e:
print(f"Произошла ошибка при печати: {e}")
- Плюсы: Очень просто. Минусы: Работает только на Windows, зависит от ассоциаций файлов в ОС, нет контроля над настройками печати, требует наличия программы, умеющей открывать файл (например, для PDF нужен PDF-просмотрщик).
2. Используя модуль Subprocess (кроссплатформенный, но требует внешние утилиты):
Этот метод более гибкий и может работать на разных операционных системах, но требует установки дополнительных утилит печати.
- Linux/macOS (используя Lpr или Lp):
· import subprocess
·
· file_to_print = "my_document. pdf"
·
· try:
· # Используем lpr (Linux/macOS)
· subprocess. run(["lpr", file_to_print], check=True) # check=True Вызывает Исключение При Ошибке
· # Или, если lpr не установлен, можно использовать lp
· # subprocess. run(["lp", file_to_print], check=True)
· print(f"Файл {file_to_print} отправлен на печать (lpr/lp).")
· except FileNotFoundError:
· print("Утилита lpr/lp не найдена. Установите ее.")
· except subprocess. CalledProcessError as e:
· print(f"Произошла ошибка при печати: {e}")
· except Exception as e:
· print(f"Произошла ошибка: {e}")
Убедитесь, что утилита lpr или lp установлена в вашей системе (обычно она предустановлена в Linux и macOS).
- Windows (используя Print):
· import subprocess
·
· file_to_print = "my_document. txt" #Для txt Файлов
·
· try:
· subprocess. run(["print", file_to_print], shell=True, check=True) # shell=True Нужен Для Windows
· print(f"Файл {file_to_print} отправлен на печать (print).")
· except FileNotFoundError:
· print("Утилита print не найдена (что маловероятно).")
· except subprocess. CalledProcessError as e:
· print(f"Произошла ошибка при печати: {e}")
· except Exception as e:
· print(f"Произошла ошибка: {e}")
Внимание! print — это консольная команда Windows, работающая только с текстовыми файлами.
- Плюсы: Кроссплатформенный (с использованием соответствующих утилит), можно использовать для различных типов файлов. Минусы: Требуется установка внешних утилит, ограниченный контроль над настройками печати.
3. Используя Python Imaging Library (PIL) / Pillow (для печати изображений):
Если вам нужно печатать изображения, вы можете использовать библиотеку PIL/Pillow. Этот метод также может работать на разных операционных системах.
From PIL import Image
Import os
Def print_image(image_path):
try:
img = Image. open(image_path)
img. load() # Убедитесь, что изображение полностью загружено
img. show("Pillow Print") # Открывает изображение во временном окне для печати
print(f"Изображение {image_path} открыто для печати.")
except FileNotFoundError:
print(f"Файл {image_path} не найден.")
except Exception as e:
print(f"Произошла ошибка: {e}")
If __name__ == "__main__":
image_to_print = "my_image. png"
print_image(image_to_print)
- Плюсы: Кроссплатформенный, подходит для печати изображений. Минусы: Требует установки PIL/Pillow, ограниченный контроль над настройками печати, использует временное окно для выбора принтера и параметров. Обратите внимание, что img. show() использует системную программу для просмотра изображений, которая позволяет выбрать принтер и параметры печати.
4. Используя библиотеку PyPDF2 (для печати PDF-файлов — только просмотр):
PyPDF2 не предназначена для печати PDF-файлов напрямую. Она позволяет только читать, редактировать и манипулировать PDF-файлами. Но, как и в случае с изображениями, можно открыть файл с помощью программы просмотра PDF, установленной в системе, и уже через неё отправить на печать.
Import os
Import subprocess
Def open_pdf_for_printing(pdf_path):
"""Открывает PDF-файл в программе просмотра по умолчанию для печати."""
try:
if os. name == ‘nt’: # Windows
os. startfile(pdf_path, "print")
elif os. name == ‘posix’: # macOS and Linux
subprocess. run([‘open’, pdf_path]) # macOS
# subprocess. run([‘xdg-open’, pdf_path]) # Linux — Может Потребовать Установки xdg-utils
else:
print("Неизвестная операционная система. Невозможно открыть файл для печати.")
return
print(f"PDF-файл {pdf_path} открыт для печати в программе просмотра.")
except FileNotFoundError:
print(f"Файл {pdf_path} не найден.")
except Exception as e:
print(f"Ошибка при открытии PDF для печати: {e}")
- Плюсы: Работает на разных ОС (с некоторыми оговорками). Простота. Минусы: Не автоматизирует печать. Требует наличия программы просмотра PDF. Ограниченный контроль.
5. Используя библиотеки для прямого управления принтером (более сложный, но даёт полный контроль):
Для более продвинутого управления печатью (например, выбор принтера, установка параметров печати, создание пользовательских макетов) вам потребуется использовать библиотеки, которые обеспечивают прямой доступ к API печати операционной системы или к языкам описания страниц принтеров (например, PostScript).
- Pycups (для CUPS — Common Unix Printing System): Подходит для Linux и macOS (также может работать на Windows через CUPS). CUPS — это система печати, используемая в большинстве Unix-подобных операционных систем. Требует установки CUPS и библиотеки pycups. Python-escpos (для ESC/POS принтеров): Для печати на чековых принтерах, которые используют протокол ESC/POS. Win32print (только Windows): Предоставляет доступ к API печати Windows. Входит в пакет pywin32.
Использование этих библиотек требует более глубоких знаний о системах печати и API, но предоставляет максимальный контроль над процессом печати.
Пример Использования Win32print (Windows):
Import win32print
Import win32ui
Import win32con
Import os
Def print_text_to_printer(printer_name, text):
try:
hDC = win32ui. CreateDCFromHandle(win32print. OpenPrinterDC(printer_name))
hDC. StartDoc("Python Print Job")
hDC. StartPage()
# Настройки шрифта (пример)
font = win32ui. CreateFont({
"name": "Arial",
"height": 120, # Размер Шрифта
"weight": win32con. FW_NORMAL,
})
hDC. SelectObject(font)
hDC. TextOut(100, 100, text) # Координаты И Текст
hDC. EndPage()
hDC. EndDoc()
hDC. DeleteDC()
print(f"Текст отправлен на принтер {printer_name}")
except Exception as e:
print(f"Произошла ошибка при печати: {e}")
If __name__ == "__main__":
printer_name = win32print. GetDefaultPrinter() # Получаем Принтер По Умолчанию
text_to_print = "Hello, World! This is a test print from Python."
print_text_to_printer(printer_name, text_to_print)
- Плюсы: Полный контроль над процессом печати, включая выбор принтера, параметры печати, макет страницы. Минусы: Наиболее сложный метод, требует установки дополнительных библиотек и знаний API печати. Зависит от операционной системы.
Выбор метода:
- Для простой печати файлов на Windows: os. startfile. Для базовой кроссплатформенной печати файлов: subprocess с lpr/lp (Linux/macOS) или print (Windows). Для печати изображений: PIL/Pillow с img. show(). Для прямого управления принтером и расширенных функций: pycups (Linux/macOS) или win32print (Windows).
Важные замечания:
- Убедитесь, что необходимые библиотеки установлены (pip install pillow, pip install pywin32, pip install pycups). Для win32print требуется установить pywin32 и запустить python Scripts\pywin32_postinstall. py — install от имени администратора. В Linux/macOS убедитесь, что утилита lpr или lp установлена и доступна в командной строке. Для использования CUPS необходимо, чтобы CUPS был установлен и настроен.
Начните с простого метода и переходите к более сложным, если вам требуется больше контроля над процессом печати. Не забывайте обрабатывать исключения, чтобы ваша программа работала надежно.