我需要在带有缩进和自定义项目符号的Word文档中使用项目符号列表,这是通过Java使用Apache POI API生成的。我搜索了,我无法找到它的Word文档。它可用于使用文本框的Powerpoint幻灯片。但我不想使用文本框。请让我知道实现它的可能性。任何帮助非常感谢。 谢谢! 致以诚挚的问候, Arun Ganesh。 P在Apache POI API上使用Java创建Word文档的项目符号列表
回答
POI的HWPF是一个不成熟的API - 的首席开发人员有一个工作机会 一项需承担签署了保密协议,他被迫 在它抛弃工作 - 它可能无法使用它到 生成你想要的文件。
这确实是与2007 OOXML格式只能和最多(使用POI的XWPF)。由于它基于XML,因此您可以始终执行DOM操作来实现您想要的功能。制作项目符号点的最简单方法是创建一个项目符号列表并添加一个书签作为该项目符号的文本。当处理文档,找到你的书签,然后用
`org.w3c.dom.Node bkmk = bookmark.getctBookmark).getDomNode();`
获得DOM节点之后,复制bkmk节点的父,这是一个段落标记。您现在有一个重复的段落标记,其中包含所有必要的子标记以作为项目符号列表的一部分。请参阅OOXML中没有项目符号列表的结构,它只是段落的序列延续,它们具有相似的编号子标记。
<w:p>
<w:pPr>
<w:pStyle w:val="style0" />
<w:numPr>
<w:ilvl w:val="1" />
<w:numId w:val="2" />
</w:numPr>
<w:tabs>
<w:tab w:leader="none" w:pos="1807" w:val="left" />
</w:tabs>
<w:spacing w:after="0" w:before="120" />
<w:ind w:end="907" w:hanging="360" w:start="907" />
<w:jc w:val="both" />
</w:pPr>
<w:bookmarkStart w:id="1" w:name="GIVES" />
<w:r>
<w:t>To be inserted Next Bullet</w:t>
</w:r>
<w:bookmarkEnd w:id="1" />
<w:r>
<w:rPr>
<w:rFonts w:eastAsia="Times New Roman" />
<w:color w:val="000000" />
<w:lang w:eastAsia="en-US" />
</w:rPr>
</w:r>
</w:p>
关键的标签是和我不超熟悉的标签的XML含义,但如果你解压缩任何DOCX,并在document.xml中寻找(与整洁格式化后,当然)您可以看到有和没有编号的段落之间的差异。因此,一旦你有了你的标签的克隆,你可以用DOM遍历节点来获取和替换你想要的节点值,或者你可以使用xpath来找到节点(w:r/w) :T)。你必须设置一个NamespaceContext,并给它适当的代码来理解在W:前缀
NodeList nl;
XPath xp = XPathFactory.newInstance().newXPath();
NamespaceContext nsContext = new NamespaceContext(){
@Override public String getNamespaceURI(String prefix) {
if (prefix.equals("w")) {
return "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
}
return null;
}
@Override public String getPrefix(String namespaceURI) {
return null;
}
@Override public Iterator<?> getPrefixes(String namespaceURI) {
return Collections.emptyList()
.iterator();
}
};
xp.setNamespaceContext(nsContext);
nl = (NodeList) xp.evaluate("w:r/w:t", copy, XPathConstants.NODESET);
现在,遍历节点列表,setNodeValue(的“Hello World”)。你可以在克隆和做之后做到这一点: paragraph.getParentNode().insertBefore(bkmk, paragraph);
获得尽可能多的项目符号点,你想。如果你这样做
`paragraph.getParentNode().append(bkmk)`
你的新的重点将在文件的最后!
所以,你必须做insertBefore(它是唯一可用的除了append之外的dom节点操作)。这会在最后留下原始的空白项目符号,并在其中添加书签。您需要使用paragraph.getParentNode()去除书签。removeChild(paragraph);
然后用POI保存你的文件。
基本上,POI不支持项目符号列表,因为OOXML并不真正支持项目符号列表。项目符号列表只是一个带有编号标签的段落。但是,通过POI,您可以始终使用基本的DOM操作,并且可以使用unzip和整齐的方式检查DOM。
- 1. 如何使用Apache Word POI在word文件中创建Combobox?
- 2. 在JAVA中使用Apache POI和iText创建Word(DOC)中的PDF
- 3. OpenXML 2 SDK - Word文档 - 以编程方式创建项目符号列表
- 4. 使用Apache POI的CTPageSZ类中的错误Java NetBeans Word文档
- 5. 使用Apache Poi解析Word文档中表格中的表格
- 6. Apache poi项目符号和编号
- 7. 用Java创建Word文档
- 8. open office java uno API如何创建项目符号列表
- 9. Android - 创建Word文档
- 10. Apache POI获取word文档修订版本列表
- 11. 创建两列项目符号列表
- 12. 如何在使用apache poi api创建word文档时以Y的X格式添加页码?
- 13. 如何使用Apache POI提取word文档的格式信息?
- 14. java在使用APACHE POI的PowerPoint中创建图表
- 15. 使用apache poi创建列只读
- 16. 如何在Java中使用Apache POI在Excel中创建图表?
- 17. 使用Apache POI在Excel中创建树列表/表格
- 18. 使用Apache POI创建Excel图表
- 19. 使用Apache POI从dotx模板创建文档HWPF
- 20. Java:使用POI/HWPF解析ms-word文档
- 21. 创建Word文档
- 22. 如何用Qt创建项目符号或编号列表?
- 23. 使用VSTO创建新的Word文档
- 24. 学习Apache POI
- 25. 如何使用POI API保存Word文档?
- 26. 在word文档中创建景观表
- 27. Java:使用apache POI如何将ms word文件转换为pdf?
- 28. 如何使用Apache POI从MS Word文档的文本框中获取文本?
- 29. Apache POI Word教程。
- 30. 使用C#创建Word(2013)文档