We zijn blij de release van GroupDocs.Parser for Python v26.10 aan te kondigen, beschikbaar vanaf november 2026. Deze release upgrade de onderliggende engine naar versie 26.8 en schakelt over van .NET Core 3.1 naar .NET 10.0.14, waarbij twee denial-of-service kwetsbaarheden in System.Security.Cryptography.Pkcs worden verholpen. Het introduceert belangrijke nieuwe functies waaronder extractie van annotaties, HTML‑tabelparsing, OCR voor Arabisch en Koreaans, een Python‑logger, handling van externe bronnen, preview‑callbacks als gewone functies, en een groupdocs-parser command‑line tool. Het wheel is nu een pure‑Python pakket gericht op Python 3.5 – 3.14, met bijgewerkte platformtags (manylinux_2_27_x86_64, macosx_13_0_*) en verwijdering van het 32‑bit Windows wheel.

Wat is nieuw in deze release

  • [Feature] Voeg ondersteuning toe voor het extraheren van annotaties met get_annotations() en TextOptions.include_annotations (PARSERPYTHONNET-23)
  • [Feature] Voeg de groupdocs-parser command‑line tool toe (PARSERPYTHONNET-24)
  • [Feature] Voeg ondersteuning toe voor een Python‑loggerobject dat ILogger implementeert (PARSERPYTHONNET-25)
  • [Feature] Voeg ondersteuning toe voor het afhandelen van het laden van externe bronnen vanuit Python (PARSERPYTHONNET-26)
  • [Feature] Voeg OCR toe voor Arabische en Koreaanse tekst (PARSERPYTHONNET-27)
  • [Feature] Voeg ondersteuning toe voor het extraheren van tabellen uit HTML‑documenten (PARSERPYTHONNET-28)
  • [Feature] Voeg ondersteuning toe voor het toepassen van de licentie vanuit de GROUPDOCS_LIC_PATH omgevingsvariabele (PARSERPYTHONNET-36)
  • [Enhancement] Update GroupDocs.Parser naar 26.8 en de ingebedde runtime naar .NET 10.0.14 (PARSERPYTHONNET-29)
  • [Enhancement] Lever een pure‑Python pakket voor Python 3.5 – 3.14 in plaats van de gecompileerde extensie (PARSERPYTHONNET-30)
  • [Enhancement] Geef preview‑callbacks door aan PreviewOptions als gewone Python‑functies (PARSERPYTHONNET-31)
  • [Enhancement] Weiger toewijzingen aan onbekende attributen van API‑objecten (PARSERPYTHONNET-32)
  • [Enhancement] Update de platformtags naar glibc 2.27 en macOS 13, en verwijder het 32‑bit Windows wheel (PARSERPYTHONNET-33)
  • [Enhancement] Gooi GroupDocsParserException en zijn subklassen in plaats van RuntimeError (PARSERPYTHONNET-34)
  • [Enhancement] Update System.Security.Cryptography.Pkcs naar 10.0.14, waarmee twee denial‑of‑service kwetsbaarheden worden verholpen (PARSERPYTHONNET-37)
  • [Fix] Sommige Word‑ en RTF‑documenten falen met The document appears to be corrupted of een ontbrekende SkiaSharp 3.119 assembly (PARSERPYTHONNET-35)
  • [Fix] Geheugen groeit bij elk document dat wordt geopend vanuit een BytesIO (PARSERPYTHONNET-38)

Wijzigingen in de openbare API

  • Engine‑fouten gooien GroupDocsParserException, InvalidPasswordException, CorruptedDocumentException of UnsupportedDocumentFormatException vanuit groupdocs.parser.exceptions, terwijl 25.12 RuntimeError voor al deze gevallen gooide. De klassen bestonden al in 25.12, maar ze erft niet van Exception en werden nooit gegooid. except Exception vangt de fouten van beide releases.
  • Het toewijzen van een onbekend attribuut veroorzaakt AttributeError.
  • Lijsten die de engine retourneert ondersteunen len() en indexering, en een lege lijst is falsy.

Verwijderd

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

Geef in plaats daarvan functies door aan PreviewOptions en PreviewOptions.preview_page_render.

Nieuwe klassen en leden

  • 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() en table[row, column].
  • DocumentData, Template: get().
  • TemplateCollection: append().
  • Resources: storage_path, writable.

Nieuwe functies

Extractie van annotaties

Parser.get_annotations() retourneert de opmerkingen en notities van een PDF-, Word‑ of PowerPoint‑document als AnnotationItem‑objecten met de waarde, het type, paginanummer, tijdstempel, auteursnaam en initialen; get_annotations(page_index) leest één pagina. TextOptions.include_annotations voegt de annotatietekst toe aan de geëxtraheerde tekst, en parser.features.annotations geeft aan of een formaat annotaties ondersteunt.

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))

Commandoregel

