Praca z kształtami

Temat ten omawia sposób programowania z wykorzystaniem kształtów Aspose.Words.

Kształty w Aspose.Words reprezentują obiekt w warstwie rysunku, taki jak AutoShape, textbox, freeform, OLE obiekt, ActiveX kontroli lub obrazu. Dokument Word może zawierać jeden lub więcej różnych kształtów. Kształty dokumentu są reprezentowane przez Shape Klasa.

Wstaw kształt przy użyciu buildera dokumentów

Można umieścić kształt inline o określonym typie i rozmiarze oraz swobodnie pływający kształt z określoną pozycją, rozmiar i typ zawijania tekstu do dokumentu za pomocą InsertShape Metoda. W InsertShape metoda umożliwia wprowadzenie kształtu DML do modelu dokumentu. Dokument musi być zapisany w formacie, który obsługuje kształty DML, w przeciwnym razie, takie węzły zostaną przekształcone w kształt VML, podczas zapisywania dokumentów.

Poniższy przykład kodu pokazuje, jak umieścić te typy kształtów w dokumencie:

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

Ustaw wskaźnik Aspect zablokowany

Stosowanie Aspose.Words, można określić, czy proporcja kształtu jest zablokowana przez AspectRatioLocked nieruchomości.

Poniższy przykład kodu pokazuje jak pracować z AspectRatioLocked nieruchomość:

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

Ustaw układ w komórce

Można również określić, czy kształt jest wyświetlany wewnątrz tabeli lub poza nim za pomocą IsLayoutInCell nieruchomości.

Poniższy przykład kodu pokazuje jak pracować z IsLayoutInCell nieruchomość:

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

Dodaj zakręty wycięte

Możesz utworzyć prostokąt narożny za pomocą Aspose.Words. Typy kształtów są * SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded, * i DiagonalCornersRounded.

Kształt DML jest tworzony przy użyciu InsertShape metoda z tymi typami kształtu. Typy te nie mogą być używane do tworzenia kształtów VML. Próba stworzenia kształtu przy użyciu konstruktora publicznego klasy “Kształt” podnosi wyjątek “NotSupportedException”.

Poniższy przykład kodu pokazuje, jak umieścić ten typ kształtów w dokumencie:

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

Pobierz rzeczywiste punkty kształtów bounds

Stosowanie Aspose.Words API, można uzyskać położenie i rozmiar kształtu zawierającego blok w punktach, względem kotwicy najwyższego kształtu. Aby to zrobić, należy użyć BoundsInPoints nieruchomości.

Poniższy przykład kodu pokazuje jak pracować z BoundsInPoints nieruchomość:

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

Określić kąt pionowy

Możesz określić pionowe ustawienie tekstu w obrębie kształtu za pomocą VerticalAnchor nieruchomości.

Poniższy przykład kodu pokazuje jak pracować z VerticalAnchor nieruchomość:

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

Wykryj inteligencję Kształt sztuki

Aspose.Words pozwala również na wykrycie, czy kształt ma SmartArt obiekt. Aby to zrobić, należy użyć HasSmartArt nieruchomości.

Poniższy przykład kodu pokazuje jak pracować z HasSmartArt nieruchomość:

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

Poziomowy format zasady

Można umieścić poziome zasady kształt do dokumentu za pomocą InsertHorizontalRule Metoda.

Aspose.Words API zapewnia HorizontalRuleFormat właściwość dostępu do właściwości poziomego kształtu reguły. W HorizontalRuleFormat klasa ujawnia podstawowe właściwości, takie jak Wysokość, Kolor, NoShade itp. do formatowania horyzontalnej reguły.

Poniższy przykład kodu pokazuje jak ustawić 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");