เรามีความยินดีที่จะแจ้งการเปิดตัว GroupDocs.Parser for Python v26.10 ซึ่งพร้อมให้ใช้งานตั้งแต่ พฤศจิกายน 2026 รุ่นนี้อัปเกรดเอนจินพื้นฐานเป็นเวอร์ชัน 26.8 และย้ายจาก .NET Core 3.1 ไปเป็น .NET 10.0.14 พร้อมแก้ไขช่องโหว่การปฏิเสธการให้บริการสองช่องใน System.Security.Cryptography.Pkcs นอกจากนี้ยังนำคุณลักษณะใหม่สำคัญเข้ามา ได้แก่ การสกัดข้อมูล annotation, การแยกตาราง HTML, OCR สำหรับภาษาอาหรับและเกาหลี, ตัวบันทึก Python, การจัดการทรัพยากรภายนอก, คอลแบ็กการพรีวิวเป็นฟังก์ชันธรรมดา, และเครื่องมือบรรทัดคำสั่ง groupdocs-parser แพ็กเกจ wheel ตอนนี้เป็นแพ็กเกจ pure‑Python ที่รองรับ Python 3.5 – 3.14 พร้อมแท็กแพลตฟอร์มที่อัปเดต (manylinux_2_27_x86_64, macosx_13_0_*) และลบ wheel Windows 32‑bit ออกไปแล้ว

สิ่งใหม่ในรุ่นนี้

  • [Feature] เพิ่มการสนับสนุนการสกัด annotation ด้วย get_annotations() และ TextOptions.include_annotations (PARSERPYTHONNET-23)
  • [Feature] เพิ่มเครื่องมือบรรทัดคำสั่ง groupdocs-parser (PARSERPYTHONNET-24)
  • [Feature] เพิ่มการสนับสนุนอ็อบเจ็กต์บันทึก Python ที่ทำตาม ILogger (PARSERPYTHONNET-25)
  • [Feature] เพิ่มการสนับสนุนการจัดการการโหลดทรัพยากรภายนอกจาก Python (PARSERPYTHONNET-26)
  • [Feature] เพิ่ม OCR สำหรับข้อความภาษาอาหรับและเกาหลี (PARSERPYTHONNET-27)
  • [Feature] เพิ่มการสนับสนุนการสกัดตารางจากเอกสาร HTML (PARSERPYTHONNET-28)
  • [Feature] เพิ่มการสนับสนุนการใช้ไลเซนส์จากตัวแปรสภาพแวดล้อม GROUPDOCS_LIC_PATH (PARSERPYTHONNET-36)
  • [Enhancement] อัปเดต GroupDocs.Parser เป็นเวอร์ชัน 26.8 และรันไทม์ที่ฝังอยู่เป็น .NET 10.0.14 (PARSERPYTHONNET-29)
  • [Enhancement] ปล่อยแพ็กเกจ pure‑Python สำหรับ Python 3.5 – 3.14 แทนส่วนขยายที่คอมไพล์ (PARSERPYTHONNET-30)
  • [Enhancement] ส่งคอลแบ็กพรีวิวไปยัง PreviewOptions เป็นฟังก์ชัน Python ธรรมดา (PARSERPYTHONNET-31)
  • [Enhancement] ปฏิเสธการกำหนดค่าให้กับแอตทริบิวต์ที่ไม่รู้จักของอ็อบเจ็กต์ API (PARSERPYTHONNET-32)
  • [Enhancement] อัปเดตแท็กแพลตฟอร์มเป็น glibc 2.27 และ macOS 13 และลบ wheel Windows 32‑bit (PARSERPYTHONNET-33)
  • [Enhancement] ยก GroupDocsParserException และคลาสย่อยของมันแทน RuntimeError (PARSERPYTHONNET-34)
  • [Enhancement] อัปเดต System.Security.Cryptography.Pkcs เป็นเวอร์ชัน 10.0.14 ซึ่งแก้ไขช่องโหว่การปฏิเสธการให้บริการสองช่อง (PARSERPYTHONNET-37)
  • [Fix] เอกสาร Word และ RTF บางไฟล์ล้มเหลวพร้อมข้อความ The document appears to be corrupted หรือขาดแอสเซมบลี SkiaSharp 3.119 (PARSERPYTHONNET-35)
  • [Fix] หน่วยความจำเพิ่มขึ้นทุกครั้งที่เปิดเอกสารจาก BytesIO (PARSERPYTHONNET-38)

