https://blog.csdn.net/sinat_30276961/article/details/48291547
上一篇Aspose.words編程指南之DocumentBuilder一有講到Aspose.words生成文檔的一個核心幫助類:DocumentBuilder。介紹了它的作用,並重點講解了插入元素功能。本篇將延續上篇的內容,繼續講解DocumentBuilder。
插入元素
插入書籤
通過DocumentBuidler插入書籤,是一件很輕鬆的事。我們可以把它的過程分三步:
1.DocumentBuilder.StartBookmark
2.插入內容
3.DocumentBuilder.EndBookmark
書籤可以覆蓋,並且可以跨度很大。要創建一個書籤,你需要調用StartBookmark和EndBookmark,並且兩者設置的名稱一致。
// 下劃線不設置
font.setUnderline(Underline.NONE);
// 顏色更改
font.setColor(Color.GREEN);
font.setSize(12);
// inline image
builder.insertImage(bitmap,100,150);
// floating image
// builder.insertImage(bitmap,
// RelativeHorizontalPosition.MARGIN,
// 100,
// RelativeVerticalPosition.MARGIN,
// 100,
// 100,
// 150,
// WrapType.NONE);
// bookmark
builder.startBookmark("firstBookmark");
builder.writeln("My first bookmark");
builder.endBookmark("firstBookmark");
因爲先前一直沒有把下劃線給設掉,發現很難看,所以在插入圖片開始把它設置掉。這裏需要注意的是,設置格式屬性要在DocumentBuilder.moveToXXX方法調用之後調用,否則會失效。
下圖就是執行的效果:
我們再來看看它的DOM樹:
注意到沒,圖片、bookmarkStart和bookmark內容放在同一個paragraph,而bookmarkEnd放到了另一個paragraph。如果你有細緻的看過上一篇,那麼應該是知道的,原因就在於bookmark插入的內容是通過writeln。這個會附帶插入一個paragraph break,所以就直接結束了一個paragraph,然後另起一個新的paragraph。
如果改成builder.write(“My first bookmark”),DOM樹是這樣的:
而且它的顯示方式也變了:
產生這種變化的原因其實不難想到,區別就在於一個是writeln,一個是write。前者在字符串結尾馬上加上了’\n’,而後者沒有。也就是說,前者相當於直接回車了,而後者是Aspose.words給你加的,它在一段的末尾加上了’\n’,自然文字就被拉長了。
插入域
域有兩部分組成:field code和field result。field code就像是一個公式,而field result就像是一個值。
要插入一個域,通過調用DocumentBuilder.InsertField。如果你不清楚怎麼寫field code,你可以通過office word或者WPS插入一個域,然後 Alt+F9查看它的field code。
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertField("MERGEFIELD $MyFieldName \\* MERGEFORMAT");
插入form field
form field是一種特殊的域,它可以允許用戶與其進行交互。在office裏,form field包含文本框、聯合框和勾選框。需要注意的是,你指定了form field的名稱,就會自動生成相同名稱的bookmark。
針對這幾種框,DocumentBuilder提供了各自獨立的方法:DocumentBuilder.InsertTextInput, DocumentBuilder.InsertCheckBox和DocumentBuilder.InsertComboBox。
插入textinput
如下代碼是插入一個文本框的form field示例:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertCheckBox("CheckBox", true, 0);
插入checkbox
如下代碼是插入一個勾選框的form field示例:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
String[] items = {"One", "Two", "Three"};
builder.insertComboBox("DropDown", items, 0);
插入Combobox
如下代碼是插入一個聯合框的form field示例:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertHtml(
"<P align='right'>Paragraph right</P>" +
"<b>Implicit paragraph left</b>" +
"<div align='center'>Div center</div>" +
"<h1 align='left'>Heading 1 left.</h1>");
doc.save(getMyDir() + "DocumentBuilder.InsertHtml Out.doc");
如下圖,是這三個的展示效果:
它的DOM樹:
可以看到,的確同時生成了相同名稱的bookmark。
插入html
通過DocumentBuilder.InsertHtml,你可以很輕鬆的插入一段html字符串。
如下代碼所示:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertHtml(
"<P align='right'>Paragraph right</P>" +
"<b>Implicit paragraph left</b>" +
"<div align='center'>Div center</div>" +
"<h1 align='left'>Heading 1 left.</h1>");
doc.save(getMyDir() + "DocumentBuilder.InsertHtml Out.doc");
如下圖所示:
插入鏈接
通過DocumentBuilder.InsertHyperlink插入一個鏈接。它內部是調用DocumentBuilder.InsertField。
需要注意的是,你必須設置一下font,比方說下劃線。
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.write("Please make sure to visit ");
// Specify font formatting for the hyperlink.
builder.getFont().setColor(Color.YELLOW);
builder.getFont().setUnderline(Underline.SINGLE);
// Insert the link.
builder.insertHyperlink("Aspose Website", "http://www.aspose.com", false);
// Revert to default formatting.
builder.getFont().clearFormatting();
builder.write(" for more information.");
doc.save(getMyDir() + "DocumentBuilder.InsertHyperlink Out.doc");
結果如下圖:
因爲在builder.write(” for more information.”)之前調用了builder.getFont().clearFormatting(),所以font的格式恢復到默認值了。
關於DocumentBuilder的講解就告一段落了。接下去,會講解怎麼使用模板來快速創建文檔,感興趣的朋友請點擊Aspose.words Mail Merge初識。