feat(rtl): rendu droite-a-gauche complet pour Word, PowerPoint, Excel et PDF
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m37s

- source unique RTL_LANGUAGES/is_rtl dans core/languages.py (fin des 3 copies)
- Word: bidi partout (corps, tableaux bidiVisual, notes/fin/commentaires,
  zones de texte, 6 zones d'en-tetes/pieds), insertion OOXML ordonnee,
  polices cs elargies aux 11 langues
- PowerPoint: alignements explicites preserves, notes du presentateur,
  indice de police <a:cs> insert a sa place
- Excel: feuilles affichees de droite a gauche, feuilles graphiques ignorees
- PDF: faconnage bidi (arabic-reshaper + python-bidi), polices par ecriture
  (arabe/hebreu), TTF enregistree pour le PDF recompose
- 46 tests nouveaux (tests/test_translators/test_rtl_layout.py), 253 au total
This commit is contained in:
2026-09-01 20:22:46 +02:00
parent fddd7b7428
commit f22f645fab
12 changed files with 1727 additions and 80 deletions

View File

@@ -11,7 +11,7 @@ spec.loader.exec_module(pdf_mod)
original_write = pdf_mod.PDFTranslator._write_translated_block
def debug_write(self, page, block, font_path, is_rtl):
def debug_write(self, page, block, font_path, rtl_target):
target_size = block['font_size']
original_rect = fitz.Rect(block['bbox'])
page_rect = page.rect
@@ -40,7 +40,7 @@ def debug_write(self, page, block, font_path, is_rtl):
text = block['translated'][:40]
is_heading_str = "HEAD" if is_heading else "BODY"
print(f" [{is_heading_str}] text={text!r} | orig={original_rect.width:.0f}x{original_rect.height:.0f} | exp_v={expanded_v.width:.0f}x{expanded_v.height:.0f} | size={target_size}", flush=True)
result = original_write(self, page, block, font_path, is_rtl)
result = original_write(self, page, block, font_path, rtl_target)
print(f" result: {result}", flush=True)
return result