การเปลี่ยนแปลง Public API

  • ข้อผิดพลาดของเอนจินจะยก GroupDocsParserException, InvalidPasswordException, CorruptedDocumentException หรือ UnsupportedDocumentFormatException จาก groupdocs.parser.exceptions ซึ่งในรุ่น 25.12 จะยก RuntimeError สำหรับทั้งหมด คลาสเหล่านี้มีอยู่ในรุ่น 25.12 แต่ไม่ได้สืบทอดจาก Exception และไม่เคยถูกยก except Exception จะจับข้อผิดพลาดของทั้งสองรุ่นได้
  • การกำหนดค่าแอตทริบิวต์ที่ไม่รู้จักจะยก AttributeError
  • รายการที่เอนจินคืนค่าจะรองรับ len() และการเข้าถึงด้วยดัชนี และรายการว่างจะให้ค่าเป็น False

ถูกลบ

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

ให้ส่งฟังก์ชันไปยัง PreviewOptions และ PreviewOptions.preview_page_render แทน

คลาสและสมาชิกใหม่

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

คุณลักษณะใหม่

สกัด annotation

Parser.get_annotations() จะคืนคอมเมนต์และโน้ตของไฟล์ PDF, Word หรือ PowerPoint เป็นอ็อบเจ็กต์ AnnotationItem ที่มีค่า, ประเภท, ดัชนีหน้า, เวลา, ชื่อผู้เขียนและอักษรย่อ; get_annotations(page_index) จะอ่านเฉพาะหน้าหนึ่ง TextOptions.include_annotations จะเพิ่มข้อความ annotation ลงในข้อความที่สกัด, และ parser.features.annotations จะบอกว่าไฟล์ฟอร์แมตใดรองรับ annotation

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

บรรทัดคำสั่ง

wheel จะติดตั้งสคริปต์คอนโซล groupdocs-parser (หรือ python -m groupdocs.parser) พร้อมคำสั่ง text, info, metadata, images, annotations และ list-formats text รองรับ --page N (นับจาก 1), --format plain|markdown|html, --ocr, --include-annotations และ -o FILE; info, metadata และ annotations รองรับ --json; images รองรับ --out DIR; ทุกคำสั่งรองรับ --password. --license และ --version จะต้องใส่ก่อนคำสั่ง รหัสออกจะเป็น 0 เมื่อสำเร็จ, 2 สำหรับข้อผิดพลาดของผู้ใช้เช่นไฟล์หาย, และ 1 สำหรับข้อผิดพลาดของเอนจินหรือฟอร์แมตที่ไม่รองรับการทำงานนั้น

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

อ็อบเจ็กต์ Python ธรรมดาที่มีเมธอด trace(message), warning(message) และ error(message, exception) สามารถส่งให้กับ ParserSettings เป็นตัวบันทึกได้ และเอนจินจะเรียกใช้เมธอดเหล่านี้เมื่อพบเหตุการณ์ระหว่างการสกัด เช่น ไฟล์เสียหาย ฟังก์ชัน log(level, message, exception) ก็ทำงานได้เช่นกัน

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)

ควบคุมการโหลดทรัพยากรภายนอก

เอนจินจะเรียกตัวจัดการทรัพยากรภายนอกก่อนโหลดรูปภาพแต่ละรูปที่เอกสาร HTML หรือ MHTML อ้างอิง ตัวจัดการอาจเป็นฟังก์ชัน, อ็อบเจ็กต์ที่มีเมธอด on_loading(args), หรือคลาสย่อยของ ExternalResourceHandler; การตั้งค่า args.skipped = True จะข้ามทรัพยากรนั้น ParserSettings รับพารามิเตอร์นี้เป็น 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 สำหรับภาษาอาหรับและเกาหลี

OcrOptions.language กำหนดอักษรที่ OCR จะรับรู้, ค่าเริ่มต้นคืออังกฤษ Language.ARA และ Language.KOR เป็นค่าใหม่ในเอนจินนี้ โมเดลการจดจำเป็นส่วนหนึ่งของเอนจิน: การเรียก OCR ครั้งแรกจะแตกไฟล์โมเดลประมาณ 80 MB ไปยังโฟลเดอร์ aspose_data ในไดเรกทอรีทำงานโดยไม่ต้องดาวน์โหลด หากต้องการกำหนดโฟลเดอร์ให้ตั้งค่า Resources.storage_path (from groupdocs.parser import Resources) ก่อนการเรียก OCR ครั้งแรก

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

ตารางจากเอกสาร HTML

get_tables() ตอนนี้สามารถค้นหาตารางในเอกสาร HTML ได้เช่นเดียวกับ PDF, Word และสเปรดชีต; รุ่น 25.12 ไม่พบตารางเลย เซลล์เข้าถึงได้ด้วย table[row, column] หรือ 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)])

