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 één of meerdere vormen bevatten. Vormen in Aspose.Words worden vertegenwoordigd door de Shape Klasse.

Vormen 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 worden dergelijke knooppunten omgezet in VML-vorm, terwijl het document wordt 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-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
//Free-floating shape insertion.
Shape shape = builder.InsertShape(ShapeType.TextBox, RelativeHorizontalPosition.Page, 100, RelativeVerticalPosition.Page, 100, 50, 50, WrapType.None);
shape.Rotation = 30.0;
builder.Writeln();
//Inline shape insertion.
shape = builder.InsertShape(ShapeType.TextBox, 50, 50);
shape.Rotation = 30.0;
OoxmlSaveOptions so = new OoxmlSaveOptions(SaveFormat.Docx);
// "Strict" or "Transitional" compliance allows to save shape as DML.
so.Compliance = OoxmlCompliance.Iso29500_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 verhouding van de vorm en het aspect 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-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
var shape = builder.InsertImage(dataDir + "Test.png");
shape.AspectRatioLocked = false;
dataDir = dataDir + "Shape_AspectRatioLocked_out.doc";
// Save the document to disk.
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-.NET
Document doc = new Document(dataDir + @"LayoutInCell.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
Shape watermark = new Shape(doc, ShapeType.TextPlainText);
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page;
watermark.IsLayoutInCell = true; // Display the shape outside of table cell if it will be placed into a cell.
watermark.Width = 300;
watermark.Height = 70;
watermark.HorizontalAlignment = HorizontalAlignment.Center;
watermark.VerticalAlignment = VerticalAlignment.Center;
watermark.Rotation = -40;
watermark.Fill.Color = Color.Gray;
watermark.StrokeColor = Color.Gray;
watermark.TextPath.Text = "watermarkText";
watermark.TextPath.FontFamily = "Arial";
watermark.Name = string.Format("WaterMark_{0}", Guid.NewGuid());
watermark.WrapType = WrapType.None;
Run run = doc.GetChildNodes(NodeType.Run, true)[doc.GetChildNodes(NodeType.Run, true).Count - 1] as Run;
builder.MoveTo(run);
builder.InsertNode(watermark);
doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2010);
dataDir = dataDir + "Shape_IsLayoutInCell_out.docx";
// Save the document to disk.
doc.Save(dataDir);

Kniphoekrek aanmaken

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 “NotSupportedException” uitzondering.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Shape shape = builder.InsertShape(ShapeType.TopCornersSnipped, 50, 50);
OoxmlSaveOptions so = new OoxmlSaveOptions(SaveFormat.Docx);
so.Compliance = OoxmlCompliance.Iso29500_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-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
var shape = builder.InsertImage(dataDir + "Test.png");
shape.AspectRatioLocked = false;
Console.Write("\nGets the actual bounds of the shape in points.");
Console.WriteLine(shape.GetShapeRenderer().BoundsInPoints);

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-.NET
Document doc = new Document(dataDir + @"VerticalAnchor.docx");
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
Shape textBoxShape = shapes[0] as Shape;
if (textBoxShape != null)
{
textBoxShape.TextBox.VerticalAnchor = 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-.NET
Document doc = new Document(dataDir + "input.docx");
int count = 0;
foreach (Shape shape in doc.GetChildNodes(NodeType.Shape, true))
{
if (shape.HasSmartArt)
count++;
}
Console.WriteLine("The document has {0} shapes with SmartArt.", count);

Horizontaal invoegen Regel in document

U kunt horizontale regelvorm invoegen in een document met behulp van de InsertHorizontalRule methode.

Het volgende code voorbeeld laat zien hoe dit te doen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Initialize document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Insert a horizontal rule shape into the document.");
builder.InsertHorizontalRule();
dataDir = dataDir + "DocumentBuilder.InsertHorizontalRule_out.doc";
doc.Save(dataDir);

Aspose.Words API levert de HorizontalRuleFormat eigenschap 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 code voorbeeld laat zien hoe te instellen HorizontalRuleFormat:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
Shape shape = builder.InsertHorizontalRule();
HorizontalRuleFormat horizontalRuleFormat = shape.HorizontalRuleFormat;
horizontalRuleFormat.Alignment = HorizontalRuleAlignment.Center;
horizontalRuleFormat.WidthPercent = 70;
horizontalRuleFormat.Height = 3;
horizontalRuleFormat.Color = Color.Blue;
horizontalRuleFormat.NoShade = true;
builder.Document.Save("HorizontalRuleFormat.docx");

Formaten met wiskunde XML importeren als vormen in DOM

U kunt de ConvertShapeToOfficeMath eigenschap om de vormen te converteren met EquationXML naar Office Math objecten. De standaardwaarde van deze eigenschap komt overeen met Microsoft Word gedrag, d.w.z. vormen met vergelijking XML worden niet omgezet naar Office wiskunde objecten.

Het volgende voorbeeld van code laat zien hoe vormen te converteren naar Office Math objecten:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions lo = new LoadOptions();
lo.ConvertShapeToOfficeMath = true;
// Specify load option to use previous default behaviour i.e. convert math shapes to office math ojects on loading stage.
Document doc = new Document(dataDir + @"OfficeMath.docx", lo);
//Save the document into DOCX
doc.Save(dataDir + "ConvertShapeToOfficeMath_out.docx", SaveFormat.Docx);