Skip to content

Releases: doc-bricks/UniversalInvoiceMail

v2.3.0 - DATEV Export

02 May 22:02

Choose a tag to compare

Changelog - UniversalInvoiceMail

Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

[2.3.0] - 2026-05-02

Added

  • DATEV-Export: Rechnungen als DATEV-Buchungsstapel (CSV, cp1252) exportieren
  • Invoice.amount Feld: Rechnungsbetrag direkt in der Tabelle editierbar
  • DATEVSettingsDialog: Berater-Nr. und Mandant-Nr. konfigurierbar

Changed

  • NEU: Nicht-PDF-Anhänge werden jetzt zentral in PDF-Archive umgewandelt
    • Unterstützt Bilddateien (.png/.jpg/.jpeg/.bmp/.tif/.tiff/.webp)
    • Unterstützt .xlsx direkt und .docx wenn python-docx installiert ist
    • Gleiche Konvertierungslogik für Gmail API und IMAP
    • Unterstützt .doc/.xls optional via Word/Excel-COM oder LibreOffice
  • TESTS: Neue Abdeckung für Dateityp-Erkennung, XLSX-Konvertierung, Legacy-Fallbacks und Nicht-PDF-Anhänge in Gmail/IMAP
  • HINWEIS: Wenn weder pywin32/Office noch LibreOffice lokal verfügbar sind, werden .doc/.xls weiterhin sauber mit Hinweis übersprungen

[2.2.3] - 2026-01-16 - Portable Tesseract

  • NEU: Automatische Erkennung von portablem Tesseract
    • Sucht nach tesseract_portable/tesseract.exe im Anwendungsordner
    • Setzt automatisch pytesseract.tesseract_cmd
    • Setzt automatisch TESSDATA_PREFIX Umgebungsvariable
  • Vorhandene Sprachdaten: deu.traineddata, eng.traineddata
    • Deutsch + Englisch OCR funktioniert out-of-the-box
  • Keine systemweite Tesseract-Installation nötig!
    • Einfach tesseract_portable Ordner mitliefern

[2.2.2] - 2026-01-16 - Poppler entfernt

  • ENTFERNT: pdf2image und Poppler-Abhängigkeit
    • Poppler musste separat installiert werden (umständlich auf Windows)
  • NEU: pypdfium2 für PDF-zu-Bild Konvertierung
    • Alle Binaries sind im pip-Paket enthalten
    • Keine separate Installation nötig!
    • Schneller als pdf2image/Poppler
  • OCR-Installation jetzt einfacher:
    • pip install pytesseract pypdfium2 pypdf Pillow
    • Nur noch Tesseract OCR separat installieren

[2.2.1] - 2026-01-16 - OCR Enhancement

  • FIX: OCR läuft jetzt IMMER über Bilder (nicht nur wenn kein Text vorhanden)
    • Wichtig für Temu/Amazon: Text UND Bilder mit Artikelinfos
  • NEU: enhance_with_ocr() Methode im OCRProcessor
    • Original-PDF Layout bleibt erhalten (Browser-Rendering!)
    • OCR-Text wird als zusätzliche Seite am Ende angefügt
    • Überschrift "OCR-Erkannter Text aus Bildern"
    • Alle Seiten werden gescannt, Text wird zusammengefasst
  • OCR-Logik geändert:
    • Vorher: Nur wenn PDF <50 Zeichen Text hatte (has_text Check)
    • Jetzt: Immer wenn OCR aktiviert ist (scannt alle Bilder)

[2.2.0] - 2026-01-16 - Browser-Rendering

  • NEU: Dritter PDF-Modus "Browser (Edge/Chrome)" - Empfohlen!
    • Nutzt Headless Edge/Chrome für natives HTML-Rendering
    • Chrome DevTools Protocol (CDP) für PDF-Export
    • Beste Qualität: Bilder, Fonts, modernes CSS werden korrekt gerendert
    • Keine PermissionError bei externen Ressourcen
  • NEU: BrowserPDFRenderer Klasse
    • Automatischer Browser-Start (headless)
    • Versucht Edge zuerst, dann Chrome
    • Fallback zu xhtml2pdf wenn Browser fehlschlägt
  • NEU: webdriver-manager Integration
    • Automatischer Download des passenden WebDrivers
    • Keine manuelle Driver-Installation nötig
  • GUI: Browser-Modus nur sichtbar wenn Selenium installiert
  • Optionale Abhängigkeiten: selenium, webdriver-manager
    • pip install selenium webdriver-manager

