Arbeiten mit Formen

In diesem Thema wird erläutert, wie programmgesteuert mit Formen mit Aspose.Words gearbeitet wird.

Die Formen in Aspose.Words stellen ein Objekt in der Zeichenebene dar, z. B. ein AutoShape-, Textfeld-, Freiform-, OLE-Objekt, ein ActiveX-Steuerelement oder ein Bild. Ein Word-Dokument kann eine oder mehrere verschiedene Formen enthalten. Formen des Dokuments werden durch die Klasse Shape dargestellt.

Form mit Document Builder einfügen

Sie können Inline-Formen mit dem angegebenen Typ und der angegebenen Größe und frei schwebende Formen mit der angegebenen Position, Größe und Textumbruchart mit der Methode InsertShape in ein Dokument einfügen. Die InsertShape -Methode ermöglicht das Einfügen von DML -Formen in das Dokumentmodell. Das Dokument muss in dem Format gespeichert werden, das DML -Formen unterstützt, andernfalls werden solche Knoten beim Speichern des Dokuments in VML -Formen konvertiert.

Das folgende Codebeispiel zeigt, wie diese Arten von Formen in das Dokument eingefügt werden:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
//Free-floating shape insertion.
Shape shape = builder.insertShape(ShapeType.TEXT_BOX,
RelativeHorizontalPosition.PAGE, 100,
RelativeVerticalPosition.PAGE, 100,
50, 50,
WrapType.NONE);
shape.setRotation(30.0);
builder.writeln();
//Inline shape insertion.
shape = builder.insertShape(ShapeType.TEXT_BOX, 50, 50);
shape.setRotation(30.0);
OoxmlSaveOptions so = new OoxmlSaveOptions(SaveFormat.DOCX);
// "Strict" or "Transitional" compliance allows to save shape as DML.
so.setCompliance(OoxmlCompliance.ISO_29500_2008_TRANSITIONAL);
dataDir = dataDir + "Shape_InsertShapeUsingDocumentBuilder_out.docx";
// Save the document to disk.
doc.save(dataDir, so);

Seitenverhältnis gesperrt einstellen

Mit Aspose.Words können Sie angeben, ob das Seitenverhältnis der Form über die Eigenschaft AspectRatioLocked gesperrt ist.

Das folgende Codebeispiel zeigt, wie Sie mit der Eigenschaft AspectRatioLocked arbeiten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.insertImage(dataDir + "Test.png");
shape.setAspectRatioLocked(true);
// Save the document to disk.
dataDir = dataDir + "Shape_AspectRatioLocked_out.doc";
doc.save(dataDir);

Formlayout in Zelle festlegen

Sie können auch angeben, ob die Form innerhalb oder außerhalb einer Tabelle angezeigt wird, indem Sie die Eigenschaft IsLayoutInCell verwenden.

Das folgende Codebeispiel zeigt, wie Sie mit der Eigenschaft IsLayoutInCell arbeiten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "LayoutInCell.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.isLayoutInCell(false); // Display the shape outside of table cell if it will be placed into a cell.
watermark.setWidth(300);
watermark.setHeight(70);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setRotation(-40);
watermark.getFill().setColor(Color.GRAY);
watermark.setStrokeColor(Color.GRAY);
watermark.getTextPath().setText("watermarkText");
watermark.getTextPath().setFontFamily("Arial");
watermark.setName("WaterMark_0");
watermark.setWrapType(WrapType.NONE);
Run run = (Run) doc.getChildNodes(NodeType.RUN, true).get(doc.getChildNodes(NodeType.RUN, true).getCount() - 1);
builder.moveTo(run);
builder.insertNode(watermark);
doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);
// Save the document to disk.
dataDir = dataDir + "Shape_IsLayoutInCell_out.docx";
doc.save(dataDir);

Fügen Sie abgeschnittene Ecken hinzu

