Hur man arbetar med dokument i .NET
Den här guiden visar hur du arbetar med Document-objektmodellen i Aspose.Words FOSS för .NET: skapa ett tomt dokument, säkert ladda ett befintligt, gå igenom dess sektion-/kroppsstruktur, kombinera dokument och tillämpa en redigeringsbegränsning. Aspose.Words FOSS för .NET finns tillgänglig via NuGet eller genom att bygga från källkod.
Steg-för-steg-guide
Steg 1: Hämta biblioteket
Klona repot och bygg Aspose.Words.sln i Release-konfiguration, lägg sedan till en projektreferens till Aspose.Words.csproj från ditt egna .NET-projekt. Fullständiga klon- och byggkommandon finns i Installationsguiden. När den är refererad, lägg till using Aspose.Words; längst upp i alla filer som arbetar med dokument.
Steg 2: Skapa eller ladda ett dokument
Anropa new Document() för ett tomt dokument, eller skicka en filsökväg eller Stream till Document(fileName)/Document(stream)-konstruktorn för att öppna ett befintligt. En overload som accepterar ett LoadOptions-argument låter dig ange ett lösenord för en krypterad fil. Innan du laddar en fil vars format du ännu inte litar på, anropa FileFormatUtil.DetectFileFormat(fileName) — den returnerar en FileFormatInfo som rapporterar den upptäckta LoadFormat och om filen IsEncrypted, HasDigitalSignature eller HasMacros, så att du kan avvisa oväntad indata innan Document försöker tolka den.
Steg 3: Skapa innehåll med DocumentBuilder
DocumentBuilder omsluter en Document med en markör som du flyttar genom trädet medan du infogar innehåll. Write(text) och Writeln(text) infogar text vid markören, och InsertParagraph() startar ett nytt stycke. Formatering som ställs in på byggarens Font, ParagraphFormat, ListFormat och PageSetup egenskaper gäller för det du skriver härnäst. Flytta markören med MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) eller MoveToParagraph(paragraphIndex, characterIndex), och läs CurrentNode / CurrentParagraph / CurrentSection för att bekräfta var byggaren är placerad.
Steg 4: Inspektera avsnittet och kroppens struktur
En Document avslöjar en SectionCollection via Document.Sections (plus FirstSection / LastSection). Varje Section har exakt en Body, vars huvudinnehåll är åtkomligt via Body.Paragraphs (en ParagraphCollection) och Body.Tables. För att läsa eller söka text utan att gå igenom noder manuellt, använd Range som finns på Document, Section, Paragraph och andra noder — Range.Text returnerar dess rena text, och Range.Replace(pattern, replacement) utför ett sök-och-ersätt begränsat till just det intervallet.
Steg 5: Kombinera två dokument
För att kopiera ett helt dokument, anropa Document.Clone(). För att föra in specifikt innehåll från en Document-instans till en annan, anropa ImportNode(srcNode, isImportChildren) på destinationsdokumentet, eller anropa Document.AppendDocument(srcDoc, importFormatMode) för att lägga till varje sektion i ett källdokument i slutet av det aktuella. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) gör samma sak men infogar vid byggarens markör snarare än i slutet. I alla tre fallen, välj ImportFormatMode-värdet — KeepSourceFormatting, UseDestinationStyles eller KeepDifferentStyles — medvetet, eftersom det bestämmer vilka dokumentstilar som får företräde när de två kolliderar.
Steg 6: Tillämpa en redigeringsrestriktion
Anropa Document.Protect(type, password) med ett ProtectionType-värde — ReadOnly, AllowOnlyComments, AllowOnlyRevisions eller AllowOnlyFormFields — för att begränsa vilka redigeringar Word accepterar för dokumentet. Unprotect() (med eller utan det matchande lösenordet) tar bort restriktionen. Detta påverkar endast redigering i Word; det krypterar inte den sparade filen. För att kräva ett lösenord bara för att öppna filen, ställ in OoxmlSaveOptions.Password när du sparar.
Vanliga problem och lösningar
Document(fileName) kastar ett undantag för en fil som öppnas utan problem i Word. Filens format är inte ett som den här utgåvans laddare stöder. Anropa FileFormatUtil.DetectFileFormat(fileName) först och kontrollera det returnerade LoadFormat innan du försöker ladda.
Innehåll som kopieras mellan dokument får fel teckensnitt eller stilar. Den ImportFormatMode skickas till AppendDocument or InsertDocument matchar inte det du förväntade dig. Skicka KeepSourceFormatting or UseDestinationStyles explicit istället för att förlita sig på en standard.
Unprotect() verkar ha ingen effekt. Antingen var dokumentet inte skyddat med ett lösenord (anropa Unprotect() utan argument), eller så matchar det angivna lösenordet inte det som Protect() det anropades med.
Formatering som tillämpas via DocumentBuilder visas inte där det förväntas. Formatering på byggarnivå (Font, ParagraphFormat) gäller endast för innehåll som skrivits after när den är inställd. Flytta markören och ange formatering innan du anropar Write/Writeln, inte efter.
Vanliga frågor
Hur skapar jag ett nytt, tomt Word-dokument?
Anropa new Document(). Omslut den med en DocumentBuilder för att börja infoga innehåll omedelbart.
Vad är skillnaden mellan Document.Clone() och ImportNode?
Clone() kopierar ett helt dokument till en ny Document-instans. ImportNode(srcNode, isImportChildren) tar med en enskild nod — och eventuellt dess barn — från ett dokuments träd till ett annat, vilket är vad du använder för att kombinera specifikt innehåll snarare än hela dokument.
Hur kan jag på ett säkert sätt kontrollera en fils format innan jag laddar den?
Anropa FileFormatUtil.DetectFileFormat(fileName) (eller Stream-överladdningen) och inspektera de returnerade FileFormatInfo:s LoadFormat, IsEncrypted, HasDigitalSignature och HasMacros egenskaper innan du vidarebefordrar filen till Document.
Hur läser jag bara styckena i ett dokuments kropp?
Använd Body.Paragraphs-samlingen på sektionens Body, eller Body.GetChildNodes(nodeType, isDeep) för andra nodtyper.
Krypterar Document.Protect den sparade filen?
Nej — det är en redigeringsbegränsning som Word tillämpar när filen öppnas. För att kräva ett lösenord för att öppna själva filen, sätt OoxmlSaveOptions.Password när du anropar Document.Save.