компилировал файл на 2-х разных пк с пайтоном, и пробовал запускать экзэшник на 2-х компах без пайтона результат одинаковый, печать не идет. принтер находит и дальше все. написал тестовый код который только создает файл пдф и печатает его. Печать не проходит. В логах видно принтер, следующая строка которая выводит именно на печать не отрабатывает.
Уже начинаю думать может какое-то ограничение на использование win32print при компиляции …
import os
import random
import string
import win32print
import win32api
import logging
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
# Конфигурируем логгер
logging.basicConfig(filename='print_log.txt', level=logging.INFO)
def generate_random_phrase(length):
"""Генерирует случайную фразу заданной длины."""
return ''.join(random.choice(string.ascii_letters) for _ in range(length))
def save_to_pdf(phrase, file_path):
"""Сохраняет фразу в PDF файл."""
c = canvas.Canvas(file_path, pagesize=letter)
c.drawString(100, 750, phrase)
c.save()
def print_pdf(pdf_file_path, printer_name):
with open('logfile.txt', 'w') as file:
"""Печатает PDF файл на указанном принтере."""
try:
# Открываем принтер по имени
printer_handle = win32print.OpenPrinter(printer_name)
print("test 1:", printer_name, file=file)
# Печатаем документ
win32api.ShellExecute(0, "print", pdf_file_path, None, ".", 0)
logging.info("PDF printed successfully!")
print("test 2:", default_printer, file=file)
# Закрываем принтер
win32print.ClosePrinter(printer_handle)
# print("test 3:", printer_handle, file=file)
except Exception as e:
logging.error(f'Error occurred while printing: {str(e)}')
if __name__ == "__main__":
try:
# Генерируем случайную фразу
random_phrase = generate_random_phrase(20)
# Генерируем имя PDF файла
pdf_file_name = 'random_phrase.pdf'
pdf_file_path = os.path.join(os.getcwd(), pdf_file_name)
# Сохраняем фразу в PDF файл
save_to_pdf(random_phrase, pdf_file_path)
# Получаем имя принтера по умолчанию
default_printer = win32print.GetDefaultPrinter()
# Печатаем PDF файл
print_pdf(pdf_file_path, default_printer)
except Exception as e:
logging.error(f'Error occurred: {str(e)}')