Wir freuen uns, die Veröffentlichung von GroupDocs.Parser for Python v26.10 bekannt zu geben, verfügbar seit November 2026. Dieses Release aktualisiert die zugrunde liegende Engine auf Version 26.8 und wechselt von .NET Core 3.1 zu .NET 10.0.14, wobei zwei Denial-of-Service‑Schwachstellen in System.Security.Cryptography.Pkcs behoben werden. Es führt wichtige neue Funktionen ein, darunter das Extrahieren von Anmerkungen, das Parsen von HTML‑Tabellen, OCR für Arabisch und Koreanisch, ein Python‑Logger, die Handhabung externer Ressourcen, Vorschau‑Callbacks als einfache Funktionen und ein groupdocs-parser‑Kommandozeilen‑Tool. Das Wheel ist jetzt ein reines Python‑Paket, das Python 3.5 – 3.14 unterstützt, mit aktualisierten Plattform‑Tags (manylinux_2_27_x86_64, macosx_13_0_*) und der Entfernung des 32‑Bit‑Windows‑Wheels.

Was ist neu in diesem Release

  • [Feature] Unterstützung für das Extrahieren von Anmerkungen mit get_annotations() und TextOptions.include_annotations hinzufügen (PARSERPYTHONNET-23)
  • [Feature] Das groupdocs-parser‑Kommandozeilen‑Tool hinzufügen (PARSERPYTHONNET-24)
  • [Feature] Unterstützung für ein Python‑Logger‑Objekt, das ILogger implementiert, hinzufügen (PARSERPYTHONNET-25)
  • [Feature] Unterstützung für das Laden externer Ressourcen aus Python hinzufügen (PARSERPYTHONNET-26)
  • [Feature] OCR für Arabisch und Koreanisch hinzufügen (PARSERPYTHONNET-27)
  • [Feature] Unterstützung für das Extrahieren von Tabellen aus HTML‑Dokumenten hinzufügen (PARSERPYTHONNET-28)
  • [Feature] Unterstützung für das Anwenden der Lizenz aus der Umgebungsvariable GROUPDOCS_LIC_PATH hinzufügen (PARSERPYTHONNET-36)
  • [Enhancement] GroupDocs.Parser auf 26.8 und die eingebettete Runtime auf .NET 10.0.14 aktualisieren (PARSERPYTHONNET-29)
  • [Enhancement] Ein reines Python‑Paket für Python 3.5 – 3.14 anstelle der kompilierten Erweiterung bereitstellen (PARSERPYTHONNET-30)
  • [Enhancement] Vorschau‑Callbacks an PreviewOptions als einfache Python‑Funktionen übergeben (PARSERPYTHONNET-31)
  • [Enhancement] Zuweisungen an unbekannte Attribute von API‑Objekten ablehnen (PARSERPYTHONNET-32)
  • [Enhancement] Die Plattform‑Tags auf glibc 2.27 und macOS 13 aktualisieren und das 32‑Bit‑Windows‑Wheel entfernen (PARSERPYTHONNET-33)
  • [Enhancement] GroupDocsParserException und seine Unterklassen anstelle von RuntimeError auslösen (PARSERPYTHONNET-34)
  • [Enhancement] System.Security.Cryptography.Pkcs auf 10.0.14 aktualisieren, wodurch zwei Denial-of-Service‑Schwachstellen behoben werden (PARSERPYTHONNET-37)
  • [Fix] Einige Word‑ und RTF‑Dokumente schlagen mit The document appears to be corrupted fehl oder es fehlt die SkiaSharp 3.119‑Assembly (PARSERPYTHONNET-35)
  • [Fix] Speicher wächst bei jedem mit BytesIO geöffneten Dokument (PARSERPYTHONNET-38)

Änderungen der öffentlichen API

  • Engine‑Fehler lösen GroupDocsParserException, InvalidPasswordException, CorruptedDocumentException oder UnsupportedDocumentFormatException aus groupdocs.parser.exceptions aus, wobei 25.12 RuntimeError für alle ausgelöst hat. Die Klassen existierten bereits in 25.12, leiteten jedoch nicht von Exception ab und wurden nie ausgelöst. except Exception fängt die Fehler beider Releases ab.
  • Das Zuweisen eines unbekannten Attributs löst AttributeError aus.
  • Listen, die die Engine zurückgibt, unterstützen len() und Indexierung; eine leere Liste ist falsc​h.

Entfernt

  • groupdocs.parser.options.ICreatePageStream
  • groupdocs.parser.options.IReleasePageStream
  • groupdocs.parser.options.IPreviewPageRender

Stattdessen Funktionen an PreviewOptions und PreviewOptions.preview_page_render übergeben.