[2.1.0] - 2026-01-16 - Zwei PDF-Modi mit OCR

  • NEU: PDF-Modus Auswahl in Einstellungen
    • "Schnell (nur Text)" = Standard, entfernt Bilder (stabil, schnell)
    • "Vollständig (mit Bildern)" = behält Bilder, schöner Output
  • NEU: OCR-Option für bildbasierte Mails (Temu, Amazon)
    • Checkbox "OCR für bildbasierte PDFs" in Einstellungen
    • Nutzt Tesseract + Poppler für Texterkennung
    • Nur wenn PDF keine Textebene hat (automatische Erkennung)
  • NEU: sanitize_html_for_pdf_full() für "Vollständig"-Modus
    • Behält Tags und inline Bilder (CID, Base64)
    • Entfernt nur Scripts und externe URLs
  • NEU: OCRProcessor Klasse (portiert von GmailDocsGrabberV5)
    • has_text() prüft ob PDF durchsuchbaren Text hat
    • add_text_layer() fügt OCR-Textebene hinzu
  • Optionale Abhängigkeiten: pytesseract, pdf2image, pypdf, Pillow
    • Poppler-Installation für Windows notwendig (pdf2image)

[2.0.2] - 2026-01-16 - PDF & Order-ID Fixes

  • FIX: 0KB PDF-Dateien werden jetzt gelöscht statt behalten
    • html_to_pdf() löscht leere Dateien bei Fehler
    • Verhindert "Datei existiert bereits" bei erneutem Durchlauf
  • FIX: Aggressivere HTML-Bereinigung für xhtml2pdf
    • <style> Tags komplett entfernt (modernes CSS crasht xhtml2pdf)
    • Inline style-Attribute entfernt
    • HTML-Kommentare entfernt
    • Control Characters (0x00-0x1F) entfernt
  • FIX: Order-ID Fallback nutzt jetzt MD5-Hash statt msg['id']
    • Verhindert "-collapse" und "-bottom" in Dateinamen
    • Diese kamen aus HTML-Fragmenten der Gmail Message ID

[2.0.1] - 2026-01-16 - Gemini Audit Fixes

  • FIX: IMAP Datumsformat Locale-Problem (RFC 3501)
    • Neue Funktion format_imap_date() mit englischen Monatsnamen
    • strftime("%d-%b-%Y") erzeugte auf DE-Systemen "Mai" statt "May"
    • IMAP-Server akzeptieren nur englische Monatsnamen
  • FIX: Base64 Padding-Berechnung mit Whitespaces
    • safe_b64decode() entfernt jetzt Newlines/Spaces vor len()
    • E-Mails enthalten oft Zeilenumbrüche in Base64-Strings
  • FIX: Gmail API Rate Limiting
    • time.sleep(0.1) nach messages().get() Aufrufen
    • time.sleep(0.05) nach attachments().get() Aufrufen
    • Verhindert HttpError 429 bei vielen Mails

[2.0.0] - 2026-01-16 - Audit-Fix Release

  • FIX #3: Inline-PDFs werden erkannt (data ohne attachmentId)
    • Temu/eBay PDFs die direkt base64-codiert sind werden jetzt gespeichert
  • FIX #7: IMAP BEFORE ist exklusiv -> +1 Tag addiert
    • date_to wird jetzt korrekt als "bis einschließlich" interpretiert
  • FIX #14: Order-ID Regex verschärft
    • UUIDs werden nicht mehr fälschlich als Bestellnummer erkannt
    • Längenbegrenzung auf 5-20 Zeichen
    • Erfordert Kontext-Keyword (Bestellnummer, Order, Invoice etc.)
  • FIX #12: Division by Zero in Progress bereits abgesichert
    • Guard "if t > 0 else 0" vorhanden

[1.9.2] - 2026-01-16

  • FIX: Vollständige HTML-Bereinigung VOR PDF-Konvertierung
    • Neue Funktion sanitize_html_for_pdf() entfernt:
      • Tags (Hauptursache für Windows PermissionError)
      • Tags (externe Stylesheets)
      • <script> Tags
      • @font-face und @import CSS-Regeln
      • url() Referenzen in CSS
      • Zero-Width-Spaces (\u200b, \u200c, \u200d, \ufeff)
    • link_callback bleibt als Fallback-Schutz
  • FIX: break_long_urls() deaktiviert (verursachte UnicodeEncodeError)
    • CSS word-break: break-all übernimmt URL-Umbruch

