Lucrul cu forme
Acest subiect discută modul de a lucra programatic cu forme folosind Aspose.Words.
Formele din Aspose.Words reprezintă un obiect în stratul de desenare, cum ar fi un AutoShape, textbox, formă liberă, obiect OLE, control ActiveX sau imagine. Un document de tip “Word” poate conţine una sau mai multe forme diferite. Formele din Aspose.Words sunt reprezentate de clasa Shape.
Inserarea de forme folosind Generatorul de documente
Puteți insera forme în linie cu tipul și dimensiunea specificate și forme plutitoare libere cu poziția, dimensiunea și tipul de învelire a textului specificate într-un document folosind metoda InsertShape. Metoda “InsertShape” permite inserarea unui obiect “DML Shape” în modelul documentului. Documentul trebuie să fie salvat în formatul care suportă forme DML altfel aceste noduri vor fi convertite într-o formă VML în timp ce se salvează documentul.
Exemplul următor arată cum să inserați aceste tipuri de forme în document:
// 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); |
Setați raportul de aspect blocat
Utilizând Aspose.Words, puteți specifica dacă raportul de aspect al formei este blocat prin proprietatea AspectRatioLocked.
Exemplul de cod următor arată cum să lucreze cu proprietatea AspectRatioLocked:
// 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); |
Setaţi layoutul formei în celulă
Puteți specifica, de asemenea, dacă forma este afișată în interiorul unei tabele sau în afara acesteia folosind proprietatea IsLayoutInCell.
Exemplul de cod următor arată cum să lucreze cu proprietatea IsLayoutInCell:
// 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); |
Creează dreptunghi de colț Snip
Poți crea un dreptunghi de colț folosind Aspose.Words. Tipurile de forme sunt: SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded și DiagonalCornersRounded.
Forma DML este creată folosind InsertShape metodă cu aceste tipuri de forme. Aceste tipuri nu pot fi folosite pentru a crea forme VML. Încercarea de a crea o formă folosind constructorul public al clasei “Shape” ridică excepţia “NotSupportedException.
Exemplul următor de cod arată cum să inserezi aceste tipuri de forme în document:
// 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); |
Obțineți punctele de contur formei reale
Folosind Aspose.Words API, puteți obține locația și dimensiunea blocului container al formei în puncte, relativ la ancora celei mai de sus forme. Pentru a face asta, foloseşte proprietatea BoundsInPoints.
Exemplul de cod următor prezintă modul în care se lucrează cu proprietatea BoundsInPoints:
// 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); |
Specificați ancorarea verticală
“Poți specifica alinierea textului vertical în interiorul unei forme folosind proprietatea VerticalAnchor”.
Exemplul de cod următor arată cum să lucrezi cu proprietatea VerticalAnchor":
// 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"); |
Detectează forma SmartArt
Aspose.Words permite, de asemenea, detectarea dacă Forma are un SmartArt
obiect. Pentru a face asta folosiți proprietatea HasSmartArt.
Exemplul de cod următor arată cum se lucrează cu proprietatea HasSmartArt:
// 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); |
Introduceţi regula orizontală în document
Puteţi insera o formă de regulă orizontală într-un document folosind metoda InsertHorizontalRule.
Exemplul de cod următor arată cum să o faci:
// 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 oferă proprietatea HorizontalRuleFormat pentru a accesa proprietățile formei regulii orizontale. Clasa HorizontalRuleFormat expune proprietăți de bază precum Înălțime, Culoare, FărăUmbră etc., pentru formatarea unei reguli orizontale.
Exemplul următor de cod arată cum să setezi 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"); |
Importă forme cu Math XML ca forme în DOM
Puteți folosi proprietatea ConvertShapeToOfficeMath pentru a converti formele cu EquationXML în obiecte matematice Office. Valoarea implicită a acestei proprietăți corespunde cu Microsoft Word comportament, adică formele cu ecuații XML nu sunt convertite în obiecte de matematică Office.
Exemplul de cod următor arată cum să converti forme în obiecte de matematică Office:
// 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); |