Sie können mit Aspose.Words ein Snip-Eckrechteck erstellen. Die Formtypen sind SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded, und DiagonalCornersRounded.

Die DML -Form wird mit der InsertShape -Methode mit diesen Formtypen erstellt. Diese Typen können nicht zum Erstellen von VML-Formen verwendet werden. Der Versuch, eine Form mithilfe des öffentlichen Konstruktors der Klasse “Shape” zu erstellen, löst die Ausnahme “NotSupportedException” aus.

Das folgende Codebeispiel zeigt, wie diese Art von Formen in das Dokument eingefügt werden:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.insertShape(ShapeType.TOP_CORNERS_SNIPPED, 50, 50);
OoxmlSaveOptions so = new OoxmlSaveOptions(SaveFormat.DOCX);
so.setCompliance(OoxmlCompliance.ISO_29500_2008_TRANSITIONAL);
dataDir = dataDir + "AddCornersSnipped_out.docx";
//Save the document to disk.
doc.save(dataDir, so);

Tatsächliche Formgrenzpunkte abrufen

Mit Aspose.Words API können Sie die Position und Größe der Form, die den Block enthält, in Punkten relativ zum Anker der obersten Form ermitteln. Verwenden Sie dazu die Eigenschaft BoundsInPoints.

Das folgende Codebeispiel zeigt, wie Sie mit der Eigenschaft BoundsInPoints arbeiten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.insertImage(dataDir + "Test.png");
shape.setAspectRatioLocked(false);
System.out.print("\nGets the actual bounds of the shape in points. ");
System.out.println(shape.getShapeRenderer().getBoundsInPoints());

Vertikalen Anker angeben

Sie können die vertikale Textausrichtung innerhalb einer Form mit der Eigenschaft VerticalAnchor angeben.

Das folgende Codebeispiel zeigt, wie Sie mit der Eigenschaft VerticalAnchor arbeiten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "VerticalAnchor.docx");
NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
int imageIndex = 0;
for (Shape textBoxShape : (Iterable<Shape>) shapes) {
if (textBoxShape != null) {
textBoxShape.getTextBox().setVerticalAnchor(TextBoxAnchor.BOTTOM);
}
}
doc.save(dataDir + "VerticalAnchor_out.docx");

SmartArt-Form erkennen

Aspose.Words erlaubt auch zu erkennen, ob die Form ein SmartArt Objekt hat. Verwenden Sie dazu die Eigenschaft HasSmartArt.

Das folgende Codebeispiel zeigt, wie Sie mit der Eigenschaft HasSmartArt arbeiten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "input.docx");
NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
int count = 0;
for (Shape textBoxShape : (Iterable<Shape>) shapes) {
if (textBoxShape.hasSmartArt()) {
count++;
}
}
System.out.println("The document has " + count + " shapes with SmartArt.");

Horizontales Linienformat

Sie können eine horizontale Regelform mit der InsertHorizontalRule -Methode in ein Dokument einfügen.

Aspose.Words API stellt die HorizontalRuleFormat-Eigenschaft bereit, um auf die Eigenschaften der horizontalen Regelform zuzugreifen. Die Klasse HorizontalRuleFormat macht grundlegende Eigenschaften wie Höhe, Farbe, NoShade usw. verfügbar. für die Formatierung einer horizontalen Linie.

Das folgende Codebeispiel zeigt, wie HorizontalRuleFormat gesetzt wird:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
DocumentBuilder builder = new DocumentBuilder();
Shape shape = builder.insertHorizontalRule();
HorizontalRuleFormat horizontalRuleFormat = shape.getHorizontalRuleFormat();
horizontalRuleFormat.setAlignment(HorizontalRuleAlignment.CENTER);
horizontalRuleFormat.setWidthPercent(70);
horizontalRuleFormat.setHeight(3);
horizontalRuleFormat.setColor(Color.BLUE);
horizontalRuleFormat.setNoShade(true);
builder.getDocument().save("HorizontalRuleFormat.docx");