Shapes afzonderlijk van een Document weergeven

Bij het verwerken van documenten is het een veel voorkomende taak om alle afbeeldingen in het document te extraheren en naar een externe locatie te exporteren. Deze taak wordt eenvoudig met de Aspose.Words API, die al de functionaliteit biedt voor het extraheren en opslaan van afbeeldingsgegevens. Soms wilt u echter op dezelfde manier andere typen grafische inhoud extraheren die worden weergegeven door een ander type tekenobject, bijvoorbeeld een tekstvak met alinea ' s, pijlvormen en een kleine afbeelding. Er is geen eenvoudige manier om dit object weer te geven, omdat het een combinatie is van individuele inhoudselementen. U kunt ook een geval tegenkomen wanneer de inhoud is gegroepeerd in het object dat eruit ziet als een enkele afbeelding.

Aspose.Words biedt functionaliteit voor het extraheren van dit type inhoud op dezelfde manier als u een eenvoudige afbeelding uit shape kunt extraheren als gerenderde inhoud. In dit artikel wordt beschreven hoe u deze functionaliteit kunt gebruiken om shapes onafhankelijk van het document weer te geven.

Vormtypen in Aspose.Words

Alle inhoud in een documenttekeningslaag wordt weergegeven door het knooppunt Shape of GroupShape in de module Aspose.Words Document Object (DOM). Dergelijke inhoud kan tekstvakken, afbeeldingen, AutoShapes, OLE objecten, enz.zijn. Sommige velden worden ook geïmporteerd als shapes, bijvoorbeeld het veld INCLUDEPICTURE.

Een eenvoudig beeld wordt weergegeven door een Shape knoop van ShapeType.Image. Deze shape node heeft geen child nodes, maar de afbeeldingsgegevens in deze shape node zijn toegankelijk via de eigenschap Shape.ImageData. Aan de andere kant kan een vorm ook bestaan uit vele kindknopen. Een vorm van een tekstvak, die wordt weergegeven door de Eigenschap ShapeType.TextBox, kan bijvoorbeeld bestaan uit vele knooppunten, zoals Paragraph en Table. De meeste vormen kunnen de Paragraph en Table Blok-niveau knooppunten bevatten. Dit zijn dezelfde knooppunten als die in het hoofdlichaam. Shapes zijn altijd onderdelen van een bepaalde alinea, ofwel direct inline of verankerd op de Paragraph,, maar “zwevend” overal op de documentpagina.

rendering-shapes-separately-from-a-document-aspose-words-cpp-1

Een document kan ook vormen bevatten die gegroepeerd zijn. Groepering kan worden ingeschakeld in Microsoft Word door meerdere objecten te selecteren en op “groep” te klikken in het menu met de rechtermuisknop.

rendering-shapes-separately-from-a-document-aspose-words-cpp-2

In Aspose.Words worden deze groepen vormen weergegeven door het GroupShape knooppunt. Deze kunnen ook op dezelfde manier worden opgeroepen om de hele groep weer te geven aan de afbeelding.

rendering-shapes-separately-from-a-document-aspose-words-cpp-3

De indeling DOCX kan speciale typen afbeeldingen bevatten, zoals diagrammen of grafieken. Deze vormen worden ook weergegeven door de Shape knoop in Aspose.Words, die ook een vergelijkbare methode biedt om ze als afbeeldingen weer te geven. Een vorm kan geen andere vorm bevatten als een kind, tenzij die vorm een afbeelding (ShapeType.Image) is. Microsoft Word staat bijvoorbeeld niet toe dat u een tekstvak in een ander tekstvak invoegt.

De hierboven beschreven vormtypen bieden een speciale methode om de vormen weer te geven via de klasse ShapeRenderer. Een instantie van de ShapeRenderer klasse wordt opgehaald voor een Shape of GroupShape Via de GetShapeRenderer methode of door de Shape door te geven aan de constructor van de ShapeRenderer klasse. Deze klasse biedt toegang tot leden, waarmee een vorm kan worden weergegeven op de volgende:

  • Bestand op de schijf met de methode Save overbelasting
  • Stream met de Save methode overload
  • Het Graphics Object met behulp van de RenderToSize en RenderToScale methoden

Renderen naar Bestand of Stream

De methode Save biedt overbelastingen die een shape rechtstreeks naar een bestand of stream weergeven. Beide overbelastingen accepteren een instantie van de klasse ImageSaveOptions, waarmee opties voor het weergeven van de vorm kunnen worden gedefinieerd. Dit werkt op dezelfde manier als de Document.Save methode. Hoewel deze parameter vereist is, kunt u een null-waarde doorgeven, waarbij wordt opgegeven dat er geen aangepaste opties zijn.

