|
|
| """
|
| Simple test runner for template.docx conversion
|
| Tests only the core functionality without LibreOffice
|
| """
|
|
|
| import os
|
| import sys
|
| from pathlib import Path
|
|
|
|
|
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
| from app import (
|
| validate_docx_structure,
|
| preprocess_docx_for_perfect_conversion,
|
| analyze_template_font_sizes,
|
| setup_local_arial_font
|
| )
|
|
|
| def main():
|
| """Test the template conversion system"""
|
| print("🎯 Template.docx Conversion System Test")
|
| print("=" * 50)
|
|
|
|
|
| script_dir = Path(__file__).parent.absolute()
|
| print(f"📁 Script directory: {script_dir}")
|
|
|
|
|
| print("📁 Checking required files...")
|
|
|
| arial_path = script_dir / "arial.ttf"
|
| template_path = script_dir / "template.docx"
|
|
|
| if not arial_path.exists():
|
| print(f"❌ Arial font not found: {arial_path}")
|
| return False
|
| print(f"✅ Arial font found: {arial_path}")
|
|
|
| if not template_path.exists():
|
| print(f"❌ Template not found: {template_path}")
|
| return False
|
| print(f"✅ Template found: {template_path}")
|
|
|
|
|
| print("\n🔤 Setting up Arial font...")
|
| if setup_local_arial_font():
|
| print("✅ Arial font setup successful")
|
| else:
|
| print("⚠️ Arial font setup had issues (may still work)")
|
|
|
|
|
| print("\n📏 Analyzing template font sizes...")
|
| font_mapping = analyze_template_font_sizes(str(template_path))
|
|
|
| if font_mapping:
|
| print(f"✅ Found {len(font_mapping)} text patterns with font sizes")
|
|
|
|
|
| important_patterns = {
|
| 'size_12': ['{{serial_number}}', '{{date}}', 'الرقم التسلسلي', 'التاريخ'],
|
| 'size_13': ['{{name_1}}', '{{location_1}}', 'اسم المالك', 'يسكن'],
|
| 'size_14': ['الطرف البائع', 'الطرف المشتري']
|
| }
|
|
|
| for size_name, patterns in important_patterns.items():
|
| found_patterns = []
|
| for pattern in patterns:
|
| for text, size in font_mapping.items():
|
| if pattern in text:
|
| found_patterns.append(f"{pattern}→{size}pt")
|
| break
|
|
|
| if found_patterns:
|
| print(f" • {size_name}: {', '.join(found_patterns[:3])}")
|
| else:
|
| print("❌ Font size analysis failed")
|
| return False
|
|
|
|
|
| print("\n🔍 Validating DOCX structure...")
|
| validation_info = validate_docx_structure(str(template_path))
|
|
|
| print(f"✅ Validation completed:")
|
| print(f" • Tables: {validation_info.get('has_tables', False)}")
|
| print(f" • Images: {validation_info.get('has_images', False)}")
|
| print(f" • RTL content: {validation_info.get('rtl_content_detected', False)}")
|
| print(f" • Placeholders: {validation_info.get('placeholder_count', 0)}")
|
| print(f" • Font families: {len(validation_info.get('font_families', set()))}")
|
|
|
|
|
| print("\n🔧 Testing preprocessing...")
|
| try:
|
| processed_path = preprocess_docx_for_perfect_conversion(str(template_path), validation_info)
|
|
|
| if processed_path != str(template_path):
|
| print("✅ Preprocessing applied successfully")
|
| print(f" • Font settings applied")
|
| print(f" • Arial font set as default")
|
| print(f" • Specific font sizes applied")
|
|
|
|
|
| try:
|
| os.unlink(processed_path)
|
| print(" • Temporary file cleaned up")
|
| except:
|
| pass
|
| else:
|
| print("ℹ️ No preprocessing needed")
|
|
|
| except Exception as e:
|
| print(f"❌ Preprocessing failed: {e}")
|
| return False
|
|
|
|
|
| print("\n" + "=" * 50)
|
| print("🎉 Template Conversion System Ready!")
|
| print("\n📋 Summary:")
|
| print("✅ Arial font from fonts/ directory will be used")
|
| print("✅ Font sizes will be preserved:")
|
| print(" • Size 12: Serial numbers, dates, times")
|
| print(" • Size 13: Names, IDs, locations, phones")
|
| print(" • Size 14: 'الطرف البائع', 'الطرف المشتري'")
|
| print(" • Size 12: All other text (default)")
|
| print("✅ RTL Arabic text will be handled correctly")
|
| print("✅ Tables and images will be preserved")
|
| print(f"✅ {validation_info.get('placeholder_count', 0)} placeholders will be maintained")
|
|
|
| print("\n🚀 To use the system:")
|
| print("1. Run: python app.py")
|
| print("2. Open the Gradio interface")
|
| print("3. Upload template.docx")
|
| print("4. Download the converted PDF")
|
|
|
| return True
|
|
|
| if __name__ == "__main__":
|
| success = main()
|
| if success:
|
| print("\n✅ All tests passed! System is ready to use.")
|
| else:
|
| print("\n❌ Some tests failed. Please check the setup.")
|
|
|
| input("\nPress Enter to exit...")
|
| sys.exit(0 if success else 1)
|
|
|