Neue Klassen und Mitglieder

  • groupdocs.parser: Resources.
  • groupdocs.parser.data: AnnotationItem.
  • groupdocs.parser.options: CreatePageStream, ReleasePageStream, PreviewPageRender, Language, PreviewFormats.
  • Parser: get_annotations(), get_structure(), dispose().
  • Features: annotations.
  • TextOptions: include_annotations.
  • OcrOptions: language.
  • ILogger: error().
  • TocItem: extract_text().
  • PageTableArea: get() und table[row, column].
  • DocumentData, Template: get().
  • TemplateCollection: append().
  • Resources: storage_path, beschreibbar.

Neue Funktionen

Anmerkungen extrahieren

Parser.get_annotations() gibt die Kommentare und Notizen eines PDF-, Word‑ oder PowerPoint‑Dokuments als AnnotationItem‑Objekte zurück, die Wert, Typ, Seitenindex, Zeitstempel, Autorname und Initialen enthalten; get_annotations(page_index) liest eine einzelne Seite. TextOptions.include_annotations fügt den Anmerkungstext zum extrahierten Text hinzu, und parser.features.annotations gibt an, ob ein Format Anmerkungen unterstützt.

from groupdocs.parser import Parser
from groupdocs.parser.options import TextOptions

with Parser("reviewed.docx") as parser:
    for note in parser.get_annotations() or []:
        print(note.page_index + 1, note.annotation_type, note.author_name, note.value.strip())

    options = TextOptions()
    options.include_annotations = True
    print(parser.get_text(options))

Befehlszeile

Das Wheel installiert das Konsolenskript groupdocs-parser (auch python -m groupdocs.parser) mit den Befehlen text, info, metadata, images, annotations und list-formats. text akzeptiert --page N (gezählt ab 1), --format plain|markdown|html, --ocr, --include-annotations und -o FILE; info, metadata und annotations akzeptieren --json; images akzeptiert --out DIR; jeder Befehl akzeptiert --password. --license und --version stehen vor dem Befehl. Der Rückgabecode ist 0 bei Erfolg, 2 bei einem Benutzerfehler wie einer fehlenden Datei und 1 bei einem Engine‑Fehler oder einem Format, das die Operation nicht unterstützt.

groupdocs-parser text report.pdf --page 2 -o page2.txt
groupdocs-parser text report.docx --format markdown
groupdocs-parser info report.pdf --json
groupdocs-parser annotations reviewed.docx --json
groupdocs-parser --license license.lic text protected.pdf --password secret

Python‑Logger

Ein einfaches Python‑Objekt mit den Methoden trace(message), warning(message) und error(message, exception) kann als Logger an ParserSettings übergeben werden, und die Engine ruft es während des Extrahierens auf, etwa bei einer beschädigten Datei. Auch eine Funktion log(level, message, exception) funktioniert.

from groupdocs.parser import Parser
from groupdocs.parser.options import ParserSettings


class PrintLogger:
    def trace(self, message):
        print("TRACE:", message)

    def warning(self, message):
        print("WARNING:", message)

    def error(self, message, exception):
        print("ERROR:", message, exception)


with Parser("document.pdf", ParserSettings(PrintLogger())) as parser:
    print(parser.get_document_info().page_count)

Steuerung des Ladens externer Ressourcen

Die Engine fragt einen externen Ressourcen‑Handler, bevor sie jedes Bild lädt, das ein HTML‑ oder MHTML‑Dokument referenziert. Der Handler kann eine Funktion, ein Objekt mit einer on_loading(args)‑Methode oder eine Unterklasse von ExternalResourceHandler sein; das Setzen von args.skipped = True überspringt die Ressource. ParserSettings nimmt ihn als external_resource_handler entgegen.

from groupdocs.parser import Parser
from groupdocs.parser.options import ParserSettings


def skip_remote(args):
    args.skipped = args.uri.startswith("http")


with Parser("page.html", ParserSettings(external_resource_handler=skip_remote)) as parser:
    print(len(parser.get_images() or []))

OCR für Arabisch und Koreanisch

OcrOptions.language wählt das Alphabet, das OCR erkennt; standardmäßig Englisch. Language.ARA und Language.KOR sind in dieser Engine neu. Die Erkennungsmodelle sind Teil der Engine: Der erste OCR‑Aufruf entpackt sie (ca. 80 MB) in einen aspose_data‑Ordner im Arbeitsverzeichnis, ohne Download. Um einen anderen Ordner zu wählen, setzen Sie Resources.storage_path (from groupdocs.parser import Resources) vor dem ersten OCR‑Aufruf.

from groupdocs.parser import Parser
from groupdocs.parser.options import Language, OcrOptions, TextOptions

ocr_options = OcrOptions()
ocr_options.language = Language.KOR
with Parser("scan.jpg") as parser:
    print(parser.get_text(TextOptions(False, True, ocr_options)))

Tabellen aus HTML‑Dokumenten

get_tables() findet jetzt die Tabellen von HTML‑Dokumenten, wie bei PDF, Word und Tabellen‑Dokumenten; 25.12 fand keine. Eine Zelle ist table[row, column] oder table.get(row, column).