ไลเซนส์จากสภาพแวดล้อม

ตั้งค่า GROUPDOCS_LIC_PATH ให้เป็นพาธของไฟล์ไลเซนส์หรือ URL ที่ให้บริการไฟล์ไลเซนส์ และไลเซนส์จะถูกนำไปใช้ในการเรียก Parser ครั้งแรกโดยไม่ต้องระบุโค้ดไลเซนส์; รุ่น 25.12 ไม่ได้อ่านตัวแปรนี้ หากไลเซนส์ไม่สามารถนำไปใช้ได้ (ไฟล์หาย, การสมัครหมดอายุ, หรือไลเซนส์ของผลิตภัณฑ์อื่น) ทุกการเรียก Parser จะยก LicenseError พร้อมระบุตัวแปรและเหตุผลของเอนจิน จนกว่าจะเรียก License().set_license() เพื่อนำไลเซนส์มาใช้ ตั้งค่า GROUPDOCS_LIC_STRICT=0 เพื่อให้ได้ LicenseWarning หนึ่งรายการและโหมดประเมินผลแทน

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>

คอลแบ็กพรีวิวเป็นฟังก์ชันธรรมดา

PreviewOptions(create_page_stream, release_page_stream) รับฟังก์ชันธรรมดาได้เช่นกัน, PreviewOptions.preview_page_render ก็เช่นกัน create_page_stream(page_number) คืนสตรีมที่เขียนได้ เช่น ไฟล์ที่เปิดด้วย "wb" หรือ io.BytesIO; หน้าถูกนับจาก 1 เอนจินจะปิดไฟล์ที่ได้รับและเรียก release_page_stream(page_number) หลังจากเขียนหน้าเสร็จ ในรุ่น 25.12 สิ่งเหล่านี้เป็นคลาส ICreatePageStream, IReleasePageStream และ 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)

แอตทริบิวต์ที่สะกดผิดจะยก AttributeError

การกำหนดค่าให้กับพร็อพเพอร์ตี้ที่อ็อบเจ็กต์ API ไม่มีจะยก AttributeError พร้อมข้อความแนะนำ “Did you mean”. รุ่น 25.12 ยอมรับการกำหนดค่า, เก็บเป็นแอตทริบิวต์เฉพาะ Python และไม่เปลี่ยนการตั้งค่าในเอนจิน

from groupdocs.parser.options import TextOptions

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

wheel ตัวเดียวสำหรับ Python 3.5 – 3.14

รุ่น 25.12 เป็นส่วนขยายที่คอมไพล์, มีโมดูลไบนารีหนึ่งไฟล์ต่อเวอร์ชัน Python และรันไทม์ .NET Core 3.1 รุ่น 26.10 เป็น wheel py3-none-<platform> ตัวเดียวต่อแพลตฟอร์ม, เป็น Python ธรรมดาบนรันไทม์ .NET 10 ที่ฝังอยู่, และระบุ python_requires=">=3.5,<3.15". Python 3.14 เป็นเวอร์ชันใหม่: รุ่น 25.12 ระบุ <3.14. โค้ดส่วนใหญ่ของรุ่น 25.12 ทำงานโดยไม่ต้องแก้ไข, และตัวอย่าง Docs ทั้ง 129 ตัวที่ทำงานบนรุ่น 25.12 ก็ทำงานบนรุ่น 26.10 ด้วย get_text() และ get_formatted_text() ยังคงคืนค่า str ซึ่งตอนนี้ยังรองรับ read_to_end() ด้วย

แท็กแพลตฟอร์มที่อัปเดตและ wheel Windows 64‑bit

wheel สำหรับ Linux มีแท็ก manylinux_2_27_x86_64 ซึ่งเป็น glibc ที่เก่าที่สุดที่รันไทม์ .NET 10 ฝังอยู่, ส่วน wheel สำหรับ macOS มี macosx_13_0_x86_64 และ macosx_13_0_arm64. ไม่มี wheel Windows 32‑bit อีกต่อไป การติดตั้งต้องใช้ pip 20.3 หรือใหม่กว่า

ตัวอย่างโค้ด

สกัด annotation จากเอกสาร Word และรวมไว้ในข้อความที่สกัด:

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

วิธีรับอัปเดต

PyPI

ติดตั้งหรืออัปเกรดผ่าน PyPI:

groupdocs-parser-net 26.10.0 on PyPI

pip install groupdocs-parser-net==26.10.0

ดาวน์โหลดโดยตรง

ดาวน์โหลด wheel เฉพาะแพลตฟอร์มจากหน้ารีลีส GroupDocs.Parser for Python via .NET 26.10:

แหล่งข้อมูล