Форум сайта python.su
Всем привет, скажу сразу, я в программировании новичек, использую GPT чат в основном. Суть проблемы, есть код на пайтоне, и он работает. Но когда компилирую его в экзэшник и переношу на другую машину , перестает отправлять на печать. в коде использую import win32print. При компиляции не вижу нигде упоминания что такой метод добавлен в мой исполняемый файл.
Ошибок никаких нет, просто не печатате и все, хотя сам принтер находит, прописал чтоб в лог выводило.
Подскажите кто сталкивался с такой проблемой? как решить или обойти другим путем.
Спасибо.
Офлайн
ну как ? добавляй логи и смотри что происходит
собери в конце концом не как консольное приложение пусть при запуске открывает терминал и туда тебе пишет ошибку
Офлайн
компилировал файл на 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)}')
Отредактировано Wild_Tigra (Май 10, 2024 00:53:25)
Офлайн
Сам отвечу на свой вопрос. Так как я не силен пока в программировании, то не до конца понимаю принцип работы, и вот оказалось что все таки метод win32print компилируется нормально, просто на тех ПК на которых я тестировал (это были обычные почти чистые тестовые машины), там не установлен никакой пдф ридер. А для печати файла пдф, его нужно было открыть чем-то и послать на печать и получается что винда не знала чем открывать. Хотя если просто под виндой, то обычным браузером открывалось без проблем. поэтому не сразу понял причину. Всем спасибо.
Офлайн