Praca z DOCX Reader
Praca z DOCX Reader
Klasa DocumentReader odczytuje pliki Office Open XML (.docx) i tworzy uogólnioną strukturę danych — Light Document Model (LDM). Obsługuje akapity, tabele, kształty, obrazy i formatowanie, udostępniając zawartość do manipulacji lub konwersji.
Czytanie pliku DOCX
Najprostsze podejście polega na użyciu konstruktora Document, który automatycznie wybiera DocumentReader dla plików .docx:
import aspose.words_foss as aw
doc = aw.Document("input.docx")
print(f"Sections: {len(doc.sections)}")
for para in doc.all_paragraphs:
print(para.text)DocumentReader Architektura
DocumentReader używa dwóch mixinów do podziału odpowiedzialności:
| Component | Role |
|---|---|
DocumentReader | Główny parser DOCX — odczytuje części XML z pakietu OPC |
LdmBuilderMixin | Tworzy Light Document Model na podstawie przetworzonych danych |
ShapeParserMixin | Analizuje elementy rysunków i kształtów osadzone w dokumencie |
Wszystkie trzy współpracują wewnętrznie — interakcję z wynikiem uzyskujesz poprzez Document API.
Wyodrębnianie tekstu
Użyj właściwości text w załadowanym dokumencie, aby wyodrębnić zwykły tekst bez zapisywania do pliku:
import aspose.words_foss as aw
doc = aw.Document("contract.docx")
text = doc.text
print(text[:500])Praca z akapitami i formatowaniem
Uzyskaj dostęp do właściwości na poziomie akapitu poprzez LDM:
import aspose.words_foss as aw
doc = aw.Document("styled.docx")
for para in doc.all_paragraphs:
for run in para.runs:
if run.font.bold:
print(f"Bold: {run.text}")Każdy Run zawiera właściwości czcionki (pogrubienie, kursywa, rozmiar, kolor), które zostały sparsowane z dokumentu DOCX XML.
Obsługa kształtów i obrazów
ShapeParserMixin wyodrębnia elementy rysunkowe podczas parsowania. Kształty pojawiają się w LDM jako obiekty ShapeNode w treści akapitu:
import aspose.words_foss as aw
doc = aw.Document("with-images.docx")
for para in doc.all_paragraphs:
for node in para.content_sequence:
if hasattr(node, 'shape_type'):
print(f"Shape: {node.shape_type}")Wskazówki i najlepsze praktyki
- Użyj
Document("file.docx")w standardowych przepływach pracy — obsługuje on wybór czytnika, walidację pakietu i automatyczne konstruowanie LDM. - W przypadku wejścia opartego na strumieniu (przesyłanie przez internet), przekaż obiekt podobny do pliku do konstruktora
Document. - Dla plików zawierających tabele, uzyskaj do nich dostęp za pomocą
doc.tableslubdoc.all_tables. - W przetwarzaniu wsadowym, ponownie użyj tego samego procesu Python, aby uniknąć wielokrotnego narzutu związanego z importem.
Typowe problemy
| Problem | Przyczyna | Napraw |
|---|---|---|
| Plik nie ładuje się (wyjątek) | Uszkodzony lub niekompletny ZIP archiwum | Sprawdź, czy plik jest prawidłowym .docx (pakiet OPC oparty na ZIP) |
| Brakujące obrazy w wyjściu | Części obrazu nie są osadzone w pakiecie | Sprawdź, czy DOCX zawiera osadzone (nie powiązane) obrazy |
| Brakująca treść w wyjściu | Wymagane części XML nieobecne w pakiecie | Plik może być obcięty; wyeksportuj ponownie z aplikacji źródłowej |
FAQ
Czym jest Light Document Model (LDM)?
LDM jest wewnętrzną reprezentacją współdzieloną przez wszystkie czytniki. Abstrahuje szczegóły specyficzne dla formatu (OPC XML, binarny OLE2) do wspólnej struktury sekcji, akapitów, fragmentów, tabel i kształtów.
Czy DocumentReader może obsługiwać pliki DOCM (z makrami)?
Pliki .docm z makrami używają tej samej struktury OPC. Czytnik może analizować zawartość dokumentu, ale makra nie są zachowywane ani wykonywane.
Jak czytnik radzi sobie z dużymi dokumentami?
Czytnik przetwarza części XML kolejno. Zużycie pamięci rośnie wraz z rozmiarem dokumentu. W przypadku bardzo dużych dokumentów warto przetwarzać sekcje indywidualnie.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
DocumentReader | Odczytuje dokumenty DOCX i tworzy uogólnione struktury danych |
LdmBuilderMixin | Mixin zapewniający metody konstrukcji Light Document Model |
ShapeParserMixin | Mixin zapewniający metody parsowania rysunków/kształtów |
Document | Reprezentuje dokument Word (główny element LDM) |
create_reader(path) | Fabryka zwracająca odpowiedni czytnik dla rozszerzenia pliku |