Jak pracovat s dokumenty v .NET

Jak pracovat s dokumenty v .NET

Tento průvodce ukazuje, jak pracovat s objektním modelem Document v Aspose.Words FOSS pro .NET: vytvoření prázdného dokumentu, bezpečné načtení existujícího, procházení jeho struktury sekcí/těla, kombinování dokumentů a aplikaci omezení úprav. Aspose.Words FOSS pro .NET je k dispozici prostřednictvím NuGet nebo sestavením ze zdrojového kódu.

Průvodce krok za krokem

Krok 1: Získání knihovny

Klonujte repozitář a sestavte Aspose.Words.sln v konfiguraci Release, poté přidejte referenci na projekt Aspose.Words.csproj z vašeho vlastního projektu .NET. Úplné příkazy pro klonování a sestavení jsou v Instalační příručka. Po přidání reference přidejte using Aspose.Words; na začátek libovolného souboru, který pracuje s dokumenty.


Krok 2: Vytvořit nebo načíst dokument

Zavolejte new Document() pro prázdný dokument, nebo předávejte cestu k souboru či Stream do konstruktoru Document(fileName) / Document(stream) pro otevření existujícího. Přetížení, které přijímá argument LoadOptions, vám umožní zadat heslo pro šifrovaný soubor. Před načtením souboru, jehož formát ještě nedůvěřujete, zavolejte FileFormatUtil.DetectFileFormat(fileName) — vrací FileFormatInfo, který hlásí detekovaný LoadFormat a zda je soubor IsEncrypted, HasDigitalSignature nebo HasMacros, takže můžete odmítnout neočekávaný vstup dříve, než se Document pokusí jej parsovat.


Krok 3: Vytvářejte obsah pomocí DocumentBuilder

DocumentBuilder obaluje Document s kurzorem, který při vkládání obsahu pohybujete stromem. Write(text) a Writeln(text) vloží text na kurzor a InsertParagraph() zahájí nový odstavec. Formátování nastavené na vlastnostech builderu Font, ParagraphFormat, ListFormat a PageSetup se použije na vše, co napíšete dál. Přesuňte kurzor pomocí MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) nebo MoveToParagraph(paragraphIndex, characterIndex) a přečtěte si CurrentNode / CurrentParagraph / CurrentSection, abyste potvrdili, kde je builder umístěn.


Krok 4: Prozkoumejte strukturu sekce a těla

Document odhaluje SectionCollection prostřednictvím Document.Sections (plus FirstSection / LastSection). Každý Section má přesně jeden Body, jehož hlavní obsah je dostupný přes Body.Paragraphs (a ParagraphCollection) a Body.Tables. Pro čtení nebo vyhledávání textu bez ručního procházení uzlů použijte Range, který je k dispozici na Document, Section, Paragraph a dalších uzlech — Range.Text vrací jeho prostý text a Range.Replace(pattern, replacement) provádí najít-nahradit omezené jen na tento rozsah.


Krok 5: Kombinujte dva dokumenty

Pro zkopírování celého dokumentu zavolejte Document.Clone(). Pro přenesení konkrétního obsahu z jedné instance Document do druhé zavolejte ImportNode(srcNode, isImportChildren) na cílovém dokumentu nebo zavolejte Document.AppendDocument(srcDoc, importFormatMode), abyste přidali každou sekci zdrojového dokumentu na konec aktuálního. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) dělá totéž, ale vloží na kurzor builderu místo na konec. Ve všech třech případech vyberte hodnotu ImportFormatMode — KeepSourceFormatting, UseDestinationStyles nebo KeepDifferentStyles — úmyslně, protože určuje, čí styly dokumentu zvítězí, kde se dva střetnou.


Krok 6: Použijte omezení úprav

Zavolejte Document.Protect(type, password) s hodnotou ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions nebo AllowOnlyFormFields — aby se omezilo, jaké úpravy Word pro dokument přijme. Unprotect() (s nebo bez odpovídajícího hesla) omezení odstraňuje. Toto ovlivňuje pouze úpravy uvnitř Wordu; nešifruje uložený soubor. Pokud chcete požadovat heslo jen pro otevření souboru, nastavte OoxmlSaveOptions.Password při ukládání.

Časté problémy a opravy

Document(fileName) vyhodí výjimku pro soubor, který se v aplikaci Word otevírá bez problémů. Formát souboru není podporován načítači této edice. Zavolejte FileFormatUtil.DetectFileFormat(fileName) nejprve a zkontrolujte vrácené LoadFormat před pokusem o načtení.

Obsah zkopírovaný mezi dokumenty získá nesprávná písma nebo styly. Ten ImportFormatMode předáno do AppendDocument or InsertDocument neodpovídá tomu, co jste očekávali. Předávejte KeepSourceFormatting or UseDestinationStyles explicitně místo spoléhaní se na výchozí.

Unprotect() se zdá, že nemá žádný efekt. Buď dokument nebyl chráněn heslem (volá se Unprotect() bez argumentů), nebo poskytnuté heslo neodpovídá tomu, které Protect() bylo voláno s.

Formátování aplikováno skrze DocumentBuilder se nezobrazuje tam, kde se očekává. Formátování na úrovni Builderu (Font, ParagraphFormat) se vztahuje pouze na napsaný obsah after je nastaveno. Přesuňte kurzor a nastavte formátování před voláním Write/Writeln, ne po.

Často kladené otázky

Jak vytvořím nový prázdný dokument Word?

Zavolejte new Document(). Zabalte jej do DocumentBuilder, abyste mohli okamžitě začít vkládat obsah.

Jaký je rozdíl mezi Document.Clone() a ImportNode?

Clone() kopíruje celý dokument do nové instance Document. ImportNode(srcNode, isImportChildren) přenáší jeden uzel — a volitelně i jeho podřízené — ze stromu jednoho dokumentu do druhého, což je to, co používáte k kombinaci konkrétního obsahu místo celých dokumentů.

Jak mohu bezpečně zkontrolovat formát souboru před jeho načtením?

Zavolejte FileFormatUtil.DetectFileFormat(fileName) (nebo přetížení Stream) a prohlédněte si vlastnosti LoadFormat, IsEncrypted, HasDigitalSignature a HasMacros vráceného FileFormatInfo, než předáte soubor Document.

Jak mohu přečíst jen odstavce uvnitř těla dokumentu?

Použijte kolekci Body.Paragraphs na Body sekce, nebo Body.GetChildNodes(nodeType, isDeep) pro jiné typy uzlů.

Šifruje Document.Protect uložený soubor?

Ne — jedná se o omezení úprav, které Word uplatňuje při otevření souboru. Chcete-li vyžadovat heslo pro otevření samotného souboru, nastavte OoxmlSaveOptions.Password při volání Document.Save.

Viz také:

 Čeština