Files
adaptronic_label-printer/documentation/demo_pdf_system.py

238 lines
7.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Demo: PDF Label Generation System
Shows how to use the new PDF-based label printing system
"""
import os
import sys
# Add current directory to path
sys.path.insert(0, os.path.dirname(__file__))
from print_label_pdf import PDFLabelGenerator, create_label_pdf_file
from print_label import print_label_standalone, create_label_pdf
def demo_basic_pdf_generation():
"""Demo 1: Basic PDF generation"""
print("=" * 60)
print("DEMO 1: Basic PDF Label Generation")
print("=" * 60)
# Create a simple label
pdf_file = create_label_pdf_file(
text="SAP-12345|Qty:100|LOT-ABC",
filename="demo_label_basic.pdf"
)
print(f"✓ Generated: {pdf_file}")
print(f"✓ File size: {os.path.getsize(pdf_file)} bytes")
print()
def demo_custom_dimensions():
"""Demo 2: Custom label dimensions"""
print("=" * 60)
print("DEMO 2: Custom Label Dimensions")
print("=" * 60)
# Create generator with custom size (smaller label)
generator = PDFLabelGenerator(label_width=6, label_height=4, dpi=300)
pdf_file = generator.create_label_pdf(
sap_nr="SAP-67890",
cantitate="Qty:250",
lot_number="LOT-XYZ",
filename="demo_label_custom.pdf"
)
print(f"✓ Custom 6cm × 4cm label generated")
print(f"✓ File: {pdf_file}")
print(f"✓ File size: {os.path.getsize(pdf_file)} bytes")
print()
def demo_batch_generation():
"""Demo 3: Batch label generation"""
print("=" * 60)
print("DEMO 3: Batch Label Generation")
print("=" * 60)
labels_data = [
("SAP-001", "Qty:100", "LOT-A"),
("SAP-002", "Qty:200", "LOT-B"),
("SAP-003", "Qty:300", "LOT-C"),
("SAP-004", "Qty:150", "LOT-D"),
]
generator = PDFLabelGenerator()
generated_files = []
for idx, (sap, qty, lot) in enumerate(labels_data, 1):
pdf_file = generator.create_label_pdf(
sap_nr=sap,
cantitate=qty,
lot_number=lot,
filename=f"demo_batch_label_{idx:02d}.pdf"
)
generated_files.append(pdf_file)
print(f" [{idx}] Generated {pdf_file}")
total_size = sum(os.path.getsize(f) for f in generated_files)
print(f"\n✓ Total: {len(generated_files)} labels generated")
print(f"✓ Combined size: {total_size} bytes")
print()
def demo_high_dpi():
"""Demo 4: High DPI for ultra-quality printing"""
print("=" * 60)
print("DEMO 4: High DPI Generation (600 DPI)")
print("=" * 60)
# Create generator with higher DPI for premium printing
generator = PDFLabelGenerator(label_width=8.5, label_height=6, dpi=600)
pdf_file = generator.create_label_pdf(
sap_nr="SAP-PREMIUM",
cantitate="Qty:500",
lot_number="LOT-PREMIUM",
filename="demo_label_600dpi.pdf"
)
print(f"✓ 600 DPI Ultra-quality label generated")
print(f"✓ File: {pdf_file}")
print(f"✓ File size: {os.path.getsize(pdf_file)} bytes")
print(f"✓ Use this for color-critical or high-volume production")
print()
def demo_api_usage():
"""Demo 5: Using the convenience API"""
print("=" * 60)
print("DEMO 5: Convenience API Usage")
print("=" * 60)
# Method 1: Simple function
print("Method 1: Using print_label_standalone()")
print(" Usage: print_label_standalone(text, printer, preview=0, use_pdf=True)")
print()
# Method 2: Direct PDF creation
print("Method 2: Using create_label_pdf()")
pdf_file = create_label_pdf("SAP-TEST|Qty:999|LOT-TEST")
print(f" ✓ Generated: {pdf_file}")
print()
# Method 3: Generator class
print("Method 3: Using PDFLabelGenerator class")
print(" Usage:")
print(" generator = PDFLabelGenerator()")
print(" pdf = generator.create_label_pdf(sap_nr, qty, lot, filename)")
print()
def demo_comparison():
"""Demo 6: PNG vs PDF comparison"""
print("=" * 60)
print("DEMO 6: PNG vs PDF Comparison")
print("=" * 60)
from print_label import create_label_image
# Generate PNG
png_img = create_label_image("SAP-CMP|Qty:100|LOT-CMP")
png_file = "demo_comparison_png.png"
png_img.save(png_file)
png_size = os.path.getsize(png_file)
# Generate PDF
pdf_file = create_label_pdf_file("SAP-CMP|Qty:100|LOT-CMP", "demo_comparison_pdf.pdf")
pdf_size = os.path.getsize(pdf_file)
print("File Size Comparison:")
print(f" PNG: {png_size:,} bytes")
print(f" PDF: {pdf_size:,} bytes")
print(f" Savings: {png_size - pdf_size:,} bytes ({((png_size-pdf_size)/png_size)*100:.1f}%)")
print()
print("Quality Comparison:")
print(" PNG: Rasterized, fixed resolution")
print(" PDF: Vector-based, infinite scalability")
print()
print("Recommended Use:")
print(" ✓ Use PDF for production printing (recommended)")
print(" ✓ Use PNG for legacy systems or special cases")
print()
def cleanup_demo_files():
"""Clean up generated demo files"""
print("=" * 60)
print("Cleaning up demo files...")
print("=" * 60)
demo_files = [
"demo_label_basic.pdf",
"demo_label_custom.pdf",
"demo_batch_label_01.pdf",
"demo_batch_label_02.pdf",
"demo_batch_label_03.pdf",
"demo_batch_label_04.pdf",
"demo_label_600dpi.pdf",
"demo_comparison_png.png",
"demo_comparison_pdf.pdf",
]
for filename in demo_files:
if os.path.exists(filename):
os.remove(filename)
print(f" ✓ Removed {filename}")
print("\n✓ Cleanup complete")
print()
if __name__ == "__main__":
print("\n")
print("" + "" * 58 + "")
print("" + " " * 58 + "")
print("" + " PDF Label Generation System - Comprehensive Demo".center(58) + "")
print("" + " " * 58 + "")
print("" + "" * 58 + "")
print("\n")
try:
# Run all demos
demo_basic_pdf_generation()
demo_custom_dimensions()
demo_batch_generation()
demo_high_dpi()
demo_api_usage()
demo_comparison()
# Ask about cleanup
print("\nDo you want to clean up demo files? (y/n): ", end="")
# For automated testing, auto-cleanup
cleanup_demo_files()
print("\n" + "=" * 60)
print("✓ All demos completed successfully!")
print("=" * 60)
print("\nKey Takeaways:")
print(" 1. PDF generation is the recommended format for printing")
print(" 2. Supports custom dimensions and DPI settings")
print(" 3. File sizes are comparable to PNG with better quality")
print(" 4. Batch processing is simple and efficient")
print(" 5. Full backward compatibility with PNG option")
print("\nFor more information, see PDF_UPGRADE_GUIDE.md")
print()
except Exception as e:
print(f"\n❌ Error during demo: {e}")
import traceback
traceback.print_exc()
sys.exit(1)