public class DocumentBuilder
DocumentBuilder makes the process of building a Document easier.
Document is a composite object consisting of a tree of nodes and while inserting content
nodes directly into the tree is possible, it requires good understanding of the tree structure.
DocumentBuilder is a "facade" for the complex structure of Document and allows
to insert content and formatting quickly and easily. Create a DocumentBuilder and associate it with a The DocumentBuilder has an internal cursor where the text will be inserted
when you call Use the Use the Use the Use the Note that Font, ParagraphFormat and PageSetup properties are updated whenever
you navigate to a different place in the document to reflect formatting properties available at the new location. Example: Example: Example:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Start the table, then populate the first row with two cells.
builder.startTable();
builder.insertCell();
builder.write("Row 1, Cell 1.");
builder.insertCell();
builder.write("Row 1, Cell 2.");
// Call the builder's EndRow method to start a new row.
builder.endRow();
builder.insertCell();
builder.write("Row 2, Cell 1.");
builder.insertCell();
builder.write("Row 2, Cell 2.");
builder.endTable();
doc.save(getArtifactsDir() + "DocumentBuilder.CreateTable.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Specify that we want different headers and footers for first, even and odd pages.
builder.getPageSetup().setDifferentFirstPageHeaderFooter(true);
builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true);
// Create the headers, then add three pages to the document to display each header type.
builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST);
builder.write("Header for the first page");
builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN);
builder.write("Header for even pages");
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
builder.write("Header for all other pages");
builder.moveToSection(0);
builder.writeln("Page1");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.writeln("Page2");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.writeln("Page3");
doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.startTable();
// Setting table formatting options for a document builder
// will apply them to every row and cell that we add with it.
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.getCellFormat().clearFormatting();
builder.getCellFormat().setWidth(150.0);
builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN);
builder.getCellFormat().setWrapText(false);
builder.getCellFormat().setFitText(true);
builder.getRowFormat().clearFormatting();
builder.getRowFormat().setHeightRule(HeightRule.EXACTLY);
builder.getRowFormat().setHeight(50.0);
builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D);
builder.getRowFormat().getBorders().setColor(Color.ORANGE);
builder.insertCell();
builder.write("Row 1, Col 1");
builder.insertCell();
builder.write("Row 1, Col 2");
builder.endRow();
// Changing the formatting will apply it to the current cell,
// and any new cells that we create with the builder afterward.
// This will not affect the cells that we have added previously.
builder.getCellFormat().getShading().clearFormatting();
builder.insertCell();
builder.write("Row 2, Col 1");
builder.insertCell();
builder.write("Row 2, Col 2");
builder.endRow();
// Increase row height to fit the vertical text.
builder.insertCell();
builder.getRowFormat().setHeight(150.0);
builder.getCellFormat().setOrientation(TextOrientation.UPWARD);
builder.write("Row 3, Col 1");
builder.insertCell();
builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD);
builder.write("Row 3, Col 2");
builder.endRow();
builder.endTable();
doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Constructor Summary |
---|
DocumentBuilder()
Initializes a new instance of this class. |
DocumentBuilder(Document doc)
Initializes a new instance of this class. |
Property Getters/Setters Summary | ||
---|---|---|
boolean | getBold() | |
void | setBold(booleanvalue) | |
True if the font is formatted as bold. | ||
CellFormat | getCellFormat() | |
Returns an object that represents current table cell formatting properties.
|
||
Node | getCurrentNode() | |
Gets the node that is currently selected in this DocumentBuilder.
|
||
Paragraph | getCurrentParagraph() | |
Gets the paragraph that is currently selected in this DocumentBuilder.
|
||
Section | getCurrentSection() | |
Gets the section that is currently selected in this DocumentBuilder.
|
||
Story | getCurrentStory() | |
Gets the story that is currently selected in this DocumentBuilder.
|
||
Document | getDocument() | |
void | setDocument(Document value) | |
Gets or sets the |
||
Font | getFont() | |
Returns an object that represents current font formatting properties.
|
||
boolean | isAtEndOfParagraph() | |
Returns true if the cursor is at the end of the current paragraph.
|
||
boolean | isAtStartOfParagraph() | |
Returns true if the cursor is at the beginning of the current paragraph (no text before the cursor).
|
||
boolean | getItalic() | |
void | setItalic(booleanvalue) | |
True if the font is formatted as italic. | ||
ListFormat | getListFormat() | |
Returns an object that represents current list formatting properties.
|
||
PageSetup | getPageSetup() | |
Returns an object that represents current page setup and section properties.
|
||
ParagraphFormat | getParagraphFormat() | |
Returns an object that represents current paragraph formatting properties.
|
||
RowFormat | getRowFormat() | |
Returns an object that represents current table row formatting properties.
|
||
int | getUnderline() | |
void | setUnderline(intvalue) | |
Gets/sets underline type for the current font. The value of the property is Underline integer constant. |
Method Summary | ||
---|---|---|
Row | deleteRow(int tableIndex, int rowIndex) | |
Deletes a row from a table.
|
||
BookmarkEnd | endBookmark(java.lang.String bookmarkName) | |
Marks the current position in the document as a bookmark end.
|
||
EditableRangeEnd | endEditableRange() | |
Marks the current position in the document as an editable range end.
|
||
EditableRangeEnd | endEditableRange(EditableRangeStart start) | |
Marks the current position in the document as an editable range end.
|
||
Row | endRow() | |
Ends a table row in the document.
|
||
Table | endTable() | |
Ends a table in the document.
|
||
void | insertBreak(int breakType) | |
Inserts a break of the specified type into the document.
|
||
Cell | insertCell() | |
Inserts a table cell into the document.
|
||
Shape | insertChart(int chartType, double width, double height) | |
Inserts an chart object into the document and scales it to the specified size.
|
||
Shape | insertChart(int chartType, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an chart object into the document and scales it to the specified size.
|
||
FormField | insertCheckBox(java.lang.String name, boolean defaultValue, boolean checkedValue, int size) | |
Inserts a checkbox form field at the current position.
|
||
FormField | insertCheckBox(java.lang.String name, boolean checkedValue, int size) | |
Inserts a checkbox form field at the current position.
|
||
FormField | insertComboBox(java.lang.String name, java.lang.String[] items, int selectedIndex) | |
Inserts a combobox form field at the current position.
|
||
Node | insertDocument(Document srcDoc, int importFormatMode) | |
Inserts a document at the cursor position.
|
||
Node | insertDocument(Document srcDoc, int importFormatMode, ImportFormatOptions importFormatOptions) | |
Inserts a document at the cursor position.
|
||
Field | insertField(int fieldType, boolean updateField) | |
Inserts a Word field into a document and optionally updates the field result.
|
||
Field | insertField(java.lang.String fieldCode) | |
Inserts a Word field into a document and updates the field result.
|
||
Field | insertField(java.lang.String fieldCode, java.lang.String fieldValue) | |
Inserts a Word field into a document without updating the field result.
|
||
Footnote | insertFootnote(int footnoteType, java.lang.String footnoteText) | |
Inserts a footnote or endnote into the document.
|
||
Footnote | insertFootnote(int footnoteType, java.lang.String footnoteText, java.lang.String referenceMark) | |
Inserts a footnote or endnote into the document.
|
||
Shape | insertHorizontalRule() | |
Inserts a horizontal rule shape into the document.
|
||
void | insertHtml(java.lang.String html) | |
Inserts an HTML string into the document.
|
||
void | insertHtml(java.lang.String html, boolean useBuilderFormatting) | |
Inserts an HTML string into the document.
|
||
Field | insertHyperlink(java.lang.String displayText, java.lang.String urlOrBookmark, boolean isBookmark) | |
Inserts a hyperlink into the document.
|
||
Shape | insertImage(byte[] imageBytes) | |
Inserts an image from a byte array into the document. The image is inserted inline and at 100% scale.
|
||
Shape | insertImage(byte[] imageBytes, double width, double height) | |
Inserts an inline image from a byte array into the document and scales it to the specified size.
|
||
Shape | insertImage(byte[] imageBytes, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an image from a byte array at the specified position and size.
|
||
Shape | insertImage(java.awt.image.BufferedImage image) | |
Inserts an image from a |
||
Shape | insertImage(java.awt.image.BufferedImage image, double width, double height) | |
Inserts an inline image from a |
||
Shape | insertImage(java.awt.image.BufferedImage image, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an image from a |
||
Shape | insertImage(java.io.InputStream stream) | |
Inserts an image from a stream into the document. The image is inserted inline and at 100% scale.
|
||
Shape | insertImage(java.io.InputStream stream, double width, double height) | |
Inserts an inline image from a stream into the document and scales it to the specified size.
|
||
Shape | insertImage(java.io.InputStream stream, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an image from a stream at the specified position and size.
|
||
Shape | insertImage(java.lang.String fileName) | |
Inserts an image from a file or URL into the document. The image is inserted inline and at 100% scale.
|
||
Shape | insertImage(java.lang.String fileName, double width, double height) | |
Inserts an inline image from a file or URL into the document and scales it to the specified size.
|
||
Shape | insertImage(java.lang.String fileName, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an image from a file or URL at the specified position and size.
|
||
void | insertNode(Node node) | |
Inserts a text level node inside the current paragraph before the cursor.
|
||
Shape | insertOleObjectAsIcon(java.lang.String fileName, boolean isLinked, java.lang.String iconFile, java.lang.String iconCaption) | |
Inserts an embedded or linked OLE object as icon into the document.
Allows to specify icon file and caption. Detects OLE object type using file extension.
|
||
Shape | insertOleObjectAsIcon(java.lang.String fileName, java.lang.String progId, boolean isLinked, java.lang.String iconFile, java.lang.String iconCaption) | |
Inserts an embedded or linked OLE object as icon into the document.
Allows to specify icon file and caption. Detects OLE object type using given progID parameter.
|
||
Shape | insertOnlineVideo(java.lang.String videoUrl, double width, double height) | |
Inserts an online video object into the document and scales it to the specified size.
|
||
Shape | insertOnlineVideo(java.lang.String videoUrl, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an online video object into the document and scales it to the specified size.
|
||
Shape | insertOnlineVideo(java.lang.String videoUrl, java.lang.String videoEmbedCode, byte[] thumbnailImageBytes, double width, double height) | |
Inserts an online video object into the document and scales it to the specified size.
|
||
Shape | insertOnlineVideo(java.lang.String videoUrl, java.lang.String videoEmbedCode, byte[] thumbnailImageBytes, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts an online video object into the document and scales it to the specified size.
|
||
Paragraph | insertParagraph() | |
Inserts a paragraph break into the document.
|
||
Shape | insertShape(int shapeType, double width, double height) | |
Inserts inline shape with specified type and size.
|
||
Shape | insertShape(int shapeType, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) | |
Inserts free-floating shape with specified position, size and text wrap type.
|
||
Shape | insertSignatureLine(SignatureLineOptions signatureLineOptions) | |
Inserts a signature line at the current position.
|
||
Shape | insertSignatureLine(SignatureLineOptions signatureLineOptions, int horzPos, double left, int vertPos, double top, int wrapType) | |
Inserts a signature line at the specified position.
|
||
void | insertStyleSeparator() | |
Inserts style separator into the document.
|
||
Field | insertTableOfContents(java.lang.String switches) | |
Inserts a TOC (table of contents) field into the document.
|
||
FormField | insertTextInput(java.lang.String name, int type, java.lang.String format, java.lang.String fieldValue, int maxLength) | |
Inserts a text form field at the current position.
|
||
void | moveTo(Node node) | |
Moves the cursor to an inline node or to the end of a paragraph.
|
||
boolean | moveToBookmark(java.lang.String bookmarkName) | |
Moves the cursor to a bookmark.
|
||
boolean | moveToBookmark(java.lang.String bookmarkName, boolean isStart, boolean isAfter) | |
Moves the cursor to a bookmark with greater precision.
|
||
void | moveToCell(int tableIndex, int rowIndex, int columnIndex, int characterIndex) | |
Moves the cursor to a table cell in the current section.
|
||
void | moveToDocumentEnd() | |
Moves the cursor to the end of the document.
|
||
void | moveToDocumentStart() | |
Moves the cursor to the beginning of the document.
|
||
void | moveToField(Field field, boolean isAfter) | |
Moves the cursor to a field in the document.
|
||
void | moveToHeaderFooter(int headerFooterType) | |
Moves the cursor to the beginning of a header or footer in the current section.
|
||
boolean | moveToMergeField(java.lang.String fieldName) | |
Moves the cursor to a position just beyond the specified merge field and removes the merge field.
|
||
boolean | moveToMergeField(java.lang.String fieldName, boolean isAfter, boolean isDeleteField) | |
Moves the merge field to the specified merge field.
|
||
void | moveToParagraph(int paragraphIndex, int characterIndex) | |
Moves the cursor to a paragraph in the current section.
|
||
void | moveToSection(int sectionIndex) | |
Moves the cursor to the beginning of the body in a specified section.
|
||
void | popFont() | |
Retrieves character formatting previously saved on the stack.
|
||
void | pushFont() | |
Saves current character formatting onto the stack.
|
||
BookmarkStart | startBookmark(java.lang.String bookmarkName) | |
Marks the current position in the document as a bookmark start.
|
||
EditableRangeStart | startEditableRange() | |
Marks the current position in the document as an editable range start.
|
||
Table | startTable() | |
Starts a table in the document.
|
||
void | write(java.lang.String text) | |
Inserts a string into the document at the current insert position.
|
||
void | writeln() | |
Inserts a paragraph break into the document.
|
||
void | writeln(java.lang.String text) | |
Inserts a string and a paragraph break into the document.
|
public DocumentBuilder() throws java.lang.Exception
Example:
Shows how to insert formatted text using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify font formatting, then add text. Font font = builder.getFont(); font.setSize(16.0); font.setBold(true); font.setColor(Color.BLUE); font.setName("Courier New"); font.setUnderline(Underline.DASH); builder.write("Hello world!");
public DocumentBuilder(Document doc)
doc
- The Document object to attach to.Example:
Shows how to insert a Table of contents (TOC) into a document using heading styles as entries.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a table of contents for the first page of the document. // Configure the table to pick up paragraphs with headings of levels 1 to 3. // Also, set its entries to be hyperlinks that will take us // to the location of the heading when left-clicked in Microsoft Word. builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); builder.insertBreak(BreakType.PAGE_BREAK); // Populate the table of contents by adding paragraphs with heading styles. // Each such heading will create an entry in the table, as long as its heading level is between 1 and 3. builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 1.1"); builder.writeln("Heading 1.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 2"); builder.writeln("Heading 3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3); builder.writeln("Heading 3.1.1"); builder.writeln("Heading 3.1.2"); builder.writeln("Heading 3.1.3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_4); builder.writeln("Heading 3.1.3.1"); builder.writeln("Heading 3.1.3.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.2"); builder.writeln("Heading 3.3"); // A table of contents is a field of a type that needs to be updated to show an up-to-date result. doc.updateFields(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertToc.docx");
Example:
Shows how to create headers and footers in a document using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify that we want different headers and footers for first, even and odd pages. builder.getPageSetup().setDifferentFirstPageHeaderFooter(true); builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true); // Create the headers, then add three pages to the document to display each header type. builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); builder.write("Header for the first page"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN); builder.write("Header for even pages"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Header for all other pages"); builder.moveToSection(0); builder.writeln("Page1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page3"); doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
public boolean getBold() / public void setBold(boolean value)
Example:
Shows how to fill MERGEFIELDs with data with a document builder instead of a mail merge.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert some MERGEFIELDS, which accept data from columns of the same name in a data source during a mail merge, // and then fill them manually. builder.insertField(" MERGEFIELD Chairman "); builder.insertField(" MERGEFIELD ChiefFinancialOfficer "); builder.insertField(" MERGEFIELD ChiefTechnologyOfficer "); builder.moveToMergeField("Chairman"); builder.setBold(true); builder.writeln("John Doe"); builder.moveToMergeField("ChiefFinancialOfficer"); builder.setItalic(true); builder.writeln("Jane Doe"); builder.moveToMergeField("ChiefTechnologyOfficer"); builder.setItalic(true); builder.writeln("John Bloggs"); doc.save(getArtifactsDir() + "DocumentBuilder.FillMergeFields.docx");
public CellFormat getCellFormat()
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Example:
Shows how to format cells with a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1."); // Insert a second cell, and then configure cell text padding options. // The builder will apply these settings at its current cell, and any new cells creates afterwards. builder.insertCell(); CellFormat cellFormat = builder.getCellFormat(); cellFormat.setWidth(250.0); cellFormat.setLeftPadding(30.0); cellFormat.setRightPadding(30.0); cellFormat.setTopPadding(30.0); cellFormat.setBottomPadding(30.0); builder.write("Row 1, cell 2."); builder.endRow(); builder.endTable(); // The first cell was unaffected by the padding reconfiguration, and still holds the default values. Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getWidth()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getLeftPadding()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getRightPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getTopPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getBottomPadding()); Assert.assertEquals(250.0d, table.getFirstRow().getCells().get(1).getCellFormat().getWidth()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getLeftPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getRightPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getTopPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getBottomPadding()); // The first cell will still grow in the output document to match the size of its neighboring cell. doc.save(getArtifactsDir() + "DocumentBuilder.SetCellFormatting.docx");
Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
public Node getCurrentNode()
CurrentNode is a cursor of DocumentBuilder and points to a Node that is a direct child of a Paragraph. Any insert operations you perform using DocumentBuilder will insert before the CurrentNode.
When the current paragraph is empty or the cursor is positioned just before the end of the paragraph, CurrentNode returns null.
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public Paragraph getCurrentParagraph()
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public Section getCurrentSection()
Example:
Shows how to insert a floating image and specify its position and size.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // By default, the image is inline Shape shape = builder.insertImage(getImageDir() + "Logo.jpg"); // Make the image float, put it behind text and center on the page shape.setWrapType(WrapType.NONE); // Make position relative to the page shape.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE); shape.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE); // Set the shape's coordinates, from the top left corner of the page shape.setLeft(100.0); shape.setTop(80.0); // Set the shape's height shape.setHeight(125.0); // The width will be scaled to the height and the dimensions of the real image Assert.assertEquals(shape.getWidth(), 125.0); // The Bottom and Right members contain the locations of the bottom and right edges of the image Assert.assertEquals(shape.getBottom(), shape.getTop() + shape.getHeight()); Assert.assertEquals(shape.getRight(), shape.getLeft() + shape.getWidth()); doc.save(getArtifactsDir() + "Image.CreateFloatingPositionSize.docx");
public Story getCurrentStory()
Example:
Shows how to work with a document builder's current story.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // A Story is a type of node that has child Paragraph nodes, such as a Body. Assert.assertEquals(builder.getCurrentStory(), doc.getFirstSection().getBody()); Assert.assertEquals(builder.getCurrentStory(), builder.getCurrentParagraph().getParentNode()); Assert.assertEquals(StoryType.MAIN_TEXT, builder.getCurrentStory().getStoryType()); builder.getCurrentStory().appendParagraph("Text added to current Story."); // A Story can also contain tables. Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1"); builder.insertCell(); builder.write("Row 1, cell 2"); builder.endTable(); Assert.assertTrue(builder.getCurrentStory().getTables().contains(table));
public Document getDocument() / public void setDocument(Document value)
Example:
Shows how to insert sections using DocumentBuilder, specify page setup for a section and reset page setup to defaults.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Modify the first section in the document builder.getPageSetup().setOrientation(Orientation.LANDSCAPE); builder.getPageSetup().setVerticalAlignment(PageVerticalAlignment.CENTER); builder.writeln("Section 1, landscape oriented and text vertically centered."); // Start a new section and reset its formatting to defaults builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.getPageSetup().clearFormatting(); builder.writeln("Section 2, back to default Letter paper size, portrait orientation and top alignment."); doc.save(getArtifactsDir() + "PageSetup.ClearFormatting.docx");
public Font getFont()
Use Font to access and modify font formatting properties.
Specify font formatting before inserting text.
Example:
Shows how to insert a string surrounded by a border into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.getFont().getBorder().setColor(Color.GREEN); builder.getFont().getBorder().setLineWidth(2.5); builder.getFont().getBorder().setLineStyle(LineStyle.DASH_DOT_STROKER); builder.write("Text surrounded by green border."); doc.save(getArtifactsDir() + "Border.FontBorder.docx");
Example:
Shows how to create a formatted table using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); table.setLeftIndent(20.0); // Set some formatting options for text and table appearance. builder.getRowFormat().setHeight(40.0); builder.getRowFormat().setHeightRule(HeightRule.AT_LEAST); builder.getCellFormat().getShading().setBackgroundPatternColor(new Color((198), (217), (241))); builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getFont().setSize(16.0); builder.getFont().setName("Arial"); builder.getFont().setBold(true); // Configuring the formatting options in a document builder will apply them // to the current cell/row its cursor is in, // as well as any new cells and rows created using that builder. builder.write("Header Row,\n Cell 1"); builder.insertCell(); builder.write("Header Row,\n Cell 2"); builder.insertCell(); builder.write("Header Row,\n Cell 3"); builder.endRow(); // Reconfigure the builder's formatting objects for new rows and cells that we are about to make. // The builder will not apply these to the first row already created so that it will stand out as a header row. builder.getCellFormat().getShading().setBackgroundPatternColor(Color.WHITE); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getRowFormat().setHeight(30.0); builder.getRowFormat().setHeightRule(HeightRule.AUTO); builder.insertCell(); builder.getFont().setSize(12.0); builder.getFont().setBold(false); builder.write("Row 1, Cell 1."); builder.insertCell(); builder.write("Row 1, Cell 2."); builder.insertCell(); builder.write("Row 1, Cell 3."); builder.endRow(); builder.insertCell(); builder.write("Row 2, Cell 1."); builder.insertCell(); builder.write("Row 2, Cell 2."); builder.insertCell(); builder.write("Row 2, Cell 3."); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.CreateFormattedTable.docx");
public boolean isAtEndOfParagraph()
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public boolean isAtStartOfParagraph()
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public boolean getItalic() / public void setItalic(boolean value)
Example:
Shows how to fill MERGEFIELDs with data with a document builder instead of a mail merge.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert some MERGEFIELDS, which accept data from columns of the same name in a data source during a mail merge, // and then fill them manually. builder.insertField(" MERGEFIELD Chairman "); builder.insertField(" MERGEFIELD ChiefFinancialOfficer "); builder.insertField(" MERGEFIELD ChiefTechnologyOfficer "); builder.moveToMergeField("Chairman"); builder.setBold(true); builder.writeln("John Doe"); builder.moveToMergeField("ChiefFinancialOfficer"); builder.setItalic(true); builder.writeln("Jane Doe"); builder.moveToMergeField("ChiefTechnologyOfficer"); builder.setItalic(true); builder.writeln("John Bloggs"); doc.save(getArtifactsDir() + "DocumentBuilder.FillMergeFields.docx");
public ListFormat getListFormat()
Example:
Shows how to apply default bulleted or numbered list formatting to paragraphs when using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Aspose.Words allows:"); builder.writeln(); // Start a numbered list with default formatting builder.getListFormat().applyNumberDefault(); builder.writeln("Opening documents from different formats:"); Assert.assertEquals(0, builder.getListFormat().getListLevelNumber()); // Go to second list level, add more text builder.getListFormat().listIndent(); Assert.assertEquals(1, builder.getListFormat().getListLevelNumber()); builder.writeln("DOC"); builder.writeln("PDF"); builder.writeln("HTML"); // Outdent to the first list level builder.getListFormat().listOutdent(); Assert.assertEquals(0, builder.getListFormat().getListLevelNumber()); builder.writeln("Processing documents"); builder.writeln("Saving documents in different formats:"); // Indent the list level again builder.getListFormat().listIndent(); builder.writeln("DOC"); builder.writeln("PDF"); builder.writeln("HTML"); builder.writeln("MHTML"); builder.writeln("Plain text"); // Outdent the list level again builder.getListFormat().listOutdent(); builder.writeln("Doing many other things!"); // End the numbered list builder.getListFormat().removeNumbers(); builder.writeln(); builder.writeln("Aspose.Words main advantages are:"); builder.writeln(); // Start a bulleted list with default formatting builder.getListFormat().applyBulletDefault(); builder.writeln("Great performance"); builder.writeln("High reliability"); builder.writeln("Quality code and working"); builder.writeln("Wide variety of features"); builder.writeln("Easy to understand API"); // End the bulleted list builder.getListFormat().removeNumbers(); doc.save(getArtifactsDir() + "Lists.ApplyDefaultBulletsAndNumbers.docx");
public PageSetup getPageSetup()
Example:
Shows how to insert sections using DocumentBuilder, specify page setup for a section and reset page setup to defaults.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Modify the first section in the document builder.getPageSetup().setOrientation(Orientation.LANDSCAPE); builder.getPageSetup().setVerticalAlignment(PageVerticalAlignment.CENTER); builder.writeln("Section 1, landscape oriented and text vertically centered."); // Start a new section and reset its formatting to defaults builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.getPageSetup().clearFormatting(); builder.writeln("Section 2, back to default Letter paper size, portrait orientation and top alignment."); doc.save(getArtifactsDir() + "PageSetup.ClearFormatting.docx");
public ParagraphFormat getParagraphFormat()
Example:
Shows how to create a formatted table using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); table.setLeftIndent(20.0); // Set some formatting options for text and table appearance. builder.getRowFormat().setHeight(40.0); builder.getRowFormat().setHeightRule(HeightRule.AT_LEAST); builder.getCellFormat().getShading().setBackgroundPatternColor(new Color((198), (217), (241))); builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getFont().setSize(16.0); builder.getFont().setName("Arial"); builder.getFont().setBold(true); // Configuring the formatting options in a document builder will apply them // to the current cell/row its cursor is in, // as well as any new cells and rows created using that builder. builder.write("Header Row,\n Cell 1"); builder.insertCell(); builder.write("Header Row,\n Cell 2"); builder.insertCell(); builder.write("Header Row,\n Cell 3"); builder.endRow(); // Reconfigure the builder's formatting objects for new rows and cells that we are about to make. // The builder will not apply these to the first row already created so that it will stand out as a header row. builder.getCellFormat().getShading().setBackgroundPatternColor(Color.WHITE); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getRowFormat().setHeight(30.0); builder.getRowFormat().setHeightRule(HeightRule.AUTO); builder.insertCell(); builder.getFont().setSize(12.0); builder.getFont().setBold(false); builder.write("Row 1, Cell 1."); builder.insertCell(); builder.write("Row 1, Cell 2."); builder.insertCell(); builder.write("Row 1, Cell 3."); builder.endRow(); builder.insertCell(); builder.write("Row 2, Cell 1."); builder.insertCell(); builder.write("Row 2, Cell 2."); builder.insertCell(); builder.write("Row 2, Cell 3."); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.CreateFormattedTable.docx");
public RowFormat getRowFormat()
Example:
Shows how to format rows with a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1."); // Start a second row, and then configure its height. The builder will apply these settings to // its current row, as well as any new rows it creates afterwards. builder.endRow(); RowFormat rowFormat = builder.getRowFormat(); rowFormat.setHeight(100.0); rowFormat.setHeightRule(HeightRule.EXACTLY); builder.insertCell(); builder.write("Row 2, cell 1."); builder.endTable(); // The first row was unaffected by the padding reconfiguration and still holds the default values. Assert.assertEquals(0.0d, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0d, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); doc.save(getArtifactsDir() + "DocumentBuilder.SetRowFormatting.docx");
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
public int getUnderline() / public void setUnderline(int value)
Example:
Shows how to format text inserted by a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.setUnderline(Underline.DASH); builder.getFont().setColor(Color.BLUE); builder.getFont().setSize(32.0); // The builder applies formatting to its current paragraph and any new text added by it afterward. builder.writeln("Large, blue, and underlined text."); doc.save(getArtifactsDir() + "DocumentBuilder.InsertUnderline.docx");
public Row deleteRow(int tableIndex, int rowIndex)
If the cursor is inside the row that is being deleted, the cursor is moved out to the next row or to the next paragraph after the table.
If you delete a row from a table that contains only one row, the whole table is deleted.
For the index parameters, when index is greater than or equal to 0, it specifies an index from the beginning with 0 being the first element. When index is less than 0, it specified an index from the end with -1 being the last element.
tableIndex
- The index of the table.rowIndex
- The index of the row in the table.Example:
Shows how to delete a row from a table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); builder.insertCell(); builder.write("Row 2, cell 1."); builder.insertCell(); builder.write("Row 2, cell 2."); builder.endTable(); Assert.assertEquals(2, table.getRows().getCount()); // Delete the first row of the first table in the document. builder.deleteRow(0, 0); Assert.assertEquals(1, table.getRows().getCount()); Assert.assertEquals("Row 2, cell 1.\u0007Row 2, cell 2.", table.getText().trim());
public BookmarkEnd endBookmark(java.lang.String bookmarkName)
Bookmarks in a document can overlap and span any range. To create a valid bookmark you need to
call both
Badly formed bookmarks or bookmarks with duplicate names will be ignored when the document is saved.
bookmarkName
- Name of the bookmark.Example:
Shows how to insert a hyperlink which references a local bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startBookmark("Bookmark1"); builder.write("Bookmarked text. "); builder.endBookmark("Bookmark1"); builder.writeln("Text outside of the bookmark."); // Insert a HYPERLINK field that links to the bookmark. We can pass field switches // to the InsertHyperlink method as part of the argument containing the referenced bookmark's name. builder.getFont().setColor(Color.BLUE); builder.getFont().setUnderline(Underline.SINGLE); builder.insertHyperlink("Link to Bookmark1", "Bookmark1\" \\o \"Hyperlink Tip", true); doc.save(getArtifactsDir() + "DocumentBuilder.InsertHyperlinkToLocalBookmark.docx");
Example:
Shows how create a bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // A valid bookmark needs to have document body text enclosed by // BookmarkStart and BookmarkEnd nodes created with a matching bookmark name. builder.startBookmark("MyBookmark"); builder.writeln("Hello world!"); builder.endBookmark("MyBookmark"); Assert.assertEquals(1, doc.getRange().getBookmarks().getCount()); Assert.assertEquals("MyBookmark", doc.getRange().getBookmarks().get(0).getName()); Assert.assertEquals("Hello world!", doc.getRange().getBookmarks().get(0).getText().trim());
public EditableRangeEnd endEditableRange()
Editable range in a document can overlap and span any range. To create a valid editable range you need to
call both
Badly formed editable range will be ignored when the document is saved.
Example:
Shows how to work with an editable range.Document doc = new Document(); doc.protect(ProtectionType.READ_ONLY, "MyPassword"); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello world! Since we have set the document's protection level to read-only," + " we cannot edit this paragraph without the password."); // Editable ranges allow us to leave parts of protected documents open for editing. EditableRangeStart editableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph is inside an editable range, and can be edited."); EditableRangeEnd editableRangeEnd = builder.endEditableRange(); // A well-formed editable range has a start node, and end node. // These nodes have matching IDs and encompass editable nodes. EditableRange editableRange = editableRangeStart.getEditableRange(); Assert.assertEquals(editableRangeStart.getId(), editableRange.getId()); Assert.assertEquals(editableRangeEnd.getId(), editableRange.getId()); // Different parts of the editable range link to each other. Assert.assertEquals(editableRangeStart.getId(), editableRange.getEditableRangeStart().getId()); Assert.assertEquals(editableRangeStart.getId(), editableRangeEnd.getEditableRangeStart().getId()); Assert.assertEquals(editableRange.getId(), editableRangeStart.getEditableRange().getId()); Assert.assertEquals(editableRangeEnd.getId(), editableRange.getEditableRangeEnd().getId()); // We can access the node types of each part like this. The editable range itself is not a node, // but an entity which consists of a start, an end, and their enclosed contents. Assert.assertEquals(NodeType.EDITABLE_RANGE_START, editableRangeStart.getNodeType()); Assert.assertEquals(NodeType.EDITABLE_RANGE_END, editableRangeEnd.getNodeType()); builder.writeln("This paragraph is outside the editable range, and cannot be edited."); doc.save(getArtifactsDir() + "EditableRange.CreateAndRemove.docx"); // Remove an editable range. All the nodes that were inside the range will remain intact. editableRange.remove();
public EditableRangeEnd endEditableRange(EditableRangeStart start)
Use this overload during creating nested editable ranges.
Editable range in a document can overlap and span any range. To create a valid editable range you need to
call both
Badly formed editable range will be ignored when the document is saved.
start
- This editable range start.Example:
Shows how to create nested editable ranges.Document doc = new Document(); doc.protect(ProtectionType.READ_ONLY, "MyPassword"); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello world! Since we have set the document's protection level to read-only, " + "we cannot edit this paragraph without the password."); // Create two nested editable ranges. EditableRangeStart outerEditableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph inside the outer editable range and can be edited."); EditableRangeStart innerEditableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph inside both the outer and inner editable ranges and can be edited."); // Currently, the document builder's node insertion cursor is in more than one ongoing editable range. // When we want to end an editable range in this situation, // we need to specify which of the ranges we wish to end by passing its EditableRangeStart node. builder.endEditableRange(innerEditableRangeStart); builder.writeln("This paragraph inside the outer editable range and can be edited."); builder.endEditableRange(outerEditableRangeStart); builder.writeln("This paragraph is outside any editable ranges, and cannot be edited."); // If a region of text has two overlapping editable ranges with specified groups, // the combined group of users excluded by both groups are prevented from editing it. outerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.EVERYONE); innerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.CONTRIBUTORS); doc.save(getArtifactsDir() + "EditableRange.Nested.docx");
public Row endRow()
Call EndRow to end a table row. If you call
Use the
Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Example:
Shows how to merge table cells vertically.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a cell into the first column of the first row. // This cell will be the first in a range of vertically merged cells. builder.insertCell(); builder.getCellFormat().setVerticalMerge(CellMerge.FIRST); builder.write("Text in merged cells."); // Insert a cell into the second column of the first row, then end the row. // Also, configure the builder to disable vertical merging in created cells. builder.insertCell(); builder.getCellFormat().setVerticalMerge(CellMerge.NONE); builder.write("Text in unmerged cell."); builder.endRow(); // Insert a cell into the first column of the second row. // Instead of adding text contents, we will merge this cell with the first cell that we added directly above. builder.insertCell(); builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); // Insert another independent cell in the second column of the second row, and end the table. builder.insertCell(); builder.getCellFormat().setVerticalMerge(CellMerge.NONE); builder.write("Text in unmerged cell."); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "CellFormat.VerticalMerge.docx");
public Table endTable()
This method should be called only once after
Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
Example:
Shows how to format cells with a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1."); // Insert a second cell, and then configure cell text padding options. // The builder will apply these settings at its current cell, and any new cells creates afterwards. builder.insertCell(); CellFormat cellFormat = builder.getCellFormat(); cellFormat.setWidth(250.0); cellFormat.setLeftPadding(30.0); cellFormat.setRightPadding(30.0); cellFormat.setTopPadding(30.0); cellFormat.setBottomPadding(30.0); builder.write("Row 1, cell 2."); builder.endRow(); builder.endTable(); // The first cell was unaffected by the padding reconfiguration, and still holds the default values. Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getWidth()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getLeftPadding()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getRightPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getTopPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getBottomPadding()); Assert.assertEquals(250.0d, table.getFirstRow().getCells().get(1).getCellFormat().getWidth()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getLeftPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getRightPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getTopPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getBottomPadding()); // The first cell will still grow in the output document to match the size of its neighboring cell. doc.save(getArtifactsDir() + "DocumentBuilder.SetCellFormatting.docx");
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
public void insertBreak(int breakType)
breakType
- A Example:
Shows how to insert a Table of contents (TOC) into a document using heading styles as entries.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a table of contents for the first page of the document. // Configure the table to pick up paragraphs with headings of levels 1 to 3. // Also, set its entries to be hyperlinks that will take us // to the location of the heading when left-clicked in Microsoft Word. builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); builder.insertBreak(BreakType.PAGE_BREAK); // Populate the table of contents by adding paragraphs with heading styles. // Each such heading will create an entry in the table, as long as its heading level is between 1 and 3. builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 1.1"); builder.writeln("Heading 1.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 2"); builder.writeln("Heading 3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3); builder.writeln("Heading 3.1.1"); builder.writeln("Heading 3.1.2"); builder.writeln("Heading 3.1.3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_4); builder.writeln("Heading 3.1.3.1"); builder.writeln("Heading 3.1.3.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.2"); builder.writeln("Heading 3.3"); // A table of contents is a field of a type that needs to be updated to show an up-to-date result. doc.updateFields(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertToc.docx");
Example:
Shows how to create headers and footers in a document using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify that we want different headers and footers for first, even and odd pages. builder.getPageSetup().setDifferentFirstPageHeaderFooter(true); builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true); // Create the headers, then add three pages to the document to display each header type. builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); builder.write("Header for the first page"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN); builder.write("Header for even pages"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Header for all other pages"); builder.moveToSection(0); builder.writeln("Page1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page3"); doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
Example:
Shows how to insert sections using DocumentBuilder, specify page setup for a section and reset page setup to defaults.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Modify the first section in the document builder.getPageSetup().setOrientation(Orientation.LANDSCAPE); builder.getPageSetup().setVerticalAlignment(PageVerticalAlignment.CENTER); builder.writeln("Section 1, landscape oriented and text vertically centered."); // Start a new section and reset its formatting to defaults builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.getPageSetup().clearFormatting(); builder.writeln("Section 2, back to default Letter paper size, portrait orientation and top alignment."); doc.save(getArtifactsDir() + "PageSetup.ClearFormatting.docx");
public Cell insertCell()
To start a table, just call InsertCell. After this, any content you add using
other methods of the
To start a new cell in the same row, call InsertCell again.
To end a table row call
Use the
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Example:
Shows how to use a document builder to create a table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Start the table, then populate the first row with two cells. builder.startTable(); builder.insertCell(); builder.write("Row 1, Cell 1."); builder.insertCell(); builder.write("Row 1, Cell 2."); // Call the builder's EndRow method to start a new row. builder.endRow(); builder.insertCell(); builder.write("Row 2, Cell 1."); builder.insertCell(); builder.write("Row 2, Cell 2."); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.CreateTable.docx");
public Shape insertChart(int chartType, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
chartType
- A width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert a pie chart into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Chart chart = builder.insertChart(ChartType.PIE, ConvertUtil.pixelToPoint(300.0), ConvertUtil.pixelToPoint(300.0)).getChart(); chart.getSeries().clear(); chart.getSeries().add("My fruit", new String[] { "Apples", "Bananas", "Cherries" }, new double[] { 1.3, 2.2, 1.5 }); doc.save(getArtifactsDir() + "DocumentBuilder.InsertPieChart.docx");
public Shape insertChart(int chartType, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
chartType
- A horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to specify position and wrapping while inserting a chart.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertChart(ChartType.PIE, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilder.InsertedChartRelativePosition.docx");
public FormField insertCheckBox(java.lang.String name, boolean defaultValue, boolean checkedValue, int size) throws java.lang.Exception
If you specify a name for the form field, then a bookmark is automatically created with the same name.
name
- The name of the form field. Can be an empty string. The value longer than 20 characters will be truncated.defaultValue
- Default value of the checkbox form field.checkedValue
- Current checked status of the checkbox form field.size
- Specifies the size of the checkbox in points. Specify 0 for MS Word
to calculate the size of the checkbox automatically.Example:
Shows how to insert checkboxes into the document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert checkboxes of varying sizes and default checked statuses. builder.write("Unchecked check box of a default size: "); builder.insertCheckBox("", false, false, 0); builder.insertParagraph(); builder.write("Large checked check box: "); builder.insertCheckBox("CheckBox_Default", true, true, 50); builder.insertParagraph(); // Form fields have a name length limit of 20 characters. builder.write("Very large checked check box: "); builder.insertCheckBox("CheckBox_OnlyCheckedValue", true, 100); Assert.assertEquals("CheckBox_OnlyChecked", doc.getRange().getFormFields().get(2).getName()); // We can interact with these check boxes in Microsoft Word by double clicking them. doc.save(getArtifactsDir() + "DocumentBuilder.InsertCheckBox.docx");
public FormField insertCheckBox(java.lang.String name, boolean checkedValue, int size) throws java.lang.Exception
If you specify a name for the form field, then a bookmark is automatically created with the same name.
name
- The name of the form field. Can be an empty string. The value longer than 20 characters will be truncated.checkedValue
- Checked status of the checkbox form field.size
- Specifies the size of the checkbox in points. Specify 0 for MS Word
to calculate the size of the checkbox automatically.Example:
Shows how to insert checkboxes into the document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert checkboxes of varying sizes and default checked statuses. builder.write("Unchecked check box of a default size: "); builder.insertCheckBox("", false, false, 0); builder.insertParagraph(); builder.write("Large checked check box: "); builder.insertCheckBox("CheckBox_Default", true, true, 50); builder.insertParagraph(); // Form fields have a name length limit of 20 characters. builder.write("Very large checked check box: "); builder.insertCheckBox("CheckBox_OnlyCheckedValue", true, 100); Assert.assertEquals("CheckBox_OnlyChecked", doc.getRange().getFormFields().get(2).getName()); // We can interact with these check boxes in Microsoft Word by double clicking them. doc.save(getArtifactsDir() + "DocumentBuilder.InsertCheckBox.docx");
public FormField insertComboBox(java.lang.String name, java.lang.String[] items, int selectedIndex) throws java.lang.Exception
If you specify a name for the form field, then a bookmark is automatically created with the same name.
name
- The name of the form field. Can be an empty string. The value longer than 20 characters will be truncated.items
- The items of the ComboBox. Maximum is 25 items.selectedIndex
- The index of the selected item in the ComboBox.Example:
Shows how to create form fields.DocumentBuilder builder = new DocumentBuilder(); // Form fields are objects in the document that the user can interact with by being prompted to enter values. // We can create them using a document builder, and below are two ways of doing so. // 1 - Basic text input: builder.insertTextInput("My text input", TextFormFieldType.REGULAR, "", "Enter your name here", 30); // 2 - Combo box with prompt text, and a range of possible values: String[] items = { "-- Select your favorite footwear --", "Sneakers", "Oxfords", "Flip-flops", "Other" }; builder.insertParagraph(); builder.insertComboBox("My combo box", items, 0); builder.getDocument().save(getArtifactsDir() + "DocumentBuilder.CreateForm.docx");
Example:
Shows how to insert a combo box form field into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a form that prompts the user to pick one of the items from the menu. builder.write("Pick a fruit: "); String[] items = { "Apple", "Banana", "Cherry" }; builder.insertComboBox("DropDown", items, 0); doc.save(getArtifactsDir() + "DocumentBuilder.InsertComboBox.docx");
public Node insertDocument(Document srcDoc, int importFormatMode)
srcDoc
- Source document for inserting.importFormatMode
- A Example:
Shows how to insert a document into another document.Document doc = new Document(getMyDir() + "Document.docx"); DocumentBuilder builder = new DocumentBuilder(doc); builder.moveToDocumentEnd(); builder.insertBreak(BreakType.PAGE_BREAK); Document docToInsert = new Document(getMyDir() + "Formatted elements.docx"); builder.insertDocument(docToInsert, ImportFormatMode.KEEP_SOURCE_FORMATTING); builder.getDocument().save(getArtifactsDir() + "DocumentBuilder.InsertDocument.docx");
public Node insertDocument(Document srcDoc, int importFormatMode, ImportFormatOptions importFormatOptions)
srcDoc
- Source document for inserting.importFormatMode
- A importFormatOptions
- Allows to specify options that affect formatting of a result document.Example:
Shows how to resolve duplicate styles while inserting documents.Document dstDoc = new Document(); DocumentBuilder builder = new DocumentBuilder(dstDoc); Style myStyle = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "MyStyle"); myStyle.getFont().setSize(14.0); myStyle.getFont().setName("Courier New"); myStyle.getFont().setColor(Color.BLUE); builder.getParagraphFormat().setStyleName(myStyle.getName()); builder.writeln("Hello world!"); // Clone the document and edit the clone's "MyStyle" style, so it is a different color than that of the original. // If we insert the clone into the original document, the two styles with the same name will cause a clash. Document srcDoc = dstDoc.deepClone(); srcDoc.getStyles().get("MyStyle").getFont().setColor(Color.RED); // When we enable SmartStyleBehavior and use the KeepSourceFormatting import format mode, // Aspose.Words will resolve style clashes by converting source document styles. // with the same names as destination styles into direct paragraph attributes. ImportFormatOptions options = new ImportFormatOptions(); options.setSmartStyleBehavior(true); builder.insertDocument(srcDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING, options); dstDoc.save(getArtifactsDir() + "DocumentBuilder.SmartStyleBehavior.docx");
public Field insertField(int fieldType, boolean updateField) throws java.lang.Exception
This method inserts a field into a document.
Aspose.Words can update fields of most types, but not all. For more details see the
fieldType
- A updateField
- Specifies whether to update the field immediately.Example:
Shows how to insert a field into a document using FieldType.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert two fields while passing a flag which determines whether to update them as the builder inserts them. // In some cases, updating fields could be computationally expensive, and it may be a good idea to defer the update. // Not all field types require updating, exceptions include BARCODE and MERGEFIELD. doc.getBuiltInDocumentProperties().setAuthor("John Doe"); builder.write("This document was written by "); builder.insertField(FieldType.FIELD_AUTHOR, updateInsertedFieldsImmediately); builder.insertParagraph(); builder.write("\nThis is page "); builder.insertField(FieldType.FIELD_PAGE, updateInsertedFieldsImmediately); Assert.assertEquals(" AUTHOR ", doc.getRange().getFields().get(0).getFieldCode()); Assert.assertEquals(" PAGE ", doc.getRange().getFields().get(1).getFieldCode()); if (updateInsertedFieldsImmediately) { Assert.assertEquals("John Doe", doc.getRange().getFields().get(0).getResult()); Assert.assertEquals("1", doc.getRange().getFields().get(1).getResult()); } else { Assert.assertEquals("", doc.getRange().getFields().get(0).getResult()); Assert.assertEquals("", doc.getRange().getFields().get(1).getResult()); // We will need to update these fields using the update methods manually. doc.getRange().getFields().get(0).update(); Assert.assertEquals("John Doe", doc.getRange().getFields().get(0).getResult()); doc.updateFields(); Assert.assertEquals("1", doc.getRange().getFields().get(1).getResult()); }
public Field insertField(java.lang.String fieldCode) throws java.lang.Exception
This method inserts a field into a document and updates the field result immediately.
Aspose.Words can update fields of most types, but not all. For more details see the
fieldCode
- The field code to insert (without curly braces).Example:
Shows how to insert fields, and move the document builder's cursor to them.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertField("MERGEFIELD MyMergeField1 \\* MERGEFORMAT"); builder.insertField("MERGEFIELD MyMergeField2 \\* MERGEFORMAT"); // Move the cursor to the first MERGEFIELD. builder.moveToMergeField("MyMergeField1", true, false); // Note that the cursor is placed immediately after the first MERGEFIELD, and before the second. Assert.assertEquals(doc.getRange().getFields().get(1).getStart(), builder.getCurrentNode()); Assert.assertEquals(doc.getRange().getFields().get(0).getEnd(), builder.getCurrentNode().getPreviousSibling()); // If we wish to edit the field's field code or contents using the builder, // its cursor would need to be inside a field. // To place it inside a field, we would need to call the document builder's MoveTo method // and pass the field's start or separator node as an argument. builder.write(" Text between our merge fields. "); doc.save(getArtifactsDir() + "DocumentBuilder.MergeFields.docx");
Example:
Shows how to insert a field into a document using a field code.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Field dateField = builder.insertField("DATE \\* MERGEFORMAT"); Assert.assertEquals(FieldType.FIELD_DATE, dateField.getType()); Assert.assertEquals("DATE \\* MERGEFORMAT", dateField.getFieldCode());
public Field insertField(java.lang.String fieldCode, java.lang.String fieldValue)
Fields in Microsoft Word documents consist of a field code and a field result. The field code is like a formula and the field result is like the value that the formula produces. The field code may also contain field switches that are like additional instructions to perform a specific action.
You can switch between displaying field codes and results in your document in Microsoft Word using the keyboard shortcut Alt+F9. Field codes appear between curly braces ( { } ).
To create a field, you need to specify a field type, field code and a "placeholder" field value. If you are not sure about a particular field code syntax, create the field in Microsoft Word first and switch to see its field code.
Aspose.Words can calculate field results for most of the field types, but this method
does not update the field result automatically. Because the field result is not calculated automatically,
you are expected to pass some string value (or even an empty string) that will be inserted into the field result.
This value will remain in the field result as a placeholder until the field is updated.
To update the field result you can call
fieldCode
- The field code to insert (without curly braces).fieldValue
- The field value to insert. Pass null for fields that do not have a value.Example:
Shows how to control page numbering per section.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Section 1"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.writeln("Section 2"); // Use document builder to create a header with a page number field for the first section // The page number will look like "Page V" builder.moveToSection(0); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Page "); builder.insertField("PAGE", ""); // Set first section page numbering PageSetup pageSetup = doc.getSections().get(0).getPageSetup(); pageSetup.setRestartPageNumbering(true); pageSetup.setPageStartingNumber(5); pageSetup.setPageNumberStyle(NumberStyle.UPPERCASE_ROMAN); // Create a header for the section // The page number will look like " - 10 - ". builder.moveToSection(1); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.write(" - "); builder.insertField("PAGE", ""); builder.write(" - "); // Set second section page numbering pageSetup = doc.getSections().get(1).getPageSetup(); pageSetup.setPageStartingNumber(10); pageSetup.setRestartPageNumbering(true); pageSetup.setPageNumberStyle(NumberStyle.ARABIC); doc.save(getArtifactsDir() + "PageSetup.PageNumbering.docx");
public Footnote insertFootnote(int footnoteType, java.lang.String footnoteText)
footnoteType
- A footnoteText
- Specifies the text of the footnote.Example:
Shows how to reference text with a footnote and an endnote.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert some text and mark it with a footnote with the IsAuto attribute set to "true" by default, // so the marker seen in the body text will be auto-numbered at "1", // and the footnote will appear at the bottom of the page. builder.write("This text will be referenced by a footnote."); builder.insertFootnote(FootnoteType.FOOTNOTE, "Footnote comment regarding referenced text."); // Insert more text and mark it with an endnote with a custom reference mark, // which will be used in place of the number "2" and set "IsAuto" to false. builder.write("This text will be referenced by an endnote."); builder.insertFootnote(FootnoteType.ENDNOTE, "Endnote comment regarding referenced text.", "CustomMark"); // Footnotes always appear at the bottom of their referenced text, // so this page break will not affect the footnote. // On the other hand, endnotes are always at the end of the document // so that this page break will push the endnote down to the next page. builder.insertBreak(BreakType.PAGE_BREAK); doc.save(getArtifactsDir() + "DocumentBuilder.InsertFootnote.docx");
public Footnote insertFootnote(int footnoteType, java.lang.String footnoteText, java.lang.String referenceMark)
footnoteType
- A footnoteText
- Specifies the text of the footnote.referenceMark
- Specifies the custom reference mark of the footnote.Example:
Shows how to reference text with a footnote and an endnote.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert some text and mark it with a footnote with the IsAuto attribute set to "true" by default, // so the marker seen in the body text will be auto-numbered at "1", // and the footnote will appear at the bottom of the page. builder.write("This text will be referenced by a footnote."); builder.insertFootnote(FootnoteType.FOOTNOTE, "Footnote comment regarding referenced text."); // Insert more text and mark it with an endnote with a custom reference mark, // which will be used in place of the number "2" and set "IsAuto" to false. builder.write("This text will be referenced by an endnote."); builder.insertFootnote(FootnoteType.ENDNOTE, "Endnote comment regarding referenced text.", "CustomMark"); // Footnotes always appear at the bottom of their referenced text, // so this page break will not affect the footnote. // On the other hand, endnotes are always at the end of the document // so that this page break will push the endnote down to the next page. builder.insertBreak(BreakType.PAGE_BREAK); doc.save(getArtifactsDir() + "DocumentBuilder.InsertFootnote.docx");
public Shape insertHorizontalRule() throws java.lang.Exception
Example:
Shows how to insert a horizontal rule shape, and customize its formatting.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Shape shape = builder.insertHorizontalRule(); HorizontalRuleFormat horizontalRuleFormat = shape.getHorizontalRuleFormat(); horizontalRuleFormat.setAlignment(HorizontalRuleAlignment.CENTER); horizontalRuleFormat.setWidthPercent(70.0); horizontalRuleFormat.setHeight(3.0); horizontalRuleFormat.setColor(Color.BLUE); horizontalRuleFormat.setNoShade(true); Assert.assertTrue(shape.isHorizontalRule()); Assert.assertTrue(shape.getHorizontalRuleFormat().getNoShade());
public void insertHtml(java.lang.String html) throws java.lang.Exception
You can use InsertHtml to insert an HTML fragment or whole HTML document.
html
- An HTML string to insert into the document.Example:
Shows how to mail merge HTML data into a document.public void insertHtml() throws Exception { Document doc = new Document(getMyDir() + "Field sample - MERGEFIELD.docx"); // Add a handler for the MergeField event doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertHtml()); final String htmlText = "<html>\r\n<h1>Hello world!</h1>\r\n</html>"; // Execute mail merge doc.getMailMerge().execute(new String[]{"htmlField1"}, new String[]{htmlText}); // Save resulting document with a new name doc.save(getArtifactsDir() + "MailMergeEvent.InsertHtml.docx"); } private class HandleMergeFieldInsertHtml implements IFieldMergingCallback { /** * This is called when merge field is actually merged with data in the document. */ public void fieldMerging(final FieldMergingArgs args) throws Exception { // All merge fields that expect HTML data should be marked with some prefix, e.g. 'html' if (args.getDocumentFieldName().startsWith("html") && args.getField().getFieldCode().contains("\\b")) { FieldMergeField field = args.getField(); // Insert the text for this merge field as HTML data, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.getDocument()); builder.moveToMergeField(args.getDocumentFieldName()); builder.write(field.getTextBefore()); builder.insertHtml((String) args.getFieldValue()); // The HTML text itself should not be inserted // We have already inserted it as an HTML args.setText(""); } } public void /*IFieldMergingCallback.*/imageFieldMerging(ImageFieldMergingArgs args) { // Do nothing } }
Example:
Shows how to use a document builder to insert html content into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); final String HTML = "<p align='right'>Paragraph right</p>" + "<b>Implicit paragraph left</b>" + "<div align='center'>Div center</div>" + "<h1 align='left'>Heading 1 left.</h1>"; builder.insertHtml(HTML); // Inserting HTML code parses the formatting of each element into equivalent document text formatting. ParagraphCollection paragraphs = doc.getFirstSection().getBody().getParagraphs(); Assert.assertEquals("Paragraph right", paragraphs.get(0).getText().trim()); Assert.assertEquals(ParagraphAlignment.RIGHT, paragraphs.get(0).getParagraphFormat().getAlignment()); Assert.assertEquals("Implicit paragraph left", paragraphs.get(1).getText().trim()); Assert.assertEquals(ParagraphAlignment.LEFT, paragraphs.get(1).getParagraphFormat().getAlignment()); Assert.assertTrue(paragraphs.get(1).getRuns().get(0).getFont().getBold()); Assert.assertEquals("Div center", paragraphs.get(2).getText().trim()); Assert.assertEquals(ParagraphAlignment.CENTER, paragraphs.get(2).getParagraphFormat().getAlignment()); Assert.assertEquals("Heading 1 left.", paragraphs.get(3).getText().trim()); Assert.assertEquals("Heading 1", paragraphs.get(3).getParagraphFormat().getStyle().getName()); doc.save(getArtifactsDir() + "DocumentBuilder.InsertHtml.docx");
public void insertHtml(java.lang.String html, boolean useBuilderFormatting) throws java.lang.Exception
You can use InsertHtml to insert an HTML fragment or whole HTML document.
When useBuilderFormatting is false
,
When useBuilderFormatting is true
,
formatting of inserted text is based on
html
- An HTML string to insert into the document.useBuilderFormatting
-
A value indicating whether formatting specified in Example:
Shows how to apply a document builder's formatting while inserting HTML content.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Set a text alignment for the builder, insert an HTML paragraph with a specified alignment, and one without. builder.getParagraphFormat().setAlignment(ParagraphAlignment.DISTRIBUTED); builder.insertHtml( "<p align='right'>Paragraph 1.</p>" + "<p>Paragraph 2.</p>", useBuilderFormatting); ParagraphCollection paragraphs = doc.getFirstSection().getBody().getParagraphs(); // The first paragraph has an alignment specified. When InsertHtml parses the HTML code, // the paragraph alignment value found in the HTML code always supersedes the document builder's value. Assert.assertEquals("Paragraph 1.", paragraphs.get(0).getText().trim()); Assert.assertEquals(ParagraphAlignment.RIGHT, paragraphs.get(0).getParagraphFormat().getAlignment()); // The second paragraph has no alignment specified. It can have its alignment value filled in // by the builder's value depending on the flag we passed to the InsertHtml method. Assert.assertEquals("Paragraph 2.", paragraphs.get(1).getText().trim()); Assert.assertEquals(useBuilderFormatting ? ParagraphAlignment.DISTRIBUTED : ParagraphAlignment.LEFT, paragraphs.get(1).getParagraphFormat().getAlignment()); doc.save(getArtifactsDir() + "DocumentBuilder.InsertHtmlWithFormatting.docx");
public Field insertHyperlink(java.lang.String displayText, java.lang.String urlOrBookmark, boolean isBookmark)
Note that you need to specify font formatting for the hyperlink display text explicitly
using the
This methods internally calls
displayText
- Text of the link to be displayed in the document.urlOrBookmark
- Link destination. Can be a url or a name of a bookmark inside the document.
This method always adds apostrophes at the beginning and end of the url.isBookmark
- True if the previous parameter is a name of a bookmark inside the document;
false is the previous parameter is a URL.Example:
Shows how to use a document builder's formatting stack.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Set up font formatting, then write the text that goes before the hyperlink. builder.getFont().setName("Arial"); builder.getFont().setSize(24.0); builder.write("To visit Google, hold Ctrl and click "); // Preserve our current formatting configuration on the stack. builder.pushFont(); // Alter the builder's current formatting by applying a new style. builder.getFont().setStyleIdentifier(StyleIdentifier.HYPERLINK); builder.insertHyperlink("here", "http://www.google.com", false); Assert.assertEquals(Color.BLUE.getRGB(), builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.SINGLE, builder.getFont().getUnderline()); // Restore the font formatting that we saved earlier, and remove the element from the stack. builder.popFont(); Assert.assertEquals(0, builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.NONE, builder.getFont().getUnderline()); builder.write(". We hope you enjoyed the example."); doc.save(getArtifactsDir() + "DocumentBuilder.PushPopFont.docx");
Example:
Shows how to insert a hyperlink field.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("For more information, please visit the "); // Insert a hyperlink, and apply formatting to emphasize it. // The hyperlink will be a clickable piece of text which will take us to the location specified in the URL. builder.getFont().setColor(Color.BLUE); builder.getFont().setUnderline(Underline.SINGLE); builder.insertHyperlink("Aspose website", "http://www.aspose.com", false); builder.getFont().clearFormatting(); builder.writeln("."); // Ctrl + left clicking the link in the text in Microsoft Word will take us to the URL via a new web browser window. doc.save(getArtifactsDir() + "DocumentBuilder.InsertHyperlink.docx");
Example:
Shows how to insert a hyperlink which references a local bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startBookmark("Bookmark1"); builder.write("Bookmarked text. "); builder.endBookmark("Bookmark1"); builder.writeln("Text outside of the bookmark."); // Insert a HYPERLINK field that links to the bookmark. We can pass field switches // to the InsertHyperlink method as part of the argument containing the referenced bookmark's name. builder.getFont().setColor(Color.BLUE); builder.getFont().setUnderline(Underline.SINGLE); builder.insertHyperlink("Link to Bookmark1", "Bookmark1\" \\o \"Hyperlink Tip", true); doc.save(getArtifactsDir() + "DocumentBuilder.InsertHyperlinkToLocalBookmark.docx");
public Shape insertImage(byte[] imageBytes) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
imageBytes
- The byte array that contains the image.Example:
Shows how to insert an image from a byte array into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); byte[] imageByteArray = DocumentHelper.getBytesFromStream(new FileInputStream(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from a byte array: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(imageByteArray); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(imageByteArray, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(imageByteArray, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromByteArray.docx");
public Shape insertImage(byte[] imageBytes, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
imageBytes
- The byte array that contains the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert an image from a byte array into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); byte[] imageByteArray = DocumentHelper.getBytesFromStream(new FileInputStream(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from a byte array: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(imageByteArray); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(imageByteArray, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(imageByteArray, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromByteArray.docx");
public Shape insertImage(byte[] imageBytes, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
imageBytes
- The byte array that contains the image.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to insert an image from a byte array into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); byte[] imageByteArray = DocumentHelper.getBytesFromStream(new FileInputStream(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from a byte array: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(imageByteArray); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(imageByteArray, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(imageByteArray, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromByteArray.docx");
public Shape insertImage(java.awt.image.BufferedImage image) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Aspose.Words will insert the image in the PNG format and with default settings. If you want to insert a BufferedImage in
another format or with other settings, you need to save the image into a byte array and use
image
- The image to insert into the document.Example:
Shows how to insert an image from an object into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); BufferedImage image = ImageIO.read(new File(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from an Image object instance: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(image); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(image, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(image, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromImageObject.docx");
public Shape insertImage(java.awt.image.BufferedImage image, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Aspose.Words will insert the image in the PNG format and with default settings. If you want to insert a BufferedImage in
another format or with other settings, you need to save the image into a byte array and use
image
- The image to insert into the document.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert an image from an object into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); BufferedImage image = ImageIO.read(new File(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from an Image object instance: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(image); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(image, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(image, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromImageObject.docx");
public Shape insertImage(java.awt.image.BufferedImage image, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Aspose.Words will insert the image in the PNG format and with default settings. If you want to insert a BufferedImage in
another format or with other settings, you need to save the image into a byte array and use
image
- The image to insert into the document.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to insert an image from an object into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); BufferedImage image = ImageIO.read(new File(getImageDir() + "Logo.jpg")); // Below are three ways of inserting an image from an Image object instance: // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(image); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(image, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(image, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromImageObject.docx");
public Shape insertImage(java.io.InputStream stream) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
stream
- The stream that contains the image.
The stream will be read from the current position, so one should be careful about stream position.Example:
Shows how to insert an image from a stream into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create reusable stream ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); IOUtils.copy(new FileInputStream(getImageDir() + "Logo.jpg"), byteArrayOutputStream); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); // Below are three ways of inserting an image from a stream. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(byteArrayInputStream); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 2 - Inline shape with custom dimensions: builder.insertImage(byteArrayInputStream, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 3 - Floating shape with custom dimensions: builder.insertImage(byteArrayInputStream, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromStream.docx");
Example:
Shows how to insert an image from a stream.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); InputStream stream = new FileInputStream(getImageDir() + "Logo.jpg"); try { builder.write("Image from stream: "); builder.insertImage(stream); } finally { stream.close(); } doc.save(getArtifactsDir() + "Image.CreateFromStream.docx");
public Shape insertImage(java.io.InputStream stream, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
stream
- The stream that contains the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert an image from a stream into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create reusable stream ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); IOUtils.copy(new FileInputStream(getImageDir() + "Logo.jpg"), byteArrayOutputStream); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); // Below are three ways of inserting an image from a stream. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(byteArrayInputStream); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 2 - Inline shape with custom dimensions: builder.insertImage(byteArrayInputStream, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 3 - Floating shape with custom dimensions: builder.insertImage(byteArrayInputStream, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromStream.docx");
public Shape insertImage(java.io.InputStream stream, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
stream
- The stream that contains the image.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to insert an image from a stream into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create reusable stream ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); IOUtils.copy(new FileInputStream(getImageDir() + "Logo.jpg"), byteArrayOutputStream); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); // Below are three ways of inserting an image from a stream. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(byteArrayInputStream); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 2 - Inline shape with custom dimensions: builder.insertImage(byteArrayInputStream, ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); byteArrayInputStream.reset(); // 3 - Floating shape with custom dimensions: builder.insertImage(byteArrayInputStream, RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromStream.docx");
public Shape insertImage(java.lang.String fileName) throws java.lang.Exception
This overload will automatically download the image before inserting into the document if you specify a remote URI.
You can change the image size, location, positioning method and other settings using the
fileName
- The file with the image. Can be any valid local or remote URI.Example:
Shows how to insert an image from the local file system into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Below are three ways of inserting an image from a local system filename. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(getImageDir() + "Logo.jpg"); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(getImageDir() + "Transparent background logo.png", ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(getImageDir() + "Windows MetaFile.wmf", RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromFilename.docx");
Example:
Shows how to insert a floating image in the middle of a page.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // By default, the image is inline Shape shape = builder.insertImage(getImageDir() + "Logo.jpg"); // Make the image float, put it behind text and center on the page shape.setWrapType(WrapType.NONE); shape.setBehindText(true); shape.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE); shape.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE); shape.setHorizontalAlignment(HorizontalAlignment.CENTER); shape.setVerticalAlignment(VerticalAlignment.CENTER); doc.save(getArtifactsDir() + "Image.CreateFloatingPageCenter.docx");
Example:
Shows how to inserts an image from a URL.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("Image from local file: "); builder.insertImage(getImageDir() + "Logo.jpg"); builder.writeln(); builder.write("Image from a URL: "); builder.insertImage(getAsposelogoUri().toURL().openStream()); builder.writeln(); doc.save(getArtifactsDir() + "Image.CreateFromUrl.docx");
public Shape insertImage(java.lang.String fileName, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
fileName
- The file that contains the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert an image from the local file system into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Below are three ways of inserting an image from a local system filename. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(getImageDir() + "Logo.jpg"); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(getImageDir() + "Transparent background logo.png", ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(getImageDir() + "Windows MetaFile.wmf", RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromFilename.docx");
public Shape insertImage(java.lang.String fileName, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
fileName
- The file that contains the image.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to insert an image from the local file system into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Below are three ways of inserting an image from a local system filename. // 1 - Inline shape with a default size based on the image's original dimensions: builder.insertImage(getImageDir() + "Logo.jpg"); builder.insertBreak(BreakType.PAGE_BREAK); // 2 - Inline shape with custom dimensions: builder.insertImage(getImageDir() + "Transparent background logo.png", ConvertUtil.pixelToPoint(250.0), ConvertUtil.pixelToPoint(144.0)); builder.insertBreak(BreakType.PAGE_BREAK); // 3 - Floating shape with custom dimensions: builder.insertImage(getImageDir() + "Windows MetaFile.wmf", RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 100.0, 200.0, 100.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilderImages.InsertImageFromFilename.docx");
Example:
Shows how to insert an image from the local file system into a document while preserving its dimensions.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // The InsertImage method creates a floating shape with the passed image in its image data. // We can specify the dimensions of the shape can be passing them to this method. Shape imageShape = builder.insertImage(getImageDir() + "Logo.jpg", RelativeHorizontalPosition.MARGIN, 0.0, RelativeVerticalPosition.MARGIN, 0.0, -1, -1, WrapType.SQUARE); // Passing negative values as the intended dimensions will automatically define // the shape's dimensions based on the dimensions of its image. Assert.assertEquals(300.0d, imageShape.getWidth()); Assert.assertEquals(300.0d, imageShape.getHeight()); doc.save(getArtifactsDir() + "DocumentBuilder.InsertImageOriginalSize.docx");
Example:
Shows how to insert an image.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // There are two ways of using a document builder to source an image and then insert it as a floating shape. // 1 - From a file in the local file system: builder.insertImage(getImageDir() + "Transparent background logo.png", RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 0.0, 200.0, 200.0, WrapType.SQUARE); // 2 - From a URL: builder.insertImage(getAsposelogoUri().toString(), RelativeHorizontalPosition.MARGIN, 100.0, RelativeVerticalPosition.MARGIN, 250.0, 200.0, 200.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilder.InsertFloatingImage.docx");
public void insertNode(Node node)
Example:
Shows how to insert a linked image into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); String imageFileName = getImageDir() + "Windows MetaFile.wmf"; builder.write("Image linked, not stored in the document: "); Shape shape = new Shape(builder.getDocument(), ShapeType.IMAGE); shape.setWrapType(WrapType.INLINE); shape.getImageData().setSourceFullName(imageFileName); builder.insertNode(shape); builder.writeln(); builder.write("Image linked and stored in the document: "); shape = new Shape(builder.getDocument(), ShapeType.IMAGE); shape.setWrapType(WrapType.INLINE); shape.getImageData().setSourceFullName(imageFileName); shape.getImageData().setImage(imageFileName); builder.insertNode(shape); builder.writeln(); builder.write("Image stored in the document, but not linked: "); shape = new Shape(builder.getDocument(), ShapeType.IMAGE); shape.setWrapType(WrapType.INLINE); shape.getImageData().setImage(imageFileName); builder.insertNode(shape); builder.writeln(); doc.save(getArtifactsDir() + "Image.CreateLinkedImage.docx");
public Shape insertOleObjectAsIcon(java.lang.String fileName, boolean isLinked, java.lang.String iconFile, java.lang.String iconCaption) throws java.lang.Exception
fileName
- Full path to the file.isLinked
-
If true then linked OLE object is inserted otherwise embedded OLE object is inserted.
iconFile
-
Full path to the ICO file. If the value is null, Aspose.Words will use a predefined image.
iconCaption
- Icon caption.Example:
Shows how to insert an OLE object into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // OLE objects are links to files in our local file system that can be opened by other installed applications. // Double clicking these shapes will launch the application, and then use it to open the linked object. // There are three ways of using the InsertOleObject method to insert these shapes and configure their appearance. // 1 - Image taken from the local file system: builder.insertOleObject(getMyDir() + "Spreadsheet.xlsx", false, false, new FileInputStream(getImageDir() + "Logo.jpg")); // 2 - Icon based on the application that will open the object: builder.insertOleObject(getMyDir() + "Spreadsheet.xlsx", "Excel.Sheet", false, true, new FileInputStream(getImageDir() + "Logo.jpg")); // 3 - Image icon that's 32 x 32 pixels or smaller from the local file system, with a custom caption: builder.insertOleObjectAsIcon(getMyDir() + "Presentation.pptx", false, getImageDir() + "Logo icon.ico", "Double click to view presentation!"); doc.save(getArtifactsDir() + "DocumentBuilder.InsertOleObject.docx");
public Shape insertOleObjectAsIcon(java.lang.String fileName, java.lang.String progId, boolean isLinked, java.lang.String iconFile, java.lang.String iconCaption) throws java.lang.Exception
fileName
- Full path to the file.progId
- ProgId of OLE object.isLinked
-
If true then linked OLE object is inserted otherwise embedded OLE object is inserted.
iconFile
-
Full path to the ICO file. If the value is null, Aspose.Words will use a predefined image.
iconCaption
- Icon caption.public Shape insertOnlineVideo(java.lang.String videoUrl, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Insertion of online video from the following resources is supported:
If your online video is not displaying correctly, use
The code for embedding video can vary between providers, consult your corresponding provider of choice for details.
videoUrl
- The URL to the video.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.Example:
Shows how to insert an online video into a document using a URL.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertOnlineVideo("https://youtu.be/t_1LYZ102RA", 360.0, 270.0); // We can watch the video from Microsoft Word by clicking on the shape. doc.save(getArtifactsDir() + "DocumentBuilder.InsertVideoWithUrl.docx");
public Shape insertOnlineVideo(java.lang.String videoUrl, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Insertion of online video from the following resources is supported:
If your online video is not displaying correctly, use
The code for embedding video can vary between providers, consult your corresponding provider of choice for details.
videoUrl
- The URL to the video.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A Example:
Shows how to insert an online video into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); String videoUrl = "https://vimeo.com/52477838"; // Insert a shape that plays a video from the web when clicked in Microsoft Word. // This rectangular shape will contain an image based on the first frame of the linked video // and a "play button" visual prompt. The video has an aspect ratio of 16:9, // so we will set the shape's size to that ratio, so the image does not appear stretched. builder.insertOnlineVideo(videoUrl, RelativeHorizontalPosition.LEFT_MARGIN, 0.0, RelativeVerticalPosition.TOP_MARGIN, 0.0, 320.0, 180.0, WrapType.SQUARE); doc.save(getArtifactsDir() + "DocumentBuilder.InsertOnlineVideo.docx");
public Shape insertOnlineVideo(java.lang.String videoUrl, java.lang.String videoEmbedCode, byte[] thumbnailImageBytes, double width, double height) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
videoUrl
- The URL to the video.videoEmbedCode
- The embed code for the video.thumbnailImageBytes
- The thumbnail image bytes.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.public Shape insertOnlineVideo(java.lang.String videoUrl, java.lang.String videoEmbedCode, byte[] thumbnailImageBytes, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
videoUrl
- The URL to the video.videoEmbedCode
- The embed code for the video.thumbnailImageBytes
- The thumbnail image bytes.horzPos
- A left
- Distance in points from the origin to the left side of the image.vertPos
- A top
- Distance in points from the origin to the top side of the image.width
- The width of the image in points. Can be a negative or zero value to request 100% scale.height
- The height of the image in points. Can be a negative or zero value to request 100% scale.wrapType
- A public Paragraph insertParagraph()
Current paragraph formatting specified by the
Breaks the current paragraph in two. After inserting the paragraph, the cursor is placed at the beginning of the new paragraph.
public Shape insertShape(int shapeType, double width, double height) throws java.lang.Exception
shapeType
- A width
- The width of the shape in points.height
- The height of the shape in points.Example:
Shows how to insert DML shapes into the document using a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // There are two ways of shape insertion // These methods allow inserting DML shape into the document model // Document must be saved in the format, which supports DML shapes, otherwise, such nodes will be converted // to VML shape, while document saving // 1. Free-floating shape insertion Shape freeFloatingShape = builder.insertShape(ShapeType.TEXT_BOX, RelativeHorizontalPosition.PAGE, 100.0, RelativeVerticalPosition.PAGE, 100.0, 50.0, 50.0, WrapType.NONE); freeFloatingShape.setRotation(30.0); // 2. Inline shape insertion Shape inlineShape = builder.insertShape(ShapeType.TEXT_BOX, 50.0, 50.0); inlineShape.setRotation(30.0); // If you need to create "NonPrimitive" shapes, like SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, // TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded, DiagonalCornersRounded // please save the document with "Strict" or "Transitional" compliance which allows saving shape as DML OoxmlSaveOptions saveOptions = new OoxmlSaveOptions(SaveFormat.DOCX); saveOptions.setCompliance(OoxmlCompliance.ISO_29500_2008_TRANSITIONAL); doc.save(getArtifactsDir() + "Shape.ShapeInsertion.docx", saveOptions);
public Shape insertShape(int shapeType, int horzPos, double left, int vertPos, double top, double width, double height, int wrapType) throws java.lang.Exception
shapeType
- A horzPos
- A left
- Distance in points from the origin to the left side of the shape.vertPos
- A top
- Distance in points from the origin to the top side of the shape.width
- The width of the shape in points.height
- The width of the shape in points.wrapType
- A Example:
Shows how to insert DML shapes into the document using a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // There are two ways of shape insertion // These methods allow inserting DML shape into the document model // Document must be saved in the format, which supports DML shapes, otherwise, such nodes will be converted // to VML shape, while document saving // 1. Free-floating shape insertion Shape freeFloatingShape = builder.insertShape(ShapeType.TEXT_BOX, RelativeHorizontalPosition.PAGE, 100.0, RelativeVerticalPosition.PAGE, 100.0, 50.0, 50.0, WrapType.NONE); freeFloatingShape.setRotation(30.0); // 2. Inline shape insertion Shape inlineShape = builder.insertShape(ShapeType.TEXT_BOX, 50.0, 50.0); inlineShape.setRotation(30.0); // If you need to create "NonPrimitive" shapes, like SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnipped, // TopCornersOneRoundedOneSnipped, SingleCornerRounded, TopCornersRounded, DiagonalCornersRounded // please save the document with "Strict" or "Transitional" compliance which allows saving shape as DML OoxmlSaveOptions saveOptions = new OoxmlSaveOptions(SaveFormat.DOCX); saveOptions.setCompliance(OoxmlCompliance.ISO_29500_2008_TRANSITIONAL); doc.save(getArtifactsDir() + "Shape.ShapeInsertion.docx", saveOptions);
public Shape insertSignatureLine(SignatureLineOptions signatureLineOptions) throws java.lang.Exception
signatureLineOptions
- The object that stores parameters of creating signature line.Example:
Shows how to sign a document with a personal certificate and a signature line.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); SignatureLineOptions signatureLineOptions = new SignatureLineOptions(); signatureLineOptions.setSigner("vderyushev"); signatureLineOptions.setSignerTitle("QA"); signatureLineOptions.setEmail("vderyushev@aspose.com"); signatureLineOptions.setShowDate(true); signatureLineOptions.setDefaultInstructions(false); signatureLineOptions.setInstructions("Please sign here."); signatureLineOptions.setAllowComments(true); SignatureLine signatureLine = builder.insertSignatureLine(signatureLineOptions).getSignatureLine(); signatureLine.setProviderId(UUID.fromString("CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2")); doc.save(getArtifactsDir() + "DocumentBuilder.SignatureLineProviderId.docx"); Date currentDate = new Date(); SignOptions signOptions = new SignOptions(); signOptions.setSignatureLineId(signatureLine.getId()); signOptions.setProviderId(signatureLine.getProviderId()); signOptions.setComments("Document was signed by vderyushev"); signOptions.setSignTime(currentDate); CertificateHolder certHolder = CertificateHolder.create(getMyDir() + "morzal.pfx", "aw"); DigitalSignatureUtil.sign(getArtifactsDir() + "DocumentBuilder.SignatureLineProviderId.docx", getArtifactsDir() + "DocumentBuilder.SignatureLineProviderId.Signed.docx", certHolder, signOptions);
public Shape insertSignatureLine(SignatureLineOptions signatureLineOptions, int horzPos, double left, int vertPos, double top, int wrapType) throws java.lang.Exception
You can change the image size, location, positioning method and other settings using the
Aspose.Words will insert the image in the PNG format and with default settings. If you want to insert a BufferedImage in
another format or with other settings, you need to save the image into a byte array and use
signatureLineOptions
- The object that stores parameters of creating signature line.horzPos
- A left
- Distance in points from the origin to the left side of the signature line.vertPos
- A top
- Distance in points from the origin to the top side of the signature line.wrapType
- A Example:
Shows how to insert an inline signature line into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); SignatureLineOptions options = new SignatureLineOptions(); options.setSigner("John Doe"); options.setSignerTitle("Manager"); options.setEmail("johndoe@aspose.com"); options.setShowDate(true); options.setDefaultInstructions(false); options.setInstructions("Please sign here."); options.setAllowComments(true); builder.insertSignatureLine(options, RelativeHorizontalPosition.RIGHT_MARGIN, 2.0, RelativeVerticalPosition.PAGE, 3.0, WrapType.INLINE); // The signature line can be signed in Microsoft Word by double clicking it. doc.save(getArtifactsDir() + "DocumentBuilder.SignatureLineInline.docx");
public void insertStyleSeparator()
Example:
Shows how to work with style separators.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Each paragraph can only have one style. // The InsertStyleSeparator method allows us to work around this limitation. builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.write("This text is in a Heading style. "); builder.insertStyleSeparator(); Style paraStyle = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "MyParaStyle"); paraStyle.getFont().setBold(false); paraStyle.getFont().setSize(8.0); paraStyle.getFont().setName("Arial"); builder.getParagraphFormat().setStyleName(paraStyle.getName()); builder.write("This text is in a custom style. "); // Calling the InsertStyleSeparator method actually creates another paragraph, // which can have a different style to the previous. There will be no break between paragraphs, // so our text in the output document will look like one paragraph with two styles. Assert.assertEquals(2, doc.getFirstSection().getBody().getParagraphs().getCount()); Assert.assertEquals("Heading 1", doc.getFirstSection().getBody().getParagraphs().get(0).getParagraphFormat().getStyle().getName()); Assert.assertEquals("MyParaStyle", doc.getFirstSection().getBody().getParagraphs().get(1).getParagraphFormat().getStyle().getName()); doc.save(getArtifactsDir() + "DocumentBuilder.InsertStyleSeparator.docx");
public Field insertTableOfContents(java.lang.String switches)
This method inserts a TOC (table of contents) field into the document at the current position.
A table of contents in a Word document can be built in a number of ways and formatted using a variety of options. The way the table is built and displayed by Microsoft Word is controlled by the field switches.
The easiest way to specify the switches is to insert and configure a table of contents into a Word document using the Insert->Reference->Index and Tables menu, then switch display of field codes on to see the switches. You can press Alt+F9 in Microsoft Word to toggle display of field codes on or off.
For example, after creating a table of contents, the following field is inserted into the document: { TOC \o "1-3" \h \z \u }. You can copy \o "1-3" \h \z \u and use it as the switches parameter.
Note that InsertTableOfContents will only insert a TOC field, but will not actually build the table of contents. The table of contents is built by Microsoft Word when the field is updated.
If you insert a table of contents using this method and then open the file in Microsoft Word, you will not see the table of contents because the TOC field has not yet been updated.
In Microsoft Word, fields are not automatically updated when a document is opened, but you can update fields in a document at any time by pressing F9.
switches
- The TOC field switches.Example:
Shows how to insert a Table of contents (TOC) into a document using heading styles as entries.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a table of contents for the first page of the document. // Configure the table to pick up paragraphs with headings of levels 1 to 3. // Also, set its entries to be hyperlinks that will take us // to the location of the heading when left-clicked in Microsoft Word. builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); builder.insertBreak(BreakType.PAGE_BREAK); // Populate the table of contents by adding paragraphs with heading styles. // Each such heading will create an entry in the table, as long as its heading level is between 1 and 3. builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 1.1"); builder.writeln("Heading 1.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); builder.writeln("Heading 2"); builder.writeln("Heading 3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.1"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3); builder.writeln("Heading 3.1.1"); builder.writeln("Heading 3.1.2"); builder.writeln("Heading 3.1.3"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_4); builder.writeln("Heading 3.1.3.1"); builder.writeln("Heading 3.1.3.2"); builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); builder.writeln("Heading 3.2"); builder.writeln("Heading 3.3"); // A table of contents is a field of a type that needs to be updated to show an up-to-date result. doc.updateFields(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertToc.docx");
public FormField insertTextInput(java.lang.String name, int type, java.lang.String format, java.lang.String fieldValue, int maxLength) throws java.lang.Exception
If you specify a name for the form field, then a bookmark is automatically created with the same name.
name
- The name of the form field. Can be an empty string.type
- A format
- Format string used to format the value of the form field.fieldValue
- Text that will be shown in the field.maxLength
- Maximum length the user can enter into the form field. Set to zero for unlimited length.Example:
Shows how to create form fields.DocumentBuilder builder = new DocumentBuilder(); // Form fields are objects in the document that the user can interact with by being prompted to enter values. // We can create them using a document builder, and below are two ways of doing so. // 1 - Basic text input: builder.insertTextInput("My text input", TextFormFieldType.REGULAR, "", "Enter your name here", 30); // 2 - Combo box with prompt text, and a range of possible values: String[] items = { "-- Select your favorite footwear --", "Sneakers", "Oxfords", "Flip-flops", "Other" }; builder.insertParagraph(); builder.insertComboBox("My combo box", items, 0); builder.getDocument().save(getArtifactsDir() + "DocumentBuilder.CreateForm.docx");
Example:
Shows how to insert form fields, set options and gather them back in for use.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a text input field. The unique name of this field is "TextInput1", the other parameters define // what type of FormField it is, the format of the text, the field result and the maximum text length (0 = no limit) builder.insertTextInput("TextInput1", TextFormFieldType.REGULAR, "", "", 0);
Example:
Shows how to insert a text input form field into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a form that prompts the user to enter text. builder.insertTextInput("TextInput", TextFormFieldType.REGULAR, "", "Enter your text here", 0); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTextInput.docx");
public void moveTo(Node node)
When node is an inline-level node, the cursor is moved to this node and further content will be inserted before that node.
When node is a Paragraph, the cursor is moved to the end of the paragraph and further content will be inserted just before the paragraph break.
When node is a block-level node but not a Paragraph, the cursor is moved to the end of the first paragraph into block-level node and further content will be inserted just before the paragraph break.
node
- The node must be a paragraph or a direct child of a paragraph.Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
Example:
Shows how to move a DocumentBuilder's cursor position to a specified node.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Run 1. "); // The document builder has a cursor, which acts as the part of the document // where the builder appends new nodes when we use its document construction methods. // This cursor functions in the same way as Microsoft Word's blinking cursor, // and it also always ends up immediately after any node that the builder just inserted. // To append content to a different part of the document, // we can move the cursor to a different node with the MoveTo method. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getRuns().get(0)); // The cursor is now in front of the node that we moved it to. // Adding a second run will insert it in front of the first run. builder.writeln("Run 2. "); Assert.assertEquals("Run 2. \rRun 1.", doc.getText().trim()); // Move the cursor to the end of the document to continue appending text to the end as before. builder.moveTo(doc.getLastSection().getBody().getLastParagraph()); builder.writeln("Run 3. "); Assert.assertEquals("Run 2. \rRun 1. \rRun 3.", doc.getText().trim());
public boolean moveToBookmark(java.lang.String bookmarkName) throws java.lang.Exception
Moves the cursor to a position just after the start of the bookmark with the specified name.
The comparison is not case-sensitive. If the bookmark was not found, false is returned and the cursor is not moved.
Inserting new text does not replace existing text of the bookmark.
Note that some bookmarks in the document are assigned to form fields. Moving to such a bookmark and inserting text there inserts the text into the form field code. Although this will not invalidate the form field, the inserted text will not be visible because it becomes part of the field code.
bookmarkName
- The name of the bookmark to move the cursor to.Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public boolean moveToBookmark(java.lang.String bookmarkName, boolean isStart, boolean isAfter) throws java.lang.Exception
Moves the cursor to a position before or after the bookmark start or end.
If desired position is not at inline level, moves to the next paragraph.
The comparison is not case-sensitive. If the bookmark was not found, false is returned and the cursor is not moved.
bookmarkName
- The name of the bookmark to move the cursor to.isStart
- When true, moves the cursor to the beginning of the bookmark.
When false, moves the cursor to the end of the bookmark.isAfter
- When true, moves the cursor to be after the bookmark
start or end position. When false, moves the cursor to be before the bookmark
start or end position.Example:
Shows how to move a document builder's node insertion point cursor to a bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // A valid bookmark consists of a BookmarkStart node, a BookmarkEnd node with a // matching bookmark name somewhere afterward, and contents enclosed by those nodes. builder.startBookmark("MyBookmark"); builder.write("Hello world! "); builder.endBookmark("MyBookmark"); // There are 4 ways of moving a document builder's cursor to a bookmark. // If we are between the BookmarkStart and BookmarkEnd nodes, the cursor will be inside the bookmark. // This means that any text added by the builder will become a part of the bookmark. // 1 - Outside of the bookmark, in front of the BookmarkStart node: Assert.assertTrue(builder.moveToBookmark("MyBookmark", true, false)); builder.write("1. "); Assert.assertEquals("Hello world! ", doc.getRange().getBookmarks().get("MyBookmark").getText()); Assert.assertEquals("1. Hello world!", doc.getText().trim()); // 2 - Inside the bookmark, right after the BookmarkStart node: Assert.assertTrue(builder.moveToBookmark("MyBookmark", true, true)); builder.write("2. "); Assert.assertEquals("2. Hello world! ", doc.getRange().getBookmarks().get("MyBookmark").getText()); Assert.assertEquals("1. 2. Hello world!", doc.getText().trim()); // 2 - Inside the bookmark, right in front of the BookmarkEnd node: Assert.assertTrue(builder.moveToBookmark("MyBookmark", false, false)); builder.write("3. "); Assert.assertEquals("2. Hello world! 3. ", doc.getRange().getBookmarks().get("MyBookmark").getText()); Assert.assertEquals("1. 2. Hello world! 3.", doc.getText().trim()); // 4 - Outside of the bookmark, after the BookmarkEnd node: Assert.assertTrue(builder.moveToBookmark("MyBookmark", false, true)); builder.write("4."); Assert.assertEquals("2. Hello world! 3. ", doc.getRange().getBookmarks().get("MyBookmark").getText()); Assert.assertEquals("1. 2. Hello world! 3. 4.", doc.getText().trim());
public void moveToCell(int tableIndex, int rowIndex, int columnIndex, int characterIndex)
The navigation is performed inside the current story of the current section.
For the index parameters, when index is greater than or equal to 0, it specifies an index from the beginning with 0 being the first element. When index is less than 0, it specified an index from the end with -1 being the last element.
tableIndex
- The index of the table to move to.rowIndex
- The index of the row in the table.columnIndex
- The index of the column in the table.characterIndex
- The index of the character inside the cell.
Currently can only specify 0 to move to the beginning of the cell or -1 to
move to the end of the cell.Example:
Shows how to move a document builder's cursor to a cell in a table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create an empty 2x2 table. builder.startTable(); builder.insertCell(); builder.insertCell(); builder.endRow(); builder.insertCell(); builder.insertCell(); builder.endTable(); // Because we have ended the table with the EndTable method, // the document builder's cursor is currently outside the table. // This cursor has the same function as Microsoft Word's blinking text cursor. // It can also be moved to a different location in the document using the builder's MoveTo methods. // We can move the cursor back inside the table to a specific cell. builder.moveToCell(0, 1, 1, 0); builder.write("Column 2, cell 2."); doc.save(getArtifactsDir() + "DocumentBuilder.MoveToCell.docx");
public void moveToDocumentEnd()
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public void moveToDocumentStart()
Example:
Shows how to move a document builder's cursor to different nodes in a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Create a valid bookmark, an entity that consists of nodes enclosed by a bookmark start node, // and a bookmark end node. builder.startBookmark("MyBookmark"); builder.write("Bookmark contents."); builder.endBookmark("MyBookmark"); NodeCollection firstParagraphNodes = doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(); Assert.assertEquals(NodeType.BOOKMARK_START, firstParagraphNodes.get(0).getNodeType()); Assert.assertEquals(NodeType.RUN, firstParagraphNodes.get(1).getNodeType()); Assert.assertEquals("Bookmark contents.", firstParagraphNodes.get(1).getText().trim()); Assert.assertEquals(NodeType.BOOKMARK_END, firstParagraphNodes.get(2).getNodeType()); // The document builder's cursor is always ahead of the node that we last added with it. // If the builder's cursor is at the end of the document, its current node will be null. // The previous node is the bookmark end node that we last added. // Adding new nodes with the builder will append them to the last node. Assert.assertNull(builder.getCurrentNode()); // If we wish to edit a different part of the document with the builder, // we will need to bring its cursor to the node we wish to edit. builder.moveToBookmark("MyBookmark"); // Moving it to a bookmark will move it to the first node within the bookmark start and end nodes, the enclosed run. Assert.assertEquals(firstParagraphNodes.get(1), builder.getCurrentNode()); // We can also move the cursor to an individual node like this. builder.moveTo(doc.getFirstSection().getBody().getFirstParagraph().getChildNodes(NodeType.ANY, false).get(0)); Assert.assertEquals(NodeType.BOOKMARK_START, builder.getCurrentNode().getNodeType()); Assert.assertEquals(doc.getFirstSection().getBody().getFirstParagraph(), builder.getCurrentParagraph()); Assert.assertTrue(builder.isAtStartOfParagraph()); // We can use specific methods to move to the start/end of a document. builder.moveToDocumentEnd(); Assert.assertTrue(builder.isAtEndOfParagraph()); builder.moveToDocumentStart(); Assert.assertTrue(builder.isAtStartOfParagraph());
public void moveToField(Field field, boolean isAfter) throws java.lang.Exception
field
- The field to move the cursor to.isAfter
- When true, moves the cursor to be after the field end.
When false, moves the cursor to be before the field start. Example:
Shows how to move a document builder's node insertion point cursor to a specific field.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert a field using the DocumentBuilder, and add a run of text after it. Field field = builder.insertField(" AUTHOR \"John Doe\" "); // The builder's cursor is currently at end of the document. Assert.assertNull(builder.getCurrentNode()); // Move the cursor to the field while specifying whether to place that cursor before or after the field. builder.moveToField(field, moveCursorToAfterTheField); // Note that the cursor is outside of the field in both cases. // This means that we cannot edit the field using the builder like this. // To edit a field, we can use the builder's MoveTo method on a field's FieldStart // or FieldSeparator node to place the cursor inside. if (moveCursorToAfterTheField) { Assert.assertNull(builder.getCurrentNode()); builder.write(" Text immediately after the field."); Assert.assertEquals("AUTHOR \"John Doe\" \u0014John Doe\u0015 Text immediately after the field.", doc.getText().trim()); } else { Assert.assertEquals(field.getStart(), builder.getCurrentNode()); builder.write("Text immediately before the field. "); Assert.assertEquals("Text immediately before the field. \u0013 AUTHOR \"John Doe\" \u0014John Doe", doc.getText().trim()); }
public void moveToHeaderFooter(int headerFooterType)
After you moved the cursor into a header or footer, you can use the rest of DocumentBuilder methods to modify the contents of the header or footer.
If you want to create headers and footers different for the first page, you need
to set
If you want to create headers and footers different for even and odd pages, you need
to set
Use
headerFooterType
- A Example:
Shows how to create headers and footers in a document using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify that we want different headers and footers for first, even and odd pages. builder.getPageSetup().setDifferentFirstPageHeaderFooter(true); builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true); // Create the headers, then add three pages to the document to display each header type. builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); builder.write("Header for the first page"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN); builder.write("Header for even pages"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Header for all other pages"); builder.moveToSection(0); builder.writeln("Page1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page3"); doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
Example:
Shows how to insert an image, and use it as a watermark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert the image into the header so that it will be visible on every page. BufferedImage image = ImageIO.read(new File(getImageDir() + "Transparent background logo.png")); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); Shape shape = builder.insertImage(image); shape.setWrapType(WrapType.NONE); shape.setBehindText(true); // Place the image at the center of the page. shape.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE); shape.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE); shape.setLeft((builder.getPageSetup().getPageWidth() - shape.getWidth()) / 2.0); shape.setTop((builder.getPageSetup().getPageHeight() - shape.getHeight()) / 2.0); doc.save(getArtifactsDir() + "DocumentBuilder.InsertWatermark.docx");
public boolean moveToMergeField(java.lang.String fieldName) throws java.lang.Exception
Note that this method deletes the merge field from the document after moving the cursor.
fieldName
- The case-insensitive name of the mail merge field.Example:
Shows how to insert checkbox form fields into a document during mail merge.public void insertCheckBox() throws Exception { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); builder.insertCell(); builder.insertField(" MERGEFIELD TableStart:StudentCourse "); builder.insertCell(); builder.insertField(" MERGEFIELD CourseName "); builder.insertCell(); builder.insertField(" MERGEFIELD TableEnd:StudentCourse "); builder.endTable(); // Add a handler for the MergeField event doc.getMailMerge().setFieldMergingCallback(new HandleMergeFieldInsertCheckBox()); // Execute mail merge with regions DataTable dataTable = getStudentCourseDataTable(); doc.getMailMerge().executeWithRegions(dataTable); // Save resulting document with a new name doc.save(getArtifactsDir() + "MailMergeEvent.InsertCheckBox.docx"); } private class HandleMergeFieldInsertCheckBox implements IFieldMergingCallback { /** * This is called for each merge field in the document * when Document.MailMerge.ExecuteWithRegions is called. */ public void fieldMerging(final FieldMergingArgs args) throws Exception { if (args.getDocumentFieldName().equals("CourseName")) { // The name of the table that we are merging can be found here Assert.assertEquals(args.getTableName(), "StudentCourse"); // Insert the checkbox for this merge field, using DocumentBuilder DocumentBuilder builder = new DocumentBuilder(args.getDocument()); builder.moveToMergeField(args.getFieldName()); builder.insertCheckBox(args.getDocumentFieldName() + Integer.toString(mCheckBoxCount), false, 0); // Get the actual value of the field String fieldValue = args.getFieldValue().toString(); // In this case, for every record index 'n', the corresponding field value is "Course n" Assert.assertEquals(args.getRecordIndex(), Character.getNumericValue(fieldValue.charAt(7))); builder.write(fieldValue); mCheckBoxCount++; } } public void imageFieldMerging(final ImageFieldMergingArgs args) { // Do nothing } /** * Counter for CheckBox name generation. */ private int mCheckBoxCount; } /** * Create DataTable and fill it with data. * In real life this DataTable should be filled from a database. */ private static DataTable getStudentCourseDataTable() throws Exception { DataTable dataTable = new DataTable("StudentCourse"); dataTable.getColumns().add("CourseName"); for (int i = 0; i < 10; i++) { DataRow datarow = dataTable.newRow(); dataTable.getRows().add(datarow); datarow.set(0, "Course " + Integer.toString(i)); } return dataTable; }
Example:
Shows how to fill MERGEFIELDs with data with a document builder instead of a mail merge.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Insert some MERGEFIELDS, which accept data from columns of the same name in a data source during a mail merge, // and then fill them manually. builder.insertField(" MERGEFIELD Chairman "); builder.insertField(" MERGEFIELD ChiefFinancialOfficer "); builder.insertField(" MERGEFIELD ChiefTechnologyOfficer "); builder.moveToMergeField("Chairman"); builder.setBold(true); builder.writeln("John Doe"); builder.moveToMergeField("ChiefFinancialOfficer"); builder.setItalic(true); builder.writeln("Jane Doe"); builder.moveToMergeField("ChiefTechnologyOfficer"); builder.setItalic(true); builder.writeln("John Bloggs"); doc.save(getArtifactsDir() + "DocumentBuilder.FillMergeFields.docx");
public boolean moveToMergeField(java.lang.String fieldName, boolean isAfter, boolean isDeleteField) throws java.lang.Exception
fieldName
- The case-insensitive name of the mail merge field.isAfter
- When true, moves the cursor to be after the field end.
When false, moves the cursor to be before the field start. isDeleteField
- When true, deletes the merge field.Example:
Shows how to insert fields, and move the document builder's cursor to them.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertField("MERGEFIELD MyMergeField1 \\* MERGEFORMAT"); builder.insertField("MERGEFIELD MyMergeField2 \\* MERGEFORMAT"); // Move the cursor to the first MERGEFIELD. builder.moveToMergeField("MyMergeField1", true, false); // Note that the cursor is placed immediately after the first MERGEFIELD, and before the second. Assert.assertEquals(doc.getRange().getFields().get(1).getStart(), builder.getCurrentNode()); Assert.assertEquals(doc.getRange().getFields().get(0).getEnd(), builder.getCurrentNode().getPreviousSibling()); // If we wish to edit the field's field code or contents using the builder, // its cursor would need to be inside a field. // To place it inside a field, we would need to call the document builder's MoveTo method // and pass the field's start or separator node as an argument. builder.write(" Text between our merge fields. "); doc.save(getArtifactsDir() + "DocumentBuilder.MergeFields.docx");
public void moveToParagraph(int paragraphIndex, int characterIndex)
The navigation is performed inside the current story of the current section. That is, if you moved the cursor to the primary header of the first section, then paragraphIndex specified the index of the paragraph inside that header of that section.
When paragraphIndex is greater than or equal to 0, it specifies an index from the beginning of the section with 0 being the first paragraph. When paragraphIndex is less than 0, it specified an index from the end of the section with -1 being the last paragraph.
paragraphIndex
- The index of the paragraph to move to.characterIndex
- The index of the character inside the paragraph.
Currently can only specify 0 to move to the beginning of the paragraph or -1 to
move to the end of the paragraph.
Example:
Shows how to move a builder's cursor position to a specified paragraph.Document doc = new Document(getMyDir() + "Paragraphs.docx"); ParagraphCollection paragraphs = doc.getFirstSection().getBody().getParagraphs(); Assert.assertEquals(22, paragraphs.getCount()); // Create document builder to edit the document. The builder's cursor, // which is the point where it will insert new nodes when we call its document construction methods, // is currently at the beginning of the document. DocumentBuilder builder = new DocumentBuilder(doc); Assert.assertEquals(0, paragraphs.indexOf(builder.getCurrentParagraph())); // Move that cursor to a different paragraph will place that cursor in front of that paragraph. builder.moveToParagraph(2, 0); // Any new content that we add will be inserted at that point. builder.writeln("This is a new third paragraph. ");
public void moveToSection(int sectionIndex)
When sectionIndex is greater than or equal to 0, it specifies an index from the beginning of the document with 0 being the first section. When sectionIndex is less than 0, it specified an index from the end of the document with -1 being the last section.
The cursor is moved to the first paragraph in the Body of the specified section.
sectionIndex
- The index of the section to move to.Example:
Shows how to create headers and footers in a document using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify that we want different headers and footers for first, even and odd pages. builder.getPageSetup().setDifferentFirstPageHeaderFooter(true); builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true); // Create the headers, then add three pages to the document to display each header type. builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); builder.write("Header for the first page"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN); builder.write("Header for even pages"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Header for all other pages"); builder.moveToSection(0); builder.writeln("Page1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page3"); doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
public void popFont()
Example:
Shows how to use a document builder's formatting stack.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Set up font formatting, then write the text that goes before the hyperlink. builder.getFont().setName("Arial"); builder.getFont().setSize(24.0); builder.write("To visit Google, hold Ctrl and click "); // Preserve our current formatting configuration on the stack. builder.pushFont(); // Alter the builder's current formatting by applying a new style. builder.getFont().setStyleIdentifier(StyleIdentifier.HYPERLINK); builder.insertHyperlink("here", "http://www.google.com", false); Assert.assertEquals(Color.BLUE.getRGB(), builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.SINGLE, builder.getFont().getUnderline()); // Restore the font formatting that we saved earlier, and remove the element from the stack. builder.popFont(); Assert.assertEquals(0, builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.NONE, builder.getFont().getUnderline()); builder.write(". We hope you enjoyed the example."); doc.save(getArtifactsDir() + "DocumentBuilder.PushPopFont.docx");
public void pushFont()
Example:
Shows how to use a document builder's formatting stack.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Set up font formatting, then write the text that goes before the hyperlink. builder.getFont().setName("Arial"); builder.getFont().setSize(24.0); builder.write("To visit Google, hold Ctrl and click "); // Preserve our current formatting configuration on the stack. builder.pushFont(); // Alter the builder's current formatting by applying a new style. builder.getFont().setStyleIdentifier(StyleIdentifier.HYPERLINK); builder.insertHyperlink("here", "http://www.google.com", false); Assert.assertEquals(Color.BLUE.getRGB(), builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.SINGLE, builder.getFont().getUnderline()); // Restore the font formatting that we saved earlier, and remove the element from the stack. builder.popFont(); Assert.assertEquals(0, builder.getFont().getColor().getRGB()); Assert.assertEquals(Underline.NONE, builder.getFont().getUnderline()); builder.write(". We hope you enjoyed the example."); doc.save(getArtifactsDir() + "DocumentBuilder.PushPopFont.docx");
public BookmarkStart startBookmark(java.lang.String bookmarkName)
Bookmarks in a document can overlap and span any range. To create a valid bookmark you need to
call both
Badly formed bookmarks or bookmarks with duplicate names will be ignored when the document is saved.
bookmarkName
- Name of the bookmark.Example:
Shows how to insert a hyperlink which references a local bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startBookmark("Bookmark1"); builder.write("Bookmarked text. "); builder.endBookmark("Bookmark1"); builder.writeln("Text outside of the bookmark."); // Insert a HYPERLINK field that links to the bookmark. We can pass field switches // to the InsertHyperlink method as part of the argument containing the referenced bookmark's name. builder.getFont().setColor(Color.BLUE); builder.getFont().setUnderline(Underline.SINGLE); builder.insertHyperlink("Link to Bookmark1", "Bookmark1\" \\o \"Hyperlink Tip", true); doc.save(getArtifactsDir() + "DocumentBuilder.InsertHyperlinkToLocalBookmark.docx");
Example:
Shows how create a bookmark.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // A valid bookmark needs to have document body text enclosed by // BookmarkStart and BookmarkEnd nodes created with a matching bookmark name. builder.startBookmark("MyBookmark"); builder.writeln("Hello world!"); builder.endBookmark("MyBookmark"); Assert.assertEquals(1, doc.getRange().getBookmarks().getCount()); Assert.assertEquals("MyBookmark", doc.getRange().getBookmarks().get(0).getName()); Assert.assertEquals("Hello world!", doc.getRange().getBookmarks().get(0).getText().trim());
public EditableRangeStart startEditableRange()
Editable range in a document can overlap and span any range. To create a valid editable range you need to
call both
Badly formed editable range will be ignored when the document is saved.
Example:
Shows how to work with an editable range.Document doc = new Document(); doc.protect(ProtectionType.READ_ONLY, "MyPassword"); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello world! Since we have set the document's protection level to read-only," + " we cannot edit this paragraph without the password."); // Editable ranges allow us to leave parts of protected documents open for editing. EditableRangeStart editableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph is inside an editable range, and can be edited."); EditableRangeEnd editableRangeEnd = builder.endEditableRange(); // A well-formed editable range has a start node, and end node. // These nodes have matching IDs and encompass editable nodes. EditableRange editableRange = editableRangeStart.getEditableRange(); Assert.assertEquals(editableRangeStart.getId(), editableRange.getId()); Assert.assertEquals(editableRangeEnd.getId(), editableRange.getId()); // Different parts of the editable range link to each other. Assert.assertEquals(editableRangeStart.getId(), editableRange.getEditableRangeStart().getId()); Assert.assertEquals(editableRangeStart.getId(), editableRangeEnd.getEditableRangeStart().getId()); Assert.assertEquals(editableRange.getId(), editableRangeStart.getEditableRange().getId()); Assert.assertEquals(editableRangeEnd.getId(), editableRange.getEditableRangeEnd().getId()); // We can access the node types of each part like this. The editable range itself is not a node, // but an entity which consists of a start, an end, and their enclosed contents. Assert.assertEquals(NodeType.EDITABLE_RANGE_START, editableRangeStart.getNodeType()); Assert.assertEquals(NodeType.EDITABLE_RANGE_END, editableRangeEnd.getNodeType()); builder.writeln("This paragraph is outside the editable range, and cannot be edited."); doc.save(getArtifactsDir() + "EditableRange.CreateAndRemove.docx"); // Remove an editable range. All the nodes that were inside the range will remain intact. editableRange.remove();
Example:
Shows how to create nested editable ranges.Document doc = new Document(); doc.protect(ProtectionType.READ_ONLY, "MyPassword"); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello world! Since we have set the document's protection level to read-only, " + "we cannot edit this paragraph without the password."); // Create two nested editable ranges. EditableRangeStart outerEditableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph inside the outer editable range and can be edited."); EditableRangeStart innerEditableRangeStart = builder.startEditableRange(); builder.writeln("This paragraph inside both the outer and inner editable ranges and can be edited."); // Currently, the document builder's node insertion cursor is in more than one ongoing editable range. // When we want to end an editable range in this situation, // we need to specify which of the ranges we wish to end by passing its EditableRangeStart node. builder.endEditableRange(innerEditableRangeStart); builder.writeln("This paragraph inside the outer editable range and can be edited."); builder.endEditableRange(outerEditableRangeStart); builder.writeln("This paragraph is outside any editable ranges, and cannot be edited."); // If a region of text has two overlapping editable ranges with specified groups, // the combined group of users excluded by both groups are prevented from editing it. outerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.EVERYONE); innerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.CONTRIBUTORS); doc.save(getArtifactsDir() + "EditableRange.Nested.docx");
public Table startTable()
The next method to call is
This method starts a nested table when called inside a cell.
Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
Example:
Shows how to format cells with a document builder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.write("Row 1, cell 1."); // Insert a second cell, and then configure cell text padding options. // The builder will apply these settings at its current cell, and any new cells creates afterwards. builder.insertCell(); CellFormat cellFormat = builder.getCellFormat(); cellFormat.setWidth(250.0); cellFormat.setLeftPadding(30.0); cellFormat.setRightPadding(30.0); cellFormat.setTopPadding(30.0); cellFormat.setBottomPadding(30.0); builder.write("Row 1, cell 2."); builder.endRow(); builder.endTable(); // The first cell was unaffected by the padding reconfiguration, and still holds the default values. Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getWidth()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getLeftPadding()); Assert.assertEquals(5.4d, table.getFirstRow().getCells().get(0).getCellFormat().getRightPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getTopPadding()); Assert.assertEquals(0.0d, table.getFirstRow().getCells().get(0).getCellFormat().getBottomPadding()); Assert.assertEquals(250.0d, table.getFirstRow().getCells().get(1).getCellFormat().getWidth()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getLeftPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getRightPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getTopPadding()); Assert.assertEquals(30.0d, table.getFirstRow().getCells().get(1).getCellFormat().getBottomPadding()); // The first cell will still grow in the output document to match the size of its neighboring cell. doc.save(getArtifactsDir() + "DocumentBuilder.SetCellFormatting.docx");
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
public void write(java.lang.String text)
text
- The string to insert into the document.Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");
Example:
Shows how to build a table with custom borders.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); // Setting table formatting options for a document builder // will apply them to every row and cell that we add with it. builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getCellFormat().clearFormatting(); builder.getCellFormat().setWidth(150.0); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.getCellFormat().getShading().setBackgroundPatternColor(Color.GREEN); builder.getCellFormat().setWrapText(false); builder.getCellFormat().setFitText(true); builder.getRowFormat().clearFormatting(); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getRowFormat().setHeight(50.0); builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); builder.getRowFormat().getBorders().setColor(Color.ORANGE); builder.insertCell(); builder.write("Row 1, Col 1"); builder.insertCell(); builder.write("Row 1, Col 2"); builder.endRow(); // Changing the formatting will apply it to the current cell, // and any new cells that we create with the builder afterward. // This will not affect the cells that we have added previously. builder.getCellFormat().getShading().clearFormatting(); builder.insertCell(); builder.write("Row 2, Col 1"); builder.insertCell(); builder.write("Row 2, Col 2"); builder.endRow(); // Increase row height to fit the vertical text. builder.insertCell(); builder.getRowFormat().setHeight(150.0); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 3, Col 1"); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 3, Col 2"); builder.endRow(); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.InsertTable.docx");
Example:
Shows how to use a document builder to create a table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Start the table, then populate the first row with two cells. builder.startTable(); builder.insertCell(); builder.write("Row 1, Cell 1."); builder.insertCell(); builder.write("Row 1, Cell 2."); // Call the builder's EndRow method to start a new row. builder.endRow(); builder.insertCell(); builder.write("Row 2, Cell 1."); builder.insertCell(); builder.write("Row 2, Cell 2."); builder.endTable(); doc.save(getArtifactsDir() + "DocumentBuilder.CreateTable.docx");
Example:
Shows how to insert a string surrounded by a border into a document.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.getFont().getBorder().setColor(Color.GREEN); builder.getFont().getBorder().setLineWidth(2.5); builder.getFont().getBorder().setLineStyle(LineStyle.DASH_DOT_STROKER); builder.write("Text surrounded by green border."); doc.save(getArtifactsDir() + "Border.FontBorder.docx");
public void writeln()
Calls
Example:
Shows how to create headers and footers in a document using DocumentBuilder.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Specify that we want different headers and footers for first, even and odd pages. builder.getPageSetup().setDifferentFirstPageHeaderFooter(true); builder.getPageSetup().setOddAndEvenPagesHeaderFooter(true); // Create the headers, then add three pages to the document to display each header type. builder.moveToHeaderFooter(HeaderFooterType.HEADER_FIRST); builder.write("Header for the first page"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_EVEN); builder.write("Header for even pages"); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY); builder.write("Header for all other pages"); builder.moveToSection(0); builder.writeln("Page1"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page2"); builder.insertBreak(BreakType.PAGE_BREAK); builder.writeln("Page3"); doc.save(getArtifactsDir() + "DocumentBuilder.HeadersAndFooters.docx");
public void writeln(java.lang.String text)
text
- The string to insert into the document.Example:
Shows how to build a formatted 2x2 table.Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); Table table = builder.startTable(); builder.insertCell(); builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); builder.write("Row 1, cell 1."); builder.insertCell(); builder.write("Row 1, cell 2."); builder.endRow(); // While building the table, the document builder will apply its current RowFormat/CellFormat attribute values // to the current row/cell that its cursor is in and any new rows/cells as it creates them. Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(0).getCellFormat().getVerticalAlignment()); Assert.assertEquals(CellVerticalAlignment.CENTER, table.getRows().get(0).getCells().get(1).getCellFormat().getVerticalAlignment()); builder.insertCell(); builder.getRowFormat().setHeight(100.0); builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); builder.getCellFormat().setOrientation(TextOrientation.UPWARD); builder.write("Row 2, cell 1."); builder.insertCell(); builder.getCellFormat().setOrientation(TextOrientation.DOWNWARD); builder.write("Row 2, cell 2."); builder.endRow(); builder.endTable(); // Previously added rows and cells are not retroactively affected by changes to the builder's formatting. Assert.assertEquals(0.0, table.getRows().get(0).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.AUTO, table.getRows().get(0).getRowFormat().getHeightRule()); Assert.assertEquals(100.0, table.getRows().get(1).getRowFormat().getHeight()); Assert.assertEquals(HeightRule.EXACTLY, table.getRows().get(1).getRowFormat().getHeightRule()); Assert.assertEquals(TextOrientation.UPWARD, table.getRows().get(1).getCells().get(0).getCellFormat().getOrientation()); Assert.assertEquals(TextOrientation.DOWNWARD, table.getRows().get(1).getCells().get(1).getCellFormat().getOrientation()); doc.save(getArtifactsDir() + "DocumentBuilder.BuildTable.docx");