from groupdocs.parser import Parser

with Parser("report.html") as parser:
    for table in parser.get_tables() or []:
        for row in range(table.row_count):
            print([table[row, column].text.rstrip("\x07") for column in range(table.column_count)])

Lizenz aus der Umgebung

Setzen Sie GROUPDOCS_LIC_PATH auf den Pfad einer Lizenzdatei oder auf eine URL, die eine solche bereitstellt; die Lizenz wird beim ersten Parser‑Aufruf angewendet, ohne Lizenzcode; 25.12 las die Variable nicht. Kann die Lizenz nicht angewendet werden (fehlende Datei, abgelaufenes Abonnement, Lizenz für ein anderes Produkt), wirft jeder Parser‑Aufruf LicenseError mit Hinweis auf die Variable und den Grund der Engine, bis License().set_license() eine Lizenz setzt. Setzen Sie GROUPDOCS_LIC_STRICT=0, um stattdessen eine LicenseWarning und den Evaluierungsmodus zu erhalten.

from groupdocs.parser import LicenseError, Parser

try:
    with Parser("report.pdf") as parser:
        print(parser.get_text())
except LicenseError as e:
    print(e)  # GROUPDOCS_LIC_PATH=... could not be applied: <reason>

Vorschau‑Callbacks als einfache Funktionen

PreviewOptions(create_page_stream, release_page_stream) akzeptiert gewöhnliche Funktionen, ebenso PreviewOptions.preview_page_render. create_page_stream(page_number) liefert einen beschreibbaren Stream, z. B. eine Datei, die mit "wb" geöffnet wurde, oder ein io.BytesIO; Seiten werden ab 1 nummeriert. Die Engine schließt eine übergebene Datei und ruft release_page_stream(page_number) auf, sobald die Seite geschrieben ist. In 25.12 waren dies die Klassen ICreatePageStream, IReleasePageStream und IPreviewPageRender.

from groupdocs.parser import Parser
from groupdocs.parser.options import PreviewOptions


def create_page_stream(page_number):
    return open("page-%d.png" % page_number, "wb")


def release_page_stream(page_number):
    print("page", page_number, "written")


options = PreviewOptions(create_page_stream, release_page_stream)
options.preview_page_render = lambda info: print("rendering page", info.page_number)
with Parser("document.pdf") as parser:
    parser.generate_preview(options)

Schreibfehler bei Attributen lösen AttributeError aus

Das Zuweisen einer Eigenschaft, die ein API‑Objekt nicht besitzt, löst AttributeError mit einem Hinweis „Did you mean…“ aus. 25.12 akzeptierte die Zuweisung, speicherte ein rein Python‑Attribut und ließ die Engine‑Einstellung unverändert.

from groupdocs.parser.options import TextOptions

options = TextOptions()
try:
    options.include_annotation = True
except AttributeError as error:
    print(error)

Ein Wheel für Python 3.5 – 3.14

25.12 war eine kompilierte Erweiterung mit einem Binärmodul pro Python‑Version und einer .NET Core 3.1‑Runtime. 26.10 ist ein py3-none-<platform>‑Wheel pro Plattform, reines Python über einer eingebetteten .NET 10‑Runtime, und deklariert python_requires=">=3.5,<3.15". Python 3.14 ist neu: 25.12 deklarierte <3.14. Der Großteil des 25.12‑Codes läuft unverändert, und alle 129 Docs‑Beispiele, die auf 25.12 liefen, laufen auf 26.10. get_text() und get_formatted_text() geben weiterhin einen str zurück, der jetzt auch read_to_end() unterstützt.

Aktualisierte Plattform‑Tags und 64‑Bit‑Windows‑Wheel

Das Linux‑Wheel trägt das Tag manylinux_2_27_x86_64, die älteste glibc, auf der die eingebettete .NET 10‑Runtime startet, und die macOS‑Wheels macosx_13_0_x86_64 und macosx_13_0_arm64. Es gibt kein 32‑Bit‑Windows‑Wheel mehr. Die Installation erfordert pip 20.3 oder neuer.

Code‑Beispiel

Anmerkungen aus einem Word‑Dokument extrahieren und in den extrahierten Text einbinden:

from groupdocs.parser import Parser
from groupdocs.parser.options import TextOptions

with Parser("reviewed.docx") as parser:
    for note in parser.get_annotations() or []:
        print(note.page_index + 1, note.annotation_type, note.author_name, note.value.strip())

    options = TextOptions()
    options.include_annotations = True
    print(parser.get_text(options))

Wie Sie das Update erhalten

PyPI

Installation oder Upgrade über PyPI:

groupdocs-parser-net 26.10.0 auf PyPI

pip install groupdocs-parser-net==26.10.0

Direkter Download

Plattformspezifische Wheels von GroupDocs.Parser for Python via .NET 26.10 herunterladen:

Ressourcen