Formen getrennt von einem Dokument rendern

Bei der Verarbeitung von Dokumenten besteht eine häufige Aufgabe darin, alle im Dokument gefundenen Bilder zu extrahieren und an einen externen Speicherort zu exportieren. Diese Aufgabe wird mit Aspose.Words API vereinfacht, das bereits über die Funktionalität zum Extrahieren und Speichern von Bilddaten verfügt. Manchmal möchten Sie jedoch möglicherweise auch andere Arten von Grafikinhalten extrahieren, die durch einen anderen Zeichenobjekttyp dargestellt werden, beispielsweise ein Textfeld mit Absätzen, Pfeilformen und einem kleinen Bild. Es gibt keine einfache Möglichkeit, dieses Objekt darzustellen, da es sich um eine Kombination einzelner Inhaltselemente handelt. Es kann auch vorkommen, dass die Inhalte zu einem Objekt gruppiert wurden, das wie ein einzelnes Bild aussieht.

Aspose.Words bietet Funktionen zum Extrahieren dieser Art von Inhalten, genauso wie Sie ein einfaches Bild aus einer Form als gerenderten Inhalt extrahieren können. In diesem Artikel wird beschrieben, wie Sie diese Funktionalität nutzen, um Formen unabhängig vom Dokument zu rendern.

Formtypen in Aspose.Words

Der gesamte Inhalt einer Dokumentzeichnungsebene wird durch den Shape- oder GroupShape-Knoten im Aspose.Words Document Object Module (DOM) dargestellt. Solche Inhalte können Textfelder, Bilder, AutoShapes, OLE-Objekte usw. sein. Einige Felder werden auch als Formen importiert, beispielsweise das INCLUDEPICTURE-Feld.

Ein einfaches Bild wird durch einen Shape-Knoten von ShapeType.IMAGE dargestellt. Dieser Formknoten hat keine untergeordneten Knoten, aber auf die in diesem Formknoten enthaltenen Bilddaten kann über die Shape.image_data-Eigenschaft zugegriffen werden. Andererseits kann eine Form auch aus vielen untergeordneten Knoten bestehen. Beispielsweise kann eine Textfeldform, die durch die ShapeType.TEXT_BOX-Eigenschaft dargestellt wird, aus vielen Knoten wie Paragraph und Table bestehen. Die meisten Formen können die Knoten auf Paragraph- und Table-Blockebene enthalten. Dabei handelt es sich um dieselben Knoten wie im Hauptteil. Formen sind immer Teile eines Absatzes, entweder direkt inline eingebunden oder im Paragraph verankert, aber an einer beliebigen Stelle auf der Dokumentseite “schwebend”.

rendering-shapes-separately-from-a-document_1

Ein Dokument kann auch Formen enthalten, die gruppiert sind. Grouping kann in Microsoft Word aktiviert werden, indem Sie mehrere Objekte auswählen und im Kontextmenü auf “Group” klicken.

rendering-shapes-separately-from-a-document_2

In Aspose.Words werden diese Formengruppen durch den GroupShape-Knoten dargestellt. Diese können auch auf die gleiche Weise aufgerufen werden, um die gesamte Gruppe als Bild darzustellen.

rendering-shapes-separately-from-a-document_3

Das DOCX-Format kann spezielle Bildtypen wie Diagramme oder Diagramme enthalten. Diese Formen werden auch durch den Shape-Knoten in Aspose.Words dargestellt, der auch eine ähnliche Methode zum Rendern als Bilder bietet. Eine Form kann konstruktionsbedingt keine andere Form als Kind enthalten, es sei denn, diese Form ist ein Bild (ShapeType.IMAGE). Mit Microsoft Word ist es beispielsweise nicht möglich, ein Textfeld in ein anderes Textfeld einzufügen.

Die oben beschriebenen Formtypen bieten eine spezielle Methode zum Rendern der Formen über die ShapeRenderer-Klasse. Eine Instanz der ShapeRenderer-Klasse wird für einen Shape oder GroupShape über die get_shape_renderer-Methode oder durch Übergabe des Shape an den Konstruktor der ShapeRenderer-Klasse abgerufen. Diese Klasse bietet Zugriff auf Mitglieder, die das Rendern einer Form wie folgt ermöglichen:

  • Datei auf der Festplatte
  • Streamen