De vorm kan worden geëxporteerd in elke afbeeldingsindeling die is opgegeven in de SaveFormat - opsomming. De afbeelding kan bijvoorbeeld worden weergegeven als een rasterafbeelding, zoals JPEG door de SaveFormat.Jpeg - opsomming op te geven, of als een vectorafbeelding, zoals EMF door de SaveFormat.Emf op te geven.

Het onderstaande codevoorbeeld illustreert het afzonderlijk van het document renderen van een shape naar een EMF - afbeelding en het opslaan op schijf:

Het onderstaande codevoorbeeld illustreert het afzonderlijk van het document renderen van een shape naar een JPEG - afbeelding en het opslaan in een stream:

Met de klasse ImageSaveOptions kunt u verschillende opties opgeven die bepalen hoe de afbeelding wordt weergegeven. De hierboven beschreven functionaliteit kan op dezelfde manier worden toegepast op de GroupShape en Shape knooppunten.

Renderen naar een .NET grafisch Object

Als u rechtstreeks naar een Graphics object rendert, kunt u uw eigen instellingen en de status voor het Graphics object definiëren. Een veel voorkomend scenario is het rechtstreeks weergeven van een vorm in een Graphics object dat is opgehaald uit een Windows formulier of een Bitmap. Wanneer het knooppunt Shape wordt weergegeven, hebben de Instellingen invloed op het uiterlijk van de vorm. U kunt de vorm bijvoorbeeld roteren of schalen met de methoden RotateTransform of ScaleTransform Voor het Graphics - object.

Het onderstaande voorbeeld laat zien hoe u een vorm kunt renderen naar A .NET Graphics object los van het document en rotatie toepassen op de gerenderde afbeelding:

Net als bij de RenderToSize methode is de RenderToSize methode overgenomen van de NodeRendererBase nuttig voor het maken van miniaturen van documentinhoud. De vormgrootte wordt gespecificeerd via de constructor. De RenderToSize - methode accepteert het Graphics - object, de x-en Y-coördinaten van de afbeeldingspositie en de grootte van de afbeelding (breedte en hoogte) die op het Graphics - object wordt getekend.

De Shape kan op een bepaalde schaal worden weergegeven met behulp van de ShapeRenderer.RenderToScale methode die is geërfd van de NodeRendererBase klasse. Dit is vergelijkbaar met de Document.RenderToScale Methode die dezelfde hoofdparameters accepteert. Het verschil tussen deze twee methoden is dat met de methode ShapeRenderer.RenderToScale, in plaats van een letterlijke grootte, u een floatwaarde kiest die de vorm schaalt tijdens het renderen. Als de floatwaarde gelijk is aan 1.0, wordt de vorm weergegeven op 100% van de oorspronkelijke grootte. Een floatwaarde van 0.5 zal de afbeeldingsgrootte halveren.

Een Vormafbeelding weergeven

De klasse Shape vertegenwoordigt objecten in de tekenlaag, zoals een AutoShape, tekstvak, freeform, OLE object, ActiveX-besturingselement of een afbeelding. Met de klasse Shape kunt u shapes maken of wijzigen in een Microsoft Word document. Een belangrijke eigenschap van een vorm is de ShapeType. Vormen van verschillende typen kunnen verschillende mogelijkheden hebben in een Word - document. Bijvoorbeeld, alleen afbeeldingen en OLE shapes kunnen afbeeldingen bevatten, terwijl de meeste shapes alleen tekst kunnen bevatten.

Het volgende voorbeeld laat zien hoe u een Shape-afbeelding afzonderlijk van het document naar een JPEG - afbeelding kunt renderen en deze op de schijf kunt opslaan:

Een vormgrootte ophalen

De klasse ShapeRenderer biedt ook functionaliteit om de grootte van de vorm in pixels op te halen via de methode GetSizeInPixels. Deze methode accepteert twee float - type (Enkele) parameters-de schaal en DPI, die worden gebruikt bij de berekening van de vormgrootte wanneer de vorm wordt weergegeven. De methode retourneert het Size object, dat de breedte en hoogte van de berekende grootte bevat. Dit is handig wanneer het nodig is om de grootte van de gerenderde vorm van tevoren te weten, bijvoorbeeld bij het maken van een nieuwe Bitmap van de gerenderde uitvoer.

Het onderstaande voorbeeld laat zien hoe u een nieuw Bitmap-en grafisch object maakt met de breedte en hoogte van de vorm die moet worden weergegeven:

Bij het gebruik van de methoden RenderToSize of RenderToScale wordt de gerenderde afbeeldingsgrootte ook geretourneerd in het SizeF object. Dit kan aan een variabele worden toegewezen en indien nodig worden gebruikt.

De Eigenschap SizeInPoints Geeft als resultaat de vormgrootte gemeten in punten (zie ShapeRenderer. Een resultaat is een SizeF object met de breedte en hoogte.