Jak pracować z dokumentami w .NET

Jak pracować z dokumentami w .NET

Ten przewodnik pokazuje, jak pracować z modelem obiektowym Document w Aspose.Words FOSS dla .NET: tworzenie pustego dokumentu, bezpieczne wczytywanie istniejącego, przeglądanie jego struktury sekcji/ciała, łączenie dokumentów oraz zastosowanie ograniczenia edycji. Aspose.Words FOSS dla .NET jest dostępny poprzez NuGet lub poprzez budowanie ze źródeł.

Przewodnik krok po kroku

Krok 1: Pobierz bibliotekę

Sklonuj repozytorium i zbuduj Aspose.Words.sln w konfiguracji Release, a następnie dodaj odwołanie do projektu Aspose.Words.csproj z własnego projektu .NET. Pełne polecenia klonowania i budowania znajdują się w poradniku instalacji. Po odwołaniu, dodaj using Aspose.Words; na początku każdego pliku, który pracuje z dokumentami.


Krok 2: Utwórz lub wczytaj dokument

Wywołaj new Document() dla pustego dokumentu lub przekaż ścieżkę do pliku lub Stream do konstruktora Document(fileName) / Document(stream), aby otworzyć istniejący. Przeciążenie przyjmujące argument LoadOptions pozwala podać hasło do zaszyfrowanego pliku. Przed wczytaniem pliku, którego formatu jeszcze nie ufasz, wywołaj FileFormatUtil.DetectFileFormat(fileName) — zwraca ono FileFormatInfo raportujący wykryty LoadFormat oraz to, czy plik jest IsEncrypted, HasDigitalSignature lub HasMacros, dzięki czemu możesz odrzucić nieoczekiwane dane przed tym, jak Document spróbuje je przetworzyć.


Krok 3: Tworzenie treści przy użyciu DocumentBuilder

DocumentBuilder otacza Document kursorem, którym poruszasz się po drzewie, wstawiając treść. Write(text) i Writeln(text) wstawiają tekst w miejscu kursora, a InsertParagraph() rozpoczyna nowy akapit. Formatowanie ustawione w właściwościach Font, ParagraphFormat, ListFormat i PageSetup konstruktora ma zastosowanie do wszystkiego, co napiszesz dalej. Przemieść kursor przy użyciu MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) lub MoveToParagraph(paragraphIndex, characterIndex), i odczytaj CurrentNode / CurrentParagraph / CurrentSection, aby potwierdzić, gdzie znajduje się konstruktor.


Krok 4: Zbadaj strukturę sekcji i treści

A Document udostępnia SectionCollection poprzez Document.Sections (plus FirstSection / LastSection). Każdy Section ma dokładnie jeden Body, którego główna treść jest dostępna przez Body.Paragraphs (a ParagraphCollection) oraz Body.Tables. Aby odczytać lub przeszukać tekst bez ręcznego przechodzenia przez węzły, użyj Range dostępnego na Document, Section, Paragraph i innych węzłach — Range.Text zwraca jego czysty tekst, a Range.Replace(pattern, replacement) wykonuje znajdź-i-zastąp ograniczone do tego zakresu.


Krok 5: Połącz dwa dokumenty

Aby skopiować cały dokument, wywołaj Document.Clone(). Aby przenieść określoną treść z jednej instancji Document do drugiej, wywołaj ImportNode(srcNode, isImportChildren) na dokumencie docelowym lub wywołaj Document.AppendDocument(srcDoc, importFormatMode), aby dodać każdą sekcję dokumentu źródłowego na koniec bieżącego. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) robi to samo, ale wstawia w miejscu kursora konstruktora, a nie na końcu. We wszystkich trzech przypadkach wybierz wartość ImportFormatMode — KeepSourceFormatting, UseDestinationStyles lub KeepDifferentStyles — świadomie, ponieważ decyduje ona, które style dokumentu przeważają, gdy dwa się zderzają.


Krok 6: Zastosuj ograniczenie edycji

Wywołaj Document.Protect(type, password) z wartością ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions lub AllowOnlyFormFields — aby ograniczyć, które edycje Word akceptuje w dokumencie. Unprotect() (z lub bez pasującego hasła) usuwa ograniczenie. Dotyczy to tylko edycji w programie Word; nie szyfruje zapisanego pliku. Aby wymagać hasła jedynie przy otwieraniu pliku, ustaw OoxmlSaveOptions.Password podczas zapisywania.

Typowe problemy i rozwiązania

Document(fileName) rzuca wyjątek dla pliku, który otwiera się poprawnie w Wordzie. Format pliku nie jest obsługiwany przez ładowarki tej edycji. Wywołaj FileFormatUtil.DetectFileFormat(fileName) najpierw i sprawdź zwrócone LoadFormat przed próbą załadowania.

Treść skopiowana pomiędzy dokumentami przejmuje nieprawidłowe czcionki lub style. Ten ImportFormatMode przekazany do AppendDocument or InsertDocument nie pasuje do tego, czego oczekiwałeś. Przekaż KeepSourceFormatting or UseDestinationStyles jawnie zamiast polegać na wartości domyślnej.

Unprotect() wydaje się nie mieć efektu. Albo dokument nie był chroniony hasłem (wywołaj Unprotect() bez argumentów), albo podane hasło nie pasuje do tego, które Protect() zostało wywołane.

Formatowanie zastosowane przez DocumentBuilder nie pojawia się w oczekiwanym miejscu. Formatowanie na poziomie Buildera (Font, ParagraphFormat) ma zastosowanie tylko do treści napisanej after gdy jest ustawione. Przesuń kursor i ustaw formatowanie przed wywołaniem Write/Writeln, nie po.

Najczęściej zadawane pytania

Jak utworzyć nowy, pusty dokument Word?

Wywołaj new Document(). Owiń go DocumentBuilder, aby od razu rozpocząć wstawianie treści.

Jaka jest różnica między Document.Clone() a ImportNode?

Clone() kopiuje cały dokument do nowej instancji Document. ImportNode(srcNode, isImportChildren) przenosi pojedynczy węzeł — i opcjonalnie jego potomków — z drzewa jednego dokumentu do drugiego, co jest używane do łączenia konkretnych treści, a nie całych dokumentów.

Jak bezpiecznie sprawdzić format pliku przed jego załadowaniem?

Wywołaj FileFormatUtil.DetectFileFormat(fileName) (lub przeciążenie Stream) i sprawdź właściwości LoadFormat, IsEncrypted, HasDigitalSignature oraz HasMacros zwróconego FileFormatInfo przed przekazaniem pliku do Document.

Jak odczytać tylko akapity znajdujące się w treści dokumentu?

Użyj kolekcji Body.Paragraphs w Body sekcji, lub Body.GetChildNodes(nodeType, isDeep) dla innych typów węzłów.

Czy Document.Protect szyfruje zapisany plik?

Nie — to ograniczenie edycji, które Word narzuca, gdy plik jest otwierany. Aby wymagać hasła do otwarcia samego pliku, ustaw OoxmlSaveOptions.Password przy wywoływaniu Document.Save.

Zobacz także

 Polski