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()enTextOptions.include_annotations(PARSERPYTHONNET-23) - [Feature] Voeg de
groupdocs-parsercommand‑line tool toe (PARSERPYTHONNET-24) - [Feature] Voeg ondersteuning toe voor een Python‑loggerobject dat
ILoggerimplementeert (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_PATHomgevingsvariabele (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
PreviewOptionsals 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
GroupDocsParserExceptionen zijn subklassen in plaats vanRuntimeError(PARSERPYTHONNET-34) - [Enhancement] Update
System.Security.Cryptography.Pkcsnaar 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 corruptedof een ontbrekendeSkiaSharp3.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,CorruptedDocumentExceptionofUnsupportedDocumentFormatExceptionvanuitgroupdocs.parser.exceptions, terwijl 25.12RuntimeErrorvoor al deze gevallen gooide. De klassen bestonden al in 25.12, maar ze erft niet vanExceptionen werden nooit gegooid.except Exceptionvangt 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.ICreatePageStreamgroupdocs.parser.options.IReleasePageStreamgroupdocs.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()entable[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: