Travailler avec des Formes

Cette rubrique explique comment travailler par programmation avec des formes à l’aide de Aspose.Words.

Les formes dans Aspose.Words représentent un objet dans le calque de dessin, tel qu’un AutoShape, une zone de texte, une forme libre, un objet OLE, un contrôle ActiveX ou une image. Un document Word peut contenir une ou plusieurs formes différentes. Les formes du document sont représentées par la classe Shape.

Insérer Une Forme À L’Aide Du Générateur De Documents

Vous pouvez insérer une forme en ligne avec le type et la taille spécifiés et une forme flottante avec la position, la taille et le type d’habillage de texte spécifiés dans un document à l’aide de la méthode InsertShape. La méthode InsertShape permet d’insérer une forme DML dans le modèle de document. Le document doit être enregistré dans le format, qui prend en charge les formes DML, sinon, ces nœuds seront convertis en forme VML, lors de l’enregistrement du document.

L’exemple de code suivant montre comment insérer ces types de formes dans le document:

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

Définir le Rapport Hauteur / Largeur Verrouillé

En utilisant Aspose.Words, vous pouvez spécifier si le rapport hauteur / largeur de la forme est verrouillé via la propriété AspectRatioLocked.

L’exemple de code suivant montre comment utiliser la propriété AspectRatioLocked:

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

Définir La Disposition Des Formes Dans La Cellule

Vous pouvez également spécifier si la forme est affichée à l’intérieur ou à l’extérieur d’un tableau à l’aide de la propriété IsLayoutInCell.

L’exemple de code suivant montre comment utiliser la propriété IsLayoutInCell:

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

Ajouter Des Coins Coupés

Vous pouvez créer un rectangle d’angle en utilisant Aspose.Words. Les types de forme sont SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded, et DiagonalCornersRounded.

La forme DML est créée à l’aide de la méthode InsertShape avec ces types de forme. Ces types ne peuvent pas être utilisés pour créer VML formes. Tenter de créer une forme en utilisant le constructeur public de la classe “Shape” déclenche l’exception" NotSupportedException".

L’exemple de code suivant montre comment insérer ce type de formes dans le document:

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

Obtenez des Points de Limites de Forme Réels

En utilisant Aspose.Words API, vous pouvez obtenir l’emplacement et la taille de la forme contenant le bloc en points, par rapport à l’ancre de la forme la plus haute. Pour ce faire, utilisez la propriété BoundsInPoints.

L’exemple de code suivant montre comment utiliser la propriété BoundsInPoints:

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

Spécifier L’Ancrage Vertical

Vous pouvez spécifier l’alignement vertical du texte dans une forme à l’aide de la propriété VerticalAnchor.

L’exemple de code suivant montre comment utiliser la propriété VerticalAnchor:

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

Détecter SmartArt Forme

Aspose.Words permet également de détecter si la Forme a un objet SmartArt. Pour ce faire, utilisez la propriété HasSmartArt.

L’exemple de code suivant montre comment utiliser la propriété HasSmartArt:

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

Format de Règle Horizontale

Vous pouvez insérer une forme de règle horizontale dans un document à l’aide de la méthode InsertHorizontalRule.

Aspose.Words API fournit la propriété HorizontalRuleFormat pour accéder aux propriétés de la forme de règle horizontale. La classe HorizontalRuleFormat expose des propriétés de base comme la Hauteur, la Couleur, NoShade etc. pour la mise en forme d’une règle horizontale.

L’exemple de code suivant montre comment définir 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");