Hoe tekenvormen toevoegen aan Word-documenten in .NET
Deze gids laat zien hoe je inhoud toevoegt aan de tekenlaag van een Word-document met Aspose.Words FOSS voor .NET: een AutoShape invoegen, een afbeelding toevoegen, deze positioneren en tekst eromheen laten lopen, vullen en opmaken, meerdere vormen groeperen, en een watermerk instellen. Aspose.Words FOSS voor .NET is beschikbaar via NuGet of door vanaf de bron te bouwen.
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, zoals beschreven in de Installatiehandleiding. Voeg toe using Aspose.Words; and using Aspose.Words.Drawing; aan de bovenkant van elk bestand dat met vormen werkt.
Stap 2: Voeg een AutoShape toe
Bouw een vorm direct met new Shape(doc, shapeType), waarbij shapeType een ShapeType waarde is, zoals Rectangle, Ellipse, Star of TextBox, en voeg deze vervolgens in de boom in met DocumentBuilder.InsertNode(node). Shape is de concrete, sealed class die je maakt en configureert; hij is afgeleid van de abstracte ShapeBase, die positie definieert (Left, Top, Width, Height, Rotation) en opmaak-subobjecten (Fill, Stroke, ShadowFormat, Glow, Reflection) die gedeeld worden met GroupShape.
Stap 3: Voeg een afbeelding toe
DocumentBuilder.InsertImage is de directe route voor afbeeldingen: overloads accepteren een Image, een bestandspad, een Stream, of een ruwe byte-array, met extra overloads die expliciete width/height of volledige positioneringsargumenten (horzPos, left, vertPos, top, width, height, wrapType) nemen. De ImageData eigenschap van het resulterende Shape bevat de afbeeldingsgegevens — roep ImageData.SetImage(...) aan om de afbeelding te vervangen, en gebruik CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast, en GrayScale voor basisaanpassingen.
Stap 4: Positioneer de vorm en omsluit tekst
Een inline vorm (het standaardresultaat van InsertImage) stroomt mee met de omringende tekst en negeert positioneringseigenschappen totdat deze zweeft — controleer IsInline om te bevestigen in welke modus een vorm zich bevindt. Om een vorm te laten zweven, stel WrapType in op een niet-inline waarde en stel RelativeHorizontalPosition / RelativeVerticalPosition in (elk relatief ten opzichte van Page, Margin, Column, of een vergelijkbare anker) samen met de Left/Top offsets. WrapSide regelt zijde-specifieke omsluiting, en HorizontalAlignment / VerticalAlignment behandelen eenvoudige relatieve uitlijning in plaats van expliciete offsets.
Stap 5: Vul en style de vorm
Shape.Fill (een Fill object) schildert het binnenste van de vorm: Fill.Solid(color) voor een effen kleur, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) voor verlopen, Fill.Patterned(patternType) voor een patroon, en Fill.SetImage(...) voor een afbeeldingvulling — FillType meldt welke momenteel actief is. De omtrek komt van de Stroke eigenschap. Voor effecten bieden ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) en SoftEdge (SoftEdgeFormat) elk hun eigen instellingen en een Remove() methode die het effect terugzet naar geen.
Stap 6: Groepeer meerdere vormen
Combineer verschillende vormen tot één eenheid met DocumentBuilder.InsertGroupShape(shapes), die een GroupShape retourneert. GroupShape is zelf een ShapeBase, dus draagt het zijn eigen Fill, ShadowFormat, Glow en Reflection die op de groep als geheel van toepassing zijn; verplaats of wijzig de grootte van de GroupShape in plaats van de individuele kinderen zodat de coördinatentransformatie van de groep consistent blijft. Voor een vorm die tekst bevat, regelt Shape.TextBox (een TextBox object) de opvulling (InternalMarginLeft/Right/Top/Bottom), automatische grootte-aanpassing (FitShapeToText), tekstrichting (LayoutFlow) en verticale uitlijning (VerticalAnchor).
Stap 7: Voeg een watermerk toe
Document.Watermark beheert een enkel documentbreed watermerk onafhankelijk van enige vorm die je handmatig hebt ingevoegd. Roep Watermark.SetText(text) of SetText(text, options) aan voor een tekstwatermerk, of SetImage(...) voor een afbeeldingwatermerk; Watermark.Remove() wist het, en Watermark.Type rapporteert de huidige WatermarkType (Text, Image, of None). TextWatermarkOptions stelt FontFamily, FontSize, Color, en Layout (WatermarkLayout.Horizontal of Diagonal) in; ImageWatermarkOptions stelt Scale en IsWashout in.
Veelvoorkomende problemen en oplossingen
Setting Left/Top op een vorm heeft geen zichtbaar effect. De vorm is nog steeds inline (IsInline == true). Stel WrapType naar een drijvende waarde en stel RelativeHorizontalPosition/RelativeVerticalPosition zodat de offset-eigenschappen effect hebben.
Shape.ImageData gooit of retourneert niets. De vorm is geen afbeeldingvorm. Controleer Shape.HasImage voordat je leest ImageData.
De onderliggende vormen van een groep bewegen niet samen. De kinderen werden individueel gepositioneerd in plaats van via de groep. Verplaats of wijzig de grootte van de GroupShape zelf, zodat de coördinatentransformatie op elk kind wordt toegepast.
Watermerktekst gebruikt niet het gevraagde lettertype. Nee TextWatermarkOptions is doorgegeven. Roep Watermark.SetText(text, options) met een TextWatermarkOptions instantie waarvan de FontFamily is ingesteld.
Veelgestelde vragen
Wat is het verschil tussen Shape en ShapeBase?
ShapeBase is de abstracte basisklasse die gedeeld wordt door Shape en GroupShape. Schrijf code tegen ShapeBase wanneer het beide soorten uniform moet afhandelen; gebruik Shape direct voor leden die specifiek zijn voor een enkel tekenobject, zoals ImageData.
Hoe voeg ik een afbeelding in met een specifieke grootte?
Gebruik een DocumentBuilder.InsertImage overload die expliciete width en height argumenten accepteert, naast de afbeeldingsbron (een Image, bestandspad, Stream, of byte-array).
Hoe laat ik een vorm zweven in plaats van inline met de tekst te staan?
Stel zijn WrapType in op een niet-inline waarde en stel RelativeHorizontalPosition / RelativeVerticalPosition in zodat de Left/Top offsets worden geïnterpreteerd ten opzichte van de pagina, marge of kolom.
Kan een document tegelijkertijd zowel een tekst- als een afbeelding-watermerk hebben?
Nr. Document.Watermark.Type geeft het huidige type watermerk weer; opnieuw SetText of SetImage aanroepen vervangt elk watermerk dat eerder was ingesteld.
Hoe verwijder ik een schaduw of reflectie van een vorm?
Roep Remove() aan op het overeenkomstige opmaakobject — Shape.ShadowFormat.Remove() of Shape.Reflection.Remove().