[1.9.1] - 2026-01-16

  • FIX: Korrupte PDFs behoben - link_callback blockiert externe Ressourcen
    • html_to_pdf nutzt jetzt pisa.CreatePDF mit link_callback=lambda: None
    • Keine TTFError/PermissionError mehr durch externe Fonts
    • Ersetzt problematische clean_html_for_pdf() Funktion (gelöscht)
  • FIX: 0-Byte Dateien werden in scan_folders_for_new_files() übersprungen
    • Korrupte/unvollständige Dateien werden nicht mehr importiert

[1.9.0] - 2026-01-16

  • FIX: Temu-Mails zeigen nun vollständigen HTML-Inhalt statt nur Fallback-Text
    • HTML wird bei multipart/alternative bevorzugt (Gmail API + IMAP)
  • FIX: Lange URLs brechen nun korrekt um (Zero-Width-Space Workaround für xhtml2pdf)
    • URLs in src/href bleiben unverändert (Bilder laden korrekt)
  • FIX: Typ-Spalte zeigt Emoji korrekt (Spaltenbreite 40px, zentriert)
  • FIX: Hash-Sync vor Download - alle PDFs im Ordner werden jetzt korrekt erkannt
    • Auch defekte/manuell hinzugefügte Dateien werden nicht erneut heruntergeladen
    • Neue Funktion _collect_folder_hashes() sammelt alle Hashes aus Zielordnern
  • FIX: Duplikat-Dateien werden jetzt in GUI importiert (Gemini-Fix)
    • Dateien mit bekanntem Hash werden nicht mehr übersprungen
    • Defekte Dateien sind sichtbar und löschbar in der GUI
    • Sender zeigt "Duplikat (Import)" zur Unterscheidung
  • Neue Funktion break_long_urls() für PDF-Lesbarkeit
  • Neue Funktion _get_all_body_parts() für rekursive Part-Sammlung

[1.8.1] - 2026-01-13

  • FIX: Header-Design nutzt jetzt Tabellen statt CSS-Gradient (xhtml2pdf kompatibel)
  • NEU: Body-Filter im Profil: "Body muss enthalten" und "Body darf nicht enthalten"
  • Beide Body-Filter sind optional (leer = kein Filter)
  • Kommasepariert = ODER-Verknüpfung

[1.8] - 2026-01-13

  • NEU: "Dem PDF den Mail-Body anhängen" Option in Einstellungen
  • NEU: Hybrid-Design für Body-PDFs mit Header (Datum, Betreff, Absender)
  • Bei aktivierter Option werden PDF-Anhänge + Mail-Body zu einer Datei gemerged
  • Body-PDFs erhalten jetzt einen designten Header-Bereich
  • Benötigt PyPDF2 für Merge-Funktion (Fallback: nur Original)

[1.7.5] - 2026-01-13

  • NEU: Typ-Symbol in Rechnungsliste (📎 = Anhang, 📄 = Body-PDF)
  • NEU: Blacklist-Feld im Profil "Darf NICHT enthalten"
  • Mails mit Blacklist-Begriffen in Betreff/Body werden übersprungen
  • Tooltip zeigt Typ-Bedeutung bei Hover

[1.6] - 2026-01-13

  • BUG-Fix: Dateiliste synchronisiert jetzt mit Dateisystem
  • Gelöschte Dateien werden automatisch aus Liste entfernt
  • Neue Methode save_invoices_db() für persistente Speicherung
  • Log-Ausgabe zeigt Anzahl entfernter Einträge

[1.5] - 2026-01-13

  • NEU: CSV Export Button - Rechnungsliste als CSV exportieren
  • CSV Format: Semikolon-getrennt, UTF-8 mit BOM (Excel-kompatibel)
  • Spalten: Datum, Profil/Shop, Absender, Betreff, Dateiname, Pfad
  • ROADMAP.txt erstellt für zukünftige Features

[1.4] - 2026-01-13

  • GUI: Von/Bis Datum-Auswahl mit Kalender-Popup
  • GUI: Schnellauswahl-Dropdown ("Letzte 12 Monate", "Dieses Jahr", etc.)
  • Datum-Auswahl: Gespeicherte Werte werden beim Start geladen
  • Bestellnummer: Wird jetzt auch aus Mail-Body extrahiert
  • Gmail/IMAP: Nutzt date_from/date_to s...
Read more