Rendern in Datei oder Stream

Die save-Methode stellt Überladungen bereit, die eine Form direkt in eine Datei oder einen Stream rendern. Beide Überladungen akzeptieren eine Instanz der ImageSaveOptions-Klasse, die es ermöglicht, Optionen zum Rendern der Form zu definieren. Dies funktioniert auf die gleiche Weise wie die Document.save-Methode. Auch wenn dieser Parameter erforderlich ist, können Sie einen Nullwert übergeben und damit angeben, dass keine benutzerdefinierten Optionen vorhanden sind.

Die Form kann in jedes in der SaveFormat-Enumeration angegebene Bildformat exportiert werden. Beispielsweise kann das Bild durch Angabe der SaveFormat.JPEG-Enumeration als Rasterbild wie JPEG oder durch Angabe von SaveFormat.EMF als Vektorbild wie EMF gerendert werden.

Das folgende Codebeispiel veranschaulicht das Rendern einer Form in ein EMF-Bild getrennt vom Dokument und das Speichern auf der Festplatte:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.EMF)
imageOptions.scale = 1.5
        
# Save the rendered image to disk.
r.save(docs_base.artifacts_dir + "TestFile.RenderToDisk_out.emf", imageOptions)

Das folgende Codebeispiel veranschaulicht das Rendern einer Form in ein JPEG-Bild getrennt vom Dokument und das Speichern in einem Stream:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
        
# Output the image in gray scale
imageOptions.image_color_mode = aw.saving.ImageColorMode.GRAYSCALE

# Reduce the brightness a bit (default is 0.5f).
imageOptions.image_brightness = 0.45
        
stream =  io.FileIO(docs_base.artifacts_dir + "TestFile.RenderToStream_out.jpg", "w+b")

# Save the rendered image to the stream using different options.
r.save(stream, imageOptions)

# Close the stream
stream.close()

Mit der ImageSaveOptions-Klasse können Sie verschiedene Optionen angeben, die steuern, wie das Bild gerendert wird. Die oben beschriebene Funktionalität kann auf die gleiche Weise auf die GroupShape- und Shape-Knoten angewendet werden.

Rendern eines Formbildes

Die Shape-Klasse stellt Objekte in der Zeichenebene dar, beispielsweise eine AutoForm, ein Textfeld, eine Freiform, ein OLE-Objekt, ein ActiveX-Steuerelement oder ein Bild. Mithilfe der Shape-Klasse können Sie Formen in einem Microsoft Word-Dokument erstellen oder ändern. Eine wichtige Eigenschaft einer Form ist ihr shape_type. Formen unterschiedlichen Typs können in einem Word-Dokument unterschiedliche Funktionen haben. Beispielsweise können nur Bild- und OLE-Formen Bilder enthalten, während die meisten Formen nur Text enthalten können.

Das folgende Beispiel zeigt, wie Sie ein Shape-Bild getrennt vom Dokument in ein JPEG-Bild rendern und auf der Festplatte speichern:

# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)

Abrufen einer Formgröße

Die ShapeRenderer-Klasse bietet auch Funktionen zum Abrufen der Größe der Form in Pixeln über die get_size_in_pixels-Methode. Diese Methode akzeptiert zwei Float-Parameter (Einzelparameter): Skalierung und DPI, die bei der Berechnung der Formgröße beim Rendern der Form verwendet werden. Die Methode gibt das Size-Objekt zurück, das die Breite und Höhe der berechneten Größe enthält. Dies ist nützlich, wenn die Größe der gerenderten Form im Voraus bekannt sein muss. Die size_in_points-Eigenschaft gibt die in Punkten gemessene Formgröße zurück. Das Ergebnis ist ein SizeF-Objekt, das die Breite und Höhe enthält. Sie können auch die bounds_in_points-Eigenschaft verwenden, um die tatsächlichen Grenzen der Form zu ermitteln.