Werken met Shapes

Dit onderwerp bespreekt hoe je programmatisch te werken met vormen met behulp van Aspose.Words.

De vormen in Aspose.Words vertegenwoordigen een object in de tekenlaag, zoals een AutoShape, tekstvak, vrije vorm, OLE-object, ActiveX-besturing of afbeelding. Een Word-document kan een of meer verschillende vormen bevatten. Vormen van het document worden vertegenwoordigd door de Shape Klasse.

Vorm invoegen met behulp van documentbouwer

U kunt inline vorm met opgegeven type en grootte en vrij zwevende vorm met de opgegeven positie, grootte en tekst wrap type in een document met behulp van de InsertShape methode. De InsertShape methode maakt het invoegen van DML vorm in het document model. Het document moet worden opgeslagen in het formaat, dat DML-vormen ondersteunt, anders zullen dergelijke knooppunten worden omgezet in VML-vorm, terwijl documenten worden opgeslagen.

Het volgende voorbeeld van code laat zien hoe u deze vormen in het document kunt invoegen:

// 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);

Aspectratio vergrendeld instellen

Gebruik Aspose.Words, u kunt aangeven of de beeldverhouding van de vorm door de AspectRatioLocked eigendom.

De volgende code voorbeeld laat zien hoe te werken met de AspectRatioLocked eigenschap:

// 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);

Vormindeling instellen in cel

U kunt ook aangeven of de vorm wordt weergegeven in een tabel of daarbuiten met behulp van de IsLayoutInCell eigendom.

De volgende code voorbeeld laat zien hoe te werken met de IsLayoutInCell eigenschap:

// 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);

Hoeken geknipt toevoegen

U kunt een kniphoek rechthoek met behulp van Aspose.Words. De vormtypes zijn SingleCornerGesnipt, TopCornersGesnipte, DiagonalCornersGesnipte, TopCornersOneRoundedOneSniped, SingleCornerRounded, TopCornersRounded, en DiagonalCornersRounded.

De DML vorm wordt gemaakt met behulp van InsertShape methode met deze vormtypes. Deze types kunnen niet worden gebruikt om VML vormen te maken. Poging om vorm te creëren door gebruik te maken van de publieke constructeur van de “Shape” klasse verhoogt de “NotSupported Exception” uitzondering.

Het volgende voorbeeld van code laat zien hoe je dit soort vormen in het document invoegt:

// 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);

Krijg feitelijke vormgrenzen

Gebruik Aspose.Words API, U kunt de locatie en grootte van de vorm met blok in punten, ten opzichte van het anker van de bovenste vorm. Om dit te doen, gebruik de BoundsInPoints eigendom.

De volgende code voorbeeld laat zien hoe te werken met de BoundsInPoints eigenschap:

// 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());

Verticale anker opgeven

U kunt de tekst verticale uitlijning binnen een vorm met behulp van de VerticalAnchor eigendom.

De volgende code voorbeeld laat zien hoe te werken met de VerticalAnchor eigenschap:

// 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");

Smart detecteren Kunstvorm

Aspose.Words kan ook detecteren of de vorm heeft een SmartArt object. Om dit te doen, gebruik de HasSmartArt eigendom.

De volgende code voorbeeld laat zien hoe te werken met de HasSmartArt eigenschap:

// 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.");

Horizontaal regelformaat

U kunt horizontale regel vorm in te voegen in een document met behulp van de InsertHorizontalRule methode.

Aspose.Words API levert HorizontalRuleFormat eigendom om toegang te krijgen tot de eigenschappen van de horizontale regelvorm. De HorizontalRuleFormat klasse onthult basiseigenschappen zoals Hoogte, Kleur, NoShade etc. voor het formatteren van een horizontale regel.

Het volgende voorbeeld van de code laat zien hoe u moet instellen HorizontalRuleFormat:

// 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");