大家好! 首先,我想添加列表在我的poi字(XWPF), 秒,我想使用黑色立方體作爲像下面的圖片列表符號。 第三,如果訂購數字而不是黑色立方體符號,我應該怎麼做。有人能給我一些建議嗎?非常感謝!如何在poi文字中添加列表,爲列表符號添加序號或其他符號?
0
A
回答
3
由於在XWPFNumbering新增加一個新的AbstractNum,需要XWPFAbstractNum,這是無法創建,而無需使用計算機墊低級別對象到現在爲止,至少org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum
是必要的。
CTAbstractNum有創建其中的單個子對象的方法。但最終的代碼將是非常小的部分代碼,並且需要太多的代碼行。所以在我看來,最好的辦法是解析XML
來創建AbstractNum。爲了得到這個XML
可以創建一個簡單的Word
文件,然後解壓*.docx
文件並看看/word/numbering.xml
。在那裏你會找到類似的東西:
<w:numbering>
<w:abstractNum w:abstractNumId="0">
<w:multiLevelType w:val="hybridMultilevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1"/><w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="360" w:left="720"/>
</w:pPr>
</w:lvl>
<w:lvl w:ilvl="1" w:tentative="1">
<w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2"/><w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="360" w:left="1440"/>
</w:pPr>
</w:lvl>
<w:lvl w:ilvl="2" w:tentative="1">
<w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3"/><w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="360" w:left="2160"/>
</w:pPr>
</w:lvl>
</w:abstractNum>
...
</w:numbering>
例如3級十進制編號。
這個XML
在我看來是自我解釋。每個編號級別都有一個lvl
定義,其定義爲它的外觀和縮進。
對於子彈編號的XML
將是類似的,但對於使用的將是附加的符號字符的字形定義使用Font
定義。例如,「黑色立方體」是來自字體Wingdings
的字形。
...
<w:lvl w:ilvl="0">
<w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="360" w:left="720"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/>
</w:rPr>
</w:lvl>
...
知道了這一點,我們可以將代碼:
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumbering;
import java.math.BigInteger;
public class CreateWordBulletOrDecimalList {
static String cTAbstractNumBulletXML =
"<w:abstractNum xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:abstractNumId=\"0\">"
+ "<w:multiLevelType w:val=\"hybridMultilevel\"/>"
+ "<w:lvl w:ilvl=\"0\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "<w:lvl w:ilvl=\"1\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"-\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"1440\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "<w:lvl w:ilvl=\"2\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2160\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "</w:abstractNum>";
static String cTAbstractNumDecimalXML =
"<w:abstractNum xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:abstractNumId=\"0\">"
+ "<w:multiLevelType w:val=\"hybridMultilevel\"/>"
+ "<w:lvl w:ilvl=\"0\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "<w:lvl w:ilvl=\"1\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1.%2\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"1440\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "<w:lvl w:ilvl=\"2\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1.%2.%3\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2160\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "</w:abstractNum>";
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The List:");
CTNumbering cTNumbering = CTNumbering.Factory.parse(cTAbstractNumBulletXML);
//CTNumbering cTNumbering = CTNumbering.Factory.parse(cTAbstractNumDecimalXML);
CTAbstractNum cTAbstractNum = cTNumbering.getAbstractNumArray(0);
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = document.createNumbering();
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
BigInteger numID = numbering.addNum(abstractNumID);
for (int i = 0; i < 5; i++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID);
run = paragraph.createRun();
run.setText("List item " + (i+1));
if (i < 4) paragraph.setSpacingAfter(0);
if (i == 0) {
for (int j = 0; j < 2; j++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " " + (char)(97+j));
paragraph.setSpacingAfter(0);
}
}
if (i == 1 || i == 3) {
paragraph = document.createParagraph();
paragraph.setNumID(numID);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " a");
paragraph.setSpacingAfter(0);
}
}
paragraph = document.createParagraph();
run=paragraph.createRun();
run.setText("Paragraph after the list.");
FileOutputStream out = new FileOutputStream("CreateWordBulletOrDecimalList.docx");
document.write(out);
System.out.println("CreateWordBulletOrDecimalList written successully");
}
}
代碼在一個文檔中使用這兩種類型的列表:
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumbering;
import java.math.BigInteger;
public class CreateWordBulletAndDecimalList {
static String cTAbstractNumBulletXML =
"<w:abstractNum xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:abstractNumId=\"0\">"
+ "<w:multiLevelType w:val=\"hybridMultilevel\"/>"
+ "<w:lvl w:ilvl=\"0\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "<w:lvl w:ilvl=\"1\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"-\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"1440\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "<w:lvl w:ilvl=\"2\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/><w:lvlText w:val=\"\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2160\" w:hanging=\"360\"/></w:pPr><w:rPr><w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/></w:rPr></w:lvl>"
+ "</w:abstractNum>";
static String cTAbstractNumDecimalXML =
"<w:abstractNum xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:abstractNumId=\"1\">"
+ "<w:multiLevelType w:val=\"hybridMultilevel\"/>"
+ "<w:lvl w:ilvl=\"0\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"720\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "<w:lvl w:ilvl=\"1\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1.%2\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"1440\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "<w:lvl w:ilvl=\"2\" w:tentative=\"1\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/><w:lvlText w:val=\"%1.%2.%3\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"2160\" w:hanging=\"360\"/></w:pPr></w:lvl>"
+ "</w:abstractNum>";
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
CTNumbering cTNumbering = CTNumbering.Factory.parse(cTAbstractNumBulletXML);
CTAbstractNum cTAbstractNum = cTNumbering.getAbstractNumArray(0);
XWPFAbstractNum abstractNum1 = new XWPFAbstractNum(cTAbstractNum);
cTNumbering = CTNumbering.Factory.parse(cTAbstractNumDecimalXML);
cTAbstractNum = cTNumbering.getAbstractNumArray(0);
XWPFAbstractNum abstractNum2 = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = document.createNumbering();
BigInteger abstractNumID1 = numbering.addAbstractNum(abstractNum1);
BigInteger numID1 = numbering.addNum(abstractNumID1);
BigInteger abstractNumID2 = numbering.addAbstractNum(abstractNum2);
BigInteger numID2 = numbering.addNum(abstractNumID2);
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The lists:");
paragraph = document.createParagraph();
paragraph = document.createParagraph();
run=paragraph.createRun();
run.setText("The bullet list:");
for (int i = 0; i < 5; i++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID1);
run = paragraph.createRun();
run.setText("List item " + (i+1));
if (i < 4) paragraph.setSpacingAfter(0);
if (i == 0) {
for (int j = 0; j < 2; j++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID1);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " " + (char)(97+j));
paragraph.setSpacingAfter(0);
}
}
if (i == 1 || i == 3) {
paragraph = document.createParagraph();
paragraph.setNumID(numID1);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " a");
paragraph.setSpacingAfter(0);
}
}
paragraph = document.createParagraph();
paragraph = document.createParagraph();
run=paragraph.createRun();
run.setText("The decimal list:");
for (int i = 0; i < 5; i++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID2);
run = paragraph.createRun();
run.setText("List item " + (i+1));
if (i < 4) paragraph.setSpacingAfter(0);
if (i == 0) {
for (int j = 0; j < 2; j++) {
paragraph = document.createParagraph();
paragraph.setNumID(numID2);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " " + (char)(97+j));
paragraph.setSpacingAfter(0);
}
}
if (i == 1 || i == 3) {
paragraph = document.createParagraph();
paragraph.setNumID(numID2);
paragraph.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
run = paragraph.createRun();
run.setText("Sub list item " + (i+1) + " a");
paragraph.setSpacingAfter(0);
}
}
paragraph = document.createParagraph();
paragraph = document.createParagraph();
run=paragraph.createRun();
run.setText("Paragraph after the lists.");
FileOutputStream out = new FileOutputStream("CreateWordBulletAndDecimalList.docx");
document.write(out);
System.out.println("CreateWordBulletAndDecimalList written successully");
}
}
相關問題
- 1. 如何在laravel數據表中添加行號或序列號
- 2. 如何在angular2數據表中添加行號或序列號
- 3. 添加標點符號到列表中?
- 4. 將表情符號/表情符號添加到MSSQL表中
- 5. 如何在表格單元格條目或換行符中添加編號或項目符號列表
- 6. 如何添加無序列表項目符號
- 7. 將括號添加到字符串中的字符序列
- 8. 如何在數學表達式中添加星號符號?
- 9. 如何將信用卡號碼添加到其他列表?
- 10. Highcharts:向倒序列圖表系列添加符號
- 11. 如何向符號添加字符串?
- 12. 如何組符號或編號列表到#符號
- 13. 如何在HTML列表的項目符號上添加事件?
- 14. 如何使用CSS爲靜態字符串添加有序列表項號碼?
- 15. Google表單結果 - 添加序列號
- 16. 如何添加「%」符號?
- 17. 在PowerPoint中添加減號符號VBA
- 18. 添加單引號,其中字符串包含在AngularJS逗號
- 19. 添加「符號在QStringList中
- 20. 添加逗號字符串
- 21. 添加%符號值
- 22. 添加符號「文本
- 23. 添加%符號併爲其着色
- 24. sql 2008添加序列號
- 25. 添加序列記錄號
- 26. 添加序列號到SqlDataReader()
- 27. CListView - 添加序列號
- 28. 在siar或siber中添加permil符號
- 29. Filter_var()被添加了 「A」 符號 「©」 符號
- 30. 如何在反引號字符串中添加反引號?
如果我用cTAbstractNumBulletXML和cTAbstractNumDecimalXML兩個,我發現後者將代替以前。有兩種方法getList1(),getList2(),分別使用cTAbstractNumBulletXML和cTAbstractNumDecimalXML,但getList1()會變成getList2()的風格,它有什麼問題? – Sucy
我的示例代碼是或者**,使用'cTAbstractNumBulletXML' ** **或**使用'cTAbstractNumDecimalXML'。如果你同時需要,你需要兩個不同的'XWPFAbstractNum'' abstractNum1'和'abstractNum2'這兩個不同的'XWPFNumbering編號',從而產生兩個不同的'BigInteger'' abstractNumID1'和'abstractNumID2'以及兩個不同的'BigInteger'' numID1'和'numID2'。 'paragraph.setNumID'中使用的不同numID將爲段落設置不同種類的編號。 –
忘了一件事:'w:abstractNumId =「0」'不能在'XML'中同時爲'0'。其中一個必須是不同的。現在我已經提供了使用這兩種列表的示例代碼。 –