(轉)Aspose.words編程指南之DocumentBuilder二

原文鏈接:https://blog.csdn.net/sinat_30276961/article/details/48291547

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初識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章