Уведомления

Группа в Telegram: @pythonsu

#1 Май 9, 2024 15:25:42

Wild_Tigra
Зарегистрирован: 2024-05-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pyinstaller + win32print

Всем привет, скажу сразу, я в программировании новичек, использую GPT чат в основном. Суть проблемы, есть код на пайтоне, и он работает. Но когда компилирую его в экзэшник и переношу на другую машину , перестает отправлять на печать. в коде использую import win32print. При компиляции не вижу нигде упоминания что такой метод добавлен в мой исполняемый файл.
Ошибок никаких нет, просто не печатате и все, хотя сам принтер находит, прописал чтоб в лог выводило.
Подскажите кто сталкивался с такой проблемой? как решить или обойти другим путем.
Спасибо.

Офлайн

#2 Май 9, 2024 21:36:17

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

pyinstaller + win32print

ну как ? добавляй логи и смотри что происходит
собери в конце концом не как консольное приложение пусть при запуске открывает терминал и туда тебе пишет ошибку



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Май 10, 2024 00:50:30

Wild_Tigra
Зарегистрирован: 2024-05-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pyinstaller + 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)

Офлайн

#4 Май 10, 2024 23:24:39

Wild_Tigra
Зарегистрирован: 2024-05-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

pyinstaller + win32print

Сам отвечу на свой вопрос. Так как я не силен пока в программировании, то не до конца понимаю принцип работы, и вот оказалось что все таки метод win32print компилируется нормально, просто на тех ПК на которых я тестировал (это были обычные почти чистые тестовые машины), там не установлен никакой пдф ридер. А для печати файла пдф, его нужно было открыть чем-то и послать на печать и получается что винда не знала чем открывать. Хотя если просто под виндой, то обычным браузером открывалось без проблем. поэтому не сразу понял причину. Всем спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version