Я хочу создать сценарий на любом языке, чтобы перехватывать задание на печать документа и печатать на нем динамически генерируемый QR-код до того, как задание на печать будет обработано. Есть ли какие-нибудь решения?
Я уже разработал скрипт Python, но он не работает должным образом. Мне нужны какие-либо рекомендации, чтобы этот скрипт работал или использовал какие-либо другие подходы для достижения необходимого результата.
import win32print
import win32api
import tempfile
import os
import time
from PIL import Image, ImageDraw
import qrcode
import ctypes
import sys
processed_jobs = set() # Track processed jobs
def is_admin():
"""Check if the script is running as an administrator."""
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def generate_qr_code(data):
"""Generate a QR code image."""
print("Generating QR code...")
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white")
print("QR code generated successfully.")
return qr_image
def inject_qr_to_document(original_doc, qr_image):
"""Inject QR code into the original document and preview it."""
print("Injecting QR code into the original document...")
qr_size = 300
qr_position = (original_doc.width - qr_size - 50, original_doc.height - qr_size - 50)
qr_image = qr_image.resize((qr_size, qr_size))
original_doc.paste(qr_image, qr_position)
print("QR code injected successfully.")
# Preview the modified document
print("Previewing the modified document...")
original_doc.show() # This will open the image in the default image viewer
return original_doc
def cancel_print_job(printer_name, job_id):
"""Cancel the print job."""
print(f"Cancelling print job ID {job_id} on printer {printer_name}...")
try:
# Open printer handle
hprinter = win32print.OpenPrinter(printer_name)
# Cancel the print job using SetJob
win32print.SetJob(hprinter, job_id, 0, None, win32print.JOB_CONTROL_DELETE)
print(f"Print job {job_id} cancelled successfully.")
# Close printer handle
win32print.ClosePrinter(hprinter)
except Exception as e:
print(f"Failed to cancel print job {job_id}: {e}")
def process_print_job(printer_name, job_id, qr_data):
"""Process the print job, inject QR code, and preview the modified document."""
print(f"Processing print job with ID {job_id} on printer {printer_name}...")
try:
# Generate QR code
qr_image = generate_qr_code(qr_data)
# Create a simulated document for the example
original_doc = Image.new("RGB", (2480, 3508), "white") # A simulated A4 page
draw = ImageDraw.Draw(original_doc)
draw.text((100, 100), f"Document: Simulated Content", fill="black")
# Inject QR code into document and preview
modified_doc = inject_qr_to_document(original_doc, qr_image)
# Save the modified document to a temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix=".bmp") as temp_file:
modified_doc.save(temp_file.name, "BMP")
print(f"Modified document saved to: {temp_file.name}")
# Note: You can send this modified file to the printer if needed, but for this case, we stop here.
except Exception as e:
print(f"Error processing print job: {e}")
def monitor_printer(printer_name, qr_data):
"""Monitor the printer for new print jobs."""
print(f"Monitoring printer: {printer_name}...")
hprinter = win32print.OpenPrinter(printer_name)
try:
while True:
jobs = win32print.EnumJobs(hprinter, 0, -1, 1)
for job in jobs:
job_id = job["JobId"]
if job_id not in processed_jobs:
processed_jobs.add(job_id)
print(f"New job detected: ID {job_id}")
cancel_print_job(printer_name, job_id) # Cancel the original job
process_print_job(printer_name, job_id, qr_data)
time.sleep(5) # Check periodically
finally:
win32print.ClosePrinter(hprinter)
print("Stopped monitoring.")
if __name__ == "__main__":
# Ensure the script runs with administrative privileges
if not is_admin():
print("Restarting with administrator privileges...")
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
sys.exit()
try:
print("Initializing script...")
default_printer = win32print.GetDefaultPrinter()
print(f"Default printer detected: {default_printer}")
qr_data = "Cairo Exchange Coprporate"
monitor_printer(default_printer, qr_data)
except Exception as e:
print(f"An error occurred: {e}")
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Как сгенерировать QR-код и внедрить его в документ перед печатью в Python ⇐ Python
Программы на Python
1735120947
Anonymous
Я хочу создать сценарий на любом языке, чтобы перехватывать задание на печать документа и печатать на нем динамически генерируемый QR-код до того, как задание на печать будет обработано. Есть ли какие-нибудь решения?
Я уже разработал скрипт Python, но он не работает должным образом. Мне нужны какие-либо рекомендации, чтобы этот скрипт работал или использовал какие-либо другие подходы для достижения необходимого результата.
import win32print
import win32api
import tempfile
import os
import time
from PIL import Image, ImageDraw
import qrcode
import ctypes
import sys
processed_jobs = set() # Track processed jobs
def is_admin():
"""Check if the script is running as an administrator."""
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def generate_qr_code(data):
"""Generate a QR code image."""
print("Generating QR code...")
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white")
print("QR code generated successfully.")
return qr_image
def inject_qr_to_document(original_doc, qr_image):
"""Inject QR code into the original document and preview it."""
print("Injecting QR code into the original document...")
qr_size = 300
qr_position = (original_doc.width - qr_size - 50, original_doc.height - qr_size - 50)
qr_image = qr_image.resize((qr_size, qr_size))
original_doc.paste(qr_image, qr_position)
print("QR code injected successfully.")
# Preview the modified document
print("Previewing the modified document...")
original_doc.show() # This will open the image in the default image viewer
return original_doc
def cancel_print_job(printer_name, job_id):
"""Cancel the print job."""
print(f"Cancelling print job ID {job_id} on printer {printer_name}...")
try:
# Open printer handle
hprinter = win32print.OpenPrinter(printer_name)
# Cancel the print job using SetJob
win32print.SetJob(hprinter, job_id, 0, None, win32print.JOB_CONTROL_DELETE)
print(f"Print job {job_id} cancelled successfully.")
# Close printer handle
win32print.ClosePrinter(hprinter)
except Exception as e:
print(f"Failed to cancel print job {job_id}: {e}")
def process_print_job(printer_name, job_id, qr_data):
"""Process the print job, inject QR code, and preview the modified document."""
print(f"Processing print job with ID {job_id} on printer {printer_name}...")
try:
# Generate QR code
qr_image = generate_qr_code(qr_data)
# Create a simulated document for the example
original_doc = Image.new("RGB", (2480, 3508), "white") # A simulated A4 page
draw = ImageDraw.Draw(original_doc)
draw.text((100, 100), f"Document: Simulated Content", fill="black")
# Inject QR code into document and preview
modified_doc = inject_qr_to_document(original_doc, qr_image)
# Save the modified document to a temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix=".bmp") as temp_file:
modified_doc.save(temp_file.name, "BMP")
print(f"Modified document saved to: {temp_file.name}")
# Note: You can send this modified file to the printer if needed, but for this case, we stop here.
except Exception as e:
print(f"Error processing print job: {e}")
def monitor_printer(printer_name, qr_data):
"""Monitor the printer for new print jobs."""
print(f"Monitoring printer: {printer_name}...")
hprinter = win32print.OpenPrinter(printer_name)
try:
while True:
jobs = win32print.EnumJobs(hprinter, 0, -1, 1)
for job in jobs:
job_id = job["JobId"]
if job_id not in processed_jobs:
processed_jobs.add(job_id)
print(f"New job detected: ID {job_id}")
cancel_print_job(printer_name, job_id) # Cancel the original job
process_print_job(printer_name, job_id, qr_data)
time.sleep(5) # Check periodically
finally:
win32print.ClosePrinter(hprinter)
print("Stopped monitoring.")
if __name__ == "__main__":
# Ensure the script runs with administrative privileges
if not is_admin():
print("Restarting with administrator privileges...")
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
sys.exit()
try:
print("Initializing script...")
default_printer = win32print.GetDefaultPrinter()
print(f"Default printer detected: {default_printer}")
qr_data = "Cairo Exchange Coprporate"
monitor_printer(default_printer, qr_data)
except Exception as e:
print(f"An error occurred: {e}")
Подробнее здесь: [url]https://stackoverflow.com/questions/79307323/how-to-generate-qr-code-and-inject-it-to-document-before-printing-it-in-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия