Budowanie lekkiego modelu dokumentu przy użyciu DocumentReader
Tworzenie lekkiego modelu dokumentu przy użyciu DocumentReader
DocumentReader jest punktem wejścia do odczytu plików DOCX w Aspose.Words FOSS. Akceptuje wejście jako ścieżkę pliku, strumień I/O lub surowe bajty, a następnie udostępnia dokument jako light_document_model.Document (LDM) — strukturalne drzewo obiektów Python, które jest łatwe do przeglądania i transformacji.
Wymagania wstępne
| Wymaganie | Szczegół |
|---|---|
| Python | 3.9 lub nowszy |
| Package | aspose-words-foss (na licencji MIT) |
| Input | Plik .docx, strumień lub bytes |
pip install aspose-words-fossŁadowanie ze ścieżki pliku
DocumentReader.load_file(filepath) odczytuje plik DOCX ze ścieżki. Następnie wywołaj to_light_document(), aby uzyskać reprezentację LDM.
from aspose.words_foss import DocumentReader
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print("Page count:", doc.page_count)
print("Sections:", len(doc.sections))Ładowanie ze strumienia
DocumentReader.load_stream(stream) akceptuje dowolny obiekt podobny do pliku z metodą read(). Jest to przydatne dla danych pochodzących z odpowiedzi HTTP, archiwów ZIP lub buforów w pamięci.
from aspose.words_foss import DocumentReader
reader = DocumentReader()
with open("data/report.docx", "rb") as fh:
reader.load_stream(fh)
doc = reader.to_light_document()
print("Paragraphs:", len(doc.all_paragraphs))Ładowanie z bajtów
DocumentReader.load_bytes(data) akceptuje obiekt bytes lub bytearray. Użyj tego, gdy zawartość DOCX jest już w pamięci (np. pobrana z bazy danych lub utworzona programowo).
from aspose.words_foss import DocumentReader
with open("data/report.docx", "rb") as fh:
data = fh.read()
reader = DocumentReader()
reader.load_bytes(data)
doc = reader.to_light_document()
print("Text preview:", doc.text[:200])Nawigacja po strukturze LDM
Po wywołaniu to_light_document(), zwrócony obiekt Document udostępnia pełne drzewo dokumentu:
from aspose.words_foss import DocumentReader
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
# Sections
for section in doc.sections:
print("Section paragraphs:", len(section.paragraphs))
# All paragraphs (flat list across all sections)
for para in doc.all_paragraphs:
if para.text.strip():
print(" -", para.text[:80])
# Headings
for heading in doc.headings(max_level=2):
print("H:", heading.text)Odczyt pełnego tekstu dokumentu
Document.text zwraca kompletną zawartość dokumentu w formacie plain-text, łącząc tekst wszystkich akapitów we wszystkich sekcjach:
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print(doc.text[:500])Wskazówki i najlepsze praktyki
- Zawsze wywołuj
load_file(),load_stream()lubload_bytes()przed wywołaniemto_light_document()— wywołanieto_light_document()na niezaładowanym czytniku może spowodować błąd lub zwrócić pusty dokument. - Użyj
load_bytes(), gdy kontrolujesz cykl życia dokumentu w pamięci; unika to otwierania uchwytów plików. - Użyj
doc.all_paragraphsdo płaskiej iteracji po wszystkich akapitach; użyjdoc.sections, gdy potrzebujesz pracować sekcja po sekcji. DocumentReaderimplementujeLdmBuilderMixin, co oznacza, żeto_light_document()jest dostępny jako metoda mixin — ten sam interfejs jest współdzielony z innymi klasami czytnika w bibliotece.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
Pusty doc.sections po załadowaniu | Plik nie jest prawidłowym DOCX | Sprawdź, czy plik otwiera się w Wordzie; upewnij się, że nie jest chroniony hasłem |
doc.all_paragraphs jest pusty | Dokument nie zawiera tekstu głównego (np. tylko nagłówki/stopki) | Sprawdź doc.header_paragraphs i doc.footer_paragraphs zamiast tego |
AttributeError na to_light_document() | Metoda Load nie została wywołana przed konwersją | Najpierw wywołaj jedną z load_file(), load_stream() lub load_bytes() first |
FAQ
Czym jest LDM?
Model lekki dokumentu (light_document_model.Document) jest abstrakcyjnym, Python-natywnym drzewem obiektów reprezentującym dokument Word. Oddziela on logikę dokumentu od binarnego formatu DOCX i jest zaprojektowany do łatwej programistycznej manipulacji.
Czy mogę zmodyfikować LDM i zapisać go ponownie jako DOCX?
Tak. Po zmodyfikowaniu the doc obiekt, przekaż go do LdmDocxWriter.write(doc, path) aby utworzyć zaktualizowany plik DOCX. Zobacz the przewodnik LdmDocxWriter po szczegóły.
Co dodaje LdmBuilderMixin?
LdmBuilderMixin udostępnia metodę to_light_document(). DocumentReader dziedziczy po niej, więc zawsze uzyskujesz dostęp do tej metody za pośrednictwem instancji czytnika.
Podsumowanie API Reference
| Klasa / Metoda | Opis |
|---|---|
DocumentReader | Odczytuje wejście DOCX i tworzy reprezentację LDM |
DocumentReader.load_file(filepath) | Ładuje plik DOCX według ścieżki |
DocumentReader.load_stream(stream) | Ładuje z strumienia podobnego do pliku |
DocumentReader.load_bytes(data) | Ładuje z obiektu bytes |
DocumentReader.to_light_document() | Zwraca załadowany dokument jako LDM Document |
LdmBuilderMixin | Mixin, który zapewnia to_light_document() |
Document.sections | Lista sekcji w dokumencie |
Document.all_paragraphs | Płaska lista wszystkich akapitów |
Document.text | Pełna zawartość tekstowa dokumentu |
Document.page_count | Liczba stron |
Document.headings(max_level) | Lista akapitów nagłówków do max_level |