Hoe te werken met documenten in .NET

Hoe te werken met documenten in .NET

Deze gids laat zien hoe je werkt met het Document objectmodel in Aspose.Words FOSS voor .NET: een leeg document maken, een bestaand document veilig laden, de sectie-/body-structuur doorlopen, documenten combineren en een bewerkingsbeperking toepassen. Aspose.Words FOSS voor .NET is beschikbaar via NuGet of door te bouwen vanaf de bron.

Stapsgewijze handleiding

Stap 1: Haal de bibliotheek op

Kloon de repository en bouw Aspose.Words.sln in Release-configuratie, voeg vervolgens een projectreferentie toe aan Aspose.Words.csproj vanuit je eigen .NET-project. De volledige kloon- en bouwopdrachten staan in de Installatiehandleiding. Zodra het is gerefereerd, voeg toe using Aspose.Words; aan het begin van elk bestand dat met documenten werkt.


Stap 2: Maak of laad een document

Roep new Document() aan voor een leeg document, of geef een bestandspad of Stream door aan de Document(fileName)/Document(stream)-constructor om een bestaande te openen. Een overload die een LoadOptions-argument accepteert, stelt je in staat een wachtwoord op te geven voor een versleuteld bestand. Voordat je een bestand laadt waarvan je het formaat nog niet vertrouwt, roep je FileFormatUtil.DetectFileFormat(fileName) aan — het retourneert een FileFormatInfo die de gedetecteerde LoadFormat rapporteert en aangeeft of het bestand IsEncrypted, HasDigitalSignature of HasMacros is, zodat je onverwachte invoer kunt afwijzen voordat Document probeert het te parseren.


Stap 3: Inhoud maken met DocumentBuilder

DocumentBuilder omhult een Document met een cursor die je door de boom beweegt terwijl je inhoud invoegt. Write(text) en Writeln(text) voegen tekst in op de cursor, en InsertParagraph() start een nieuwe alinea. Opmaak die is ingesteld op de Font, ParagraphFormat, ListFormat en PageSetup eigenschappen van de builder, wordt toegepast op alles wat je daarna schrijft. Verplaats de cursor met MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) of MoveToParagraph(paragraphIndex, characterIndex), en lees CurrentNode / CurrentParagraph / CurrentSection om te bevestigen waar de builder zich bevindt.


Stap 4: Inspecteer de sectie- en bodystructuur

Een Document maakt een SectionCollection zichtbaar via Document.Sections (plus FirstSection / LastSection). Elke Section heeft precies één Body, waarvan de hoofdinhoud bereikbaar is via Body.Paragraphs (een ParagraphCollection) en Body.Tables. Om tekst te lezen of te zoeken zonder handmatig door knooppunten te lopen, gebruik je de Range die beschikbaar is op Document, Section, Paragraph en andere knooppunten — Range.Text geeft de platte tekst terug, en Range.Replace(pattern, replacement) voert een zoeken-en-vervangen uit die beperkt is tot dat bereik.


Stap 5: Combineer twee documenten

Om een volledig document te kopiëren, roep je Document.Clone() aan. Om specifieke inhoud van de ene Document-instantie naar een andere te brengen, roep je ImportNode(srcNode, isImportChildren) aan op het bestemmingsdocument, of roep je Document.AppendDocument(srcDoc, importFormatMode) aan om elke sectie van een brondocument aan het einde van het huidige toe te voegen. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) doet hetzelfde, maar voegt in op de cursor van de builder in plaats van aan het einde. In alle drie de gevallen kies je de ImportFormatMode waarde — KeepSourceFormatting, UseDestinationStyles of KeepDifferentStyles — bewust, aangezien deze bepaalt welke documentstijlen winnen waar de twee botsen.


Stap 6: Pas een bewerkingsbeperking toe

Roep Document.Protect(type, password) aan met een ProtectionType-waarde — ReadOnly, AllowOnlyComments, AllowOnlyRevisions of AllowOnlyFormFields — om te beperken welke bewerkingen Word accepteert voor het document. Unprotect() (met of zonder het bijbehorende wachtwoord) verwijdert de beperking. Dit beïnvloedt alleen het bewerken binnen Word; het versleutelt het opgeslagen bestand niet. Om een wachtwoord te eisen alleen om het bestand te openen, stel je OoxmlSaveOptions.Password in bij het opslaan.

Veelvoorkomende problemen en oplossingen

Document(fileName) gooit een fout voor een bestand dat in Word prima opent. Het bestandsformaat wordt niet ondersteund door de laders van deze editie. Roep FileFormatUtil.DetectFileFormat(fileName) eerst en controleer het geretourneerde LoadFormat voordat u probeert te laden.

Inhoud die tussen documenten wordt gekopieerd, neemt de verkeerde lettertypen of stijlen over. De ImportFormatMode doorgegeven aan AppendDocument or InsertDocument komt niet overeen met wat u verwachtte. Geef KeepSourceFormatting or UseDestinationStyles expliciet in plaats van te vertrouwen op een standaardwaarde.

Unprotect() lijkt geen effect te hebben. Ofwel was het document niet beschermd met een wachtwoord (call Unprotect() zonder argumenten), of het opgegeven wachtwoord niet overeenkomt met het Protect() waarmee het werd aangeroepen.

Opmaak toegepast via DocumentBuilder verschijnt niet op de verwachte plaats. Builder-niveau opmaak (Font, ParagraphFormat) geldt alleen voor inhoud die after is ingesteld. Verplaats de cursor en stel de opmaak in vóór het aanroepen Write/Writeln, niet daarna.

Veelgestelde vragen

Hoe maak ik een nieuw, leeg Word-document aan?

Roep new Document() aan. Wikkel het in een DocumentBuilder om meteen te beginnen met het invoegen van inhoud.

Wat is het verschil tussen Document.Clone() en ImportNode?

Clone() kopieert een heel document naar een nieuwe Document instantie. ImportNode(srcNode, isImportChildren) brengt een enkel knooppunt — en optioneel zijn kinderen — van de boom van het ene document naar een ander, wat je gebruikt om specifieke inhoud te combineren in plaats van hele documenten.

Hoe kan ik veilig het formaat van een bestand controleren voordat ik het laad?

Roep FileFormatUtil.DetectFileFormat(fileName) aan (of de Stream overload) en inspecteer de LoadFormat, IsEncrypted, HasDigitalSignature en HasMacros eigenschappen van de geretourneerde FileFormatInfo voordat je het bestand doorgeeft aan Document.

Hoe lees ik alleen de alinea’s in de body van een document?

Gebruik de Body.Paragraphs collectie op de Body van de sectie, of Body.GetChildNodes(nodeType, isDeep) voor andere knooppunctypen.

Versleutelt Document.Protect het opgeslagen bestand?

Nee — het is een bewerkingsbeperking die Word afdwingt wanneer het bestand wordt geopend. Om een wachtwoord te vereisen om het bestand zelf te openen, stel OoxmlSaveOptions.Password in bij het aanroepen van Document.Save.

Zie ook

 Nederlands