Найти - Пользователи
Полная версия: pyinstaller + win32print
Начало » Python для новичков » pyinstaller + win32print
1
Wild_Tigra
Всем привет, скажу сразу, я в программировании новичек, использую GPT чат в основном. Суть проблемы, есть код на пайтоне, и он работает. Но когда компилирую его в экзэшник и переношу на другую машину , перестает отправлять на печать. в коде использую import win32print. При компиляции не вижу нигде упоминания что такой метод добавлен в мой исполняемый файл.
Ошибок никаких нет, просто не печатате и все, хотя сам принтер находит, прописал чтоб в лог выводило.
Подскажите кто сталкивался с такой проблемой? как решить или обойти другим путем.
Спасибо.
ZerG
ну как ? добавляй логи и смотри что происходит
собери в конце концом не как консольное приложение пусть при запуске открывает терминал и туда тебе пишет ошибку
Wild_Tigra
компилировал файл на 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
Сам отвечу на свой вопрос. Так как я не силен пока в программировании, то не до конца понимаю принцип работы, и вот оказалось что все таки метод win32print компилируется нормально, просто на тех ПК на которых я тестировал (это были обычные почти чистые тестовые машины), там не установлен никакой пдф ридер. А для печати файла пдф, его нужно было открыть чем-то и послать на печать и получается что винда не знала чем открывать. Хотя если просто под виндой, то обычным браузером открывалось без проблем. поэтому не сразу понял причину. Всем спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB