Есть ли лучший способ распечатать файл .JPG с помощью Python?Python

Программы на Python
Ответить
Anonymous
 Есть ли лучший способ распечатать файл .JPG с помощью Python?

Сообщение Anonymous »

(первый пост, возможно, не очень удачный):
Я работаю в автомобильной компании и в настоящее время разрабатываю новую систему отслеживания информации о наших запчастях. . Я пишу простое программное обеспечение для установки на низкоуровневые компьютеры на стороне линии, которые используются для ввода информации и печати этикеток для внутреннего отслеживания.
Цель состоит в том, чтобы использовать выбранную мной Библиотека графического интерфейса Python для получения информации о детали от оператора, а затем используйте модули QRCode и PIL.Image для создания этикетки в виде файла .JPG. Все это работает нормально. Этикетки генерируются именно так, как я хочу, сохраняются на машине и т. д.
Кажется, часть, которую я не могу получить, — это печать. Большинство решений, которые я нашел и опробовал, открывают файл в диалоговом окне печати и требуют от оператора нажатия «Печать» или выполнения какого-либо действия по вводу. Я не хочу этого; это открывает возможности для ошибок оператора и других проблем с форматом этикеток.
TL;DR:
Есть ли хороший способ отправить команду печати в ОС из Python БЕЗ с помощью системного диалога или подсказки? Я включаю то, что я пробовал, и свое текущее решение.
ОС: Windows; Язык: Python 3.12.6
Первое решение:
Я попробовал использовать os.startfile( ) с операцией print, но это создало вышеупомянутую проблему с диалоговым окном:

Код: Выделить всё

from os import path, getcwd, startfile
...
# Attempt to open label.jpg file with 'print' operation
try:
startfile(file_path, "print")
# label.jpg file couldn't be found/opened
except FileNotFoundError:
...
Второе решение (текущее):
После этого я рассмотрел возможность использования библиотеки win32print. Это продвинуло меня немного дальше, но я озадачен ошибкой...

Код: Выделить всё

from PIL import Image, ImageDraw, ImageFont, ImageWin
from os import path, getcwd, startfile
import win32print
...
# prints a passed label
def print_label(filepath: str | bytes) -> None:
"""
Accepts a filepath that is opened and printed.
"""
# print the label at the passed filepath
try:
# open the label from the passed filepath
label = Image.open(filepath)
# get the default printer
printer_name = win32print.GetDefaultPrinter()
# create a printer from the default printer name
printer = win32print.OpenPrinter(printer_name)
# create a document printer
doc_printer = win32print.StartDocPrinter(printer, 1, (filepath, None, "RAW"))
# start the printer
win32print.StartPagePrinter(doc_printer)
# rotate the image to improve orientation
label = label.rotate(90, expand = True)
# save the new width and height
width, height = label.size
# draw the image on the printer
bitmap = ImageWin.Dib(label)
bitmap.draw(doc_printer, (0, 0, width, height))
# end the print job
win32print.EndPagePrinter(doc_printer)
win32print.EndDocPrinter(doc_printer)
win32print.ClosePrinter(printer)
# there was an error printing the label
except OSError as ex:
# if the code is 1155 (no printing application assigned)
if ex.winerror == 1155:
# show a popup warning the user
...
# else show a popup with the error
else:
...
Вывод и ошибка:

Код: Выделить всё

Default Printer: \\[servername]\[printername]
Printer Object:
Initialized Printer: 199
Traceback (most recent call last):
File "\\...\wip_label_generator.py", line 290, in generate_labels
print_label(label)
File "\\...\wip_label_generator.py", line 36, in print_label
win32print.StartPagePrinter(doc_printer)
pywintypes.error: (6, 'StartPagePrinter', 'The handle is invalid.')
Вывод:
Есть ли какая-то причина, по которой это не работает? Кажется, я не могу найти краткое или применимое объяснение этой ошибки, возникающей в этой области. Мне кажется, что это связано с тем, как я инициализирую DocPrinter, но я, честно говоря, в тупике.
Если есть лучший способ выполнить эту операцию прямой печати, пожалуйста, скажи мне. Я уверен, что это возможно, используя subprocess.run() или что-то подобное. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ith-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»