Het wheel installeert het groupdocs-parser console‑script (ook python -m groupdocs.parser) met de commando’s text, info, metadata, images, annotations en list-formats. text accepteert --page N (geteld vanaf 1), --format plain|markdown|html, --ocr, --include-annotations en -o FILE; info, metadata en annotations accepteren --json; images accepteert --out DIR; elk commando accepteert --password. --license en --version komen vóór het commando. De exit‑code is 0 bij succes, 2 voor een gebruikersfout zoals een ontbrekend bestand, en 1 voor een engine‑fout of een formaat dat de bewerking niet ondersteunt.

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

Een gewoon Python‑object met de methoden trace(message), warning(message) en error(message, exception) kan als logger aan ParserSettings worden doorgegeven, en de engine roept het aan met wat het tegenkomt tijdens het extraheren, bijvoorbeeld een beschadigd bestand. Een functie log(level, message, exception) werkt ook.

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)

Beheer van het laden van externe bronnen

De engine vraagt een external‑resource handler voordat hij elke afbeelding laadt die een HTML‑ of MHTML‑document referereert. De handler kan een functie zijn, een object met een on_loading(args)‑methode, of een subclass van ExternalResourceHandler; door args.skipped = True te zetten wordt de bron overgeslagen. ParserSettings neemt dit op als external_resource_handler.

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 voor Arabisch en Koreaans

OcrOptions.language selecteert het alfabet dat OCR herkent, standaard Engels. Language.ARA en Language.KOR zijn nieuw in deze engine. De herkenningsmodellen maken deel uit van de engine: de eerste OCR‑aanroep pakt ze uit (ongeveer 80 MB) naar een aspose_data‑map in de werkdirectory, zonder download. Om een andere map te kiezen, stel Resources.storage_path (from groupdocs.parser import Resources) in vóór de eerste OCR‑aanroep.

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 uit HTML‑documenten

get_tables() vindt nu de tabellen van HTML‑documenten, net zoals bij PDF, Word en spreadsheet‑documenten; 25.12 vond er geen. Een cel is table[row, column], of 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)])

Licentie vanuit de omgeving

Stel GROUPDOCS_LIC_PATH in op het pad van een licentiebestand, of op een URL die er één levert, en de licentie wordt toegepast bij de eerste Parser‑aanroep, zonder licentiecode; 25.12 las de variabele niet. Als die licentie niet kan worden toegepast (ontbrekend bestand, verlopen abonnement, licentie voor een ander product), gooit elke Parser‑aanroep LicenseError, met vermelding van de variabele en de reden van de engine, totdat License().set_license() een licentie toepast. Stel GROUPDOCS_LIC_STRICT=0 in om één LicenseWarning en evaluatiemodus te krijgen in plaats daarvan.

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>

Preview‑callbacks als gewone functies

PreviewOptions(create_page_stream, release_page_stream) accepteert gewone functies, en dat geldt ook voor PreviewOptions.preview_page_render. create_page_stream(page_number) retourneert een schrijfbare stream, bijvoorbeeld een bestand geopend met "wb" of een io.BytesIO; pagina’s worden genummerd vanaf 1. De engine sluit een bestand dat hij heeft gekregen, en roept release_page_stream(page_number) aan zodra de pagina is weggeschreven. In 25.12 waren dit de ICreatePageStream, IReleasePageStream en IPreviewPageRender‑klassen.

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)

Verkeerd gespelde attributen veroorzaken AttributeError

Het toewijzen van een eigenschap die een API‑object niet heeft, veroorzaakt AttributeError met een “Did you mean” hint. 25.12 accepteerde de toewijzing, bewaarde een alleen‑Python attribuut en liet de engine‑instelling ongewijzigd.

from groupdocs.parser.options import TextOptions

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

Eén wheel voor Python 3.5 – 3.14

25.12 was een gecompileerde extensie, met één binair module per Python‑versie en een .NET Core 3.1 runtime. 26.10 is één py3-none-<platform> wheel per platform, pure Python bovenop een ingebedde .NET 10 runtime, en declareert python_requires=">=3.5,<3.15". Python 3.14 is nieuw: 25.12 declareerde <3.14. Het merendeel van de 25.12‑code werkt ongewijzigd, en alle 129 Docs‑voorbeelden die op 25.12 draaiden, draaien op 26.10. get_text() en get_formatted_text() retourneren nog steeds een str, die nu ook read_to_end() beantwoordt.

Bijgewerkte platformtags en 64‑bit Windows wheel

Het Linux‑wheel heeft de tag manylinux_2_27_x86_64, de oudste glibc waarop de ingebedde .NET 10 runtime start, en de macOS‑wheels macosx_13_0_x86_64 en macosx_13_0_arm64. Er is geen 32‑bit Windows wheel meer. Installeren vereist pip 20.3 of nieuwer.

Codevoorbeeld

Extracteer annotaties uit een Word‑document en voeg ze toe aan de geëxtraheerde tekst:

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))

Hoe de update te verkrijgen

PyPI

Installeer of upgrade via PyPI:

groupdocs-parser-net 26.10.0 on PyPI

pip install groupdocs-parser-net==26.10.0

Directe download

Download platformspecifieke wheels van de GroupDocs.Parser for Python via .NET 26.10 release‑pagina:

Bronnen