Aspose.Word怎么获取所有段落及其段落编号,怎么获取标题及其标题对应的内容

Aspose.Word怎么获取所有段落及其段落编号,怎么获取标题及其标题对应的内容

@ouchli 请参阅我们的文档以了解有关 Aspose.Words 文档对象模型的更多信息:
https://docs.aspose.com/words/java/aspose-words-document-object-model/

您可以使用以下代码获取段落及其索引:

Document doc = new Document("C:\\Temp\\in.docx");
// Get paragraphs.
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph p : (Iterable<Paragraph>)paragraphs)
{
    // Get index of the paragraph.
    int paraIndex = paragraphs.indexOf(p);
    // Check whether paragraph is heading.
    if (p.getParagraphFormat().isHeading())
    {
        // get text of the heading paragraph.
        System.out.println(p.toString(SaveFormat.TEXT).trim());
    }
}

谢谢,怎么获取标题及其标题对应的内容呢?这个没找到

@ouchli 您能否附上您的文件并指定您想要获得的文本? 不幸的是,目前还不太清楚。

如图,根据标题获取标题的内容
比如根据 一级标题 介绍 获取 到的内容 为

根据 二级标题 目的 获取的内容为 你是谁

@ouchli 我上一篇文章中提供的代码正是您所需要的。 或者,您可以使用 DocumentVisitor 来获取文档结构。

您上一段代码只有 标题 和标题的索引,没有标题所包含的内容哦

@ouchli You can modify code to print content of other paragraphs, other then headings:

Document doc = new Document("C:\\Temp\\in.docx");
// Get paragraphs.
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph p : (Iterable<Paragraph>)paragraphs)
{
    // Get index of the paragraph.
    int paraIndex = paragraphs.indexOf(p);
    // Check whether paragraph is heading.
    if (p.getParagraphFormat().isHeading())
        System.out.println(p.toString(SaveFormat.TEXT).trim());
    
    // get text of the paragraph.
    System.out.println("\t"+p.toString(SaveFormat.TEXT).trim());
}

您好,请问我获取文本样式的时候使用Font对象,那文本的字号怎么获取呢?例如图中的 二号 怎么获取到

@ouchli 您可以使用 Font.Size 属性来获取应用于文本的字体大小。

getSize得到的大小不是 二号,而是一个double类型的字号, 我怎么直接获取 二号 这个字号呢

@ouchli 您能否在此附上您的输入文件以供我们参考? 我们会检查并为您提供更多信息。

标题1.docx (24.5 KB)

里面的标题1 的字号使用 getSize 获取的是 22.0
我希望获取到的是 二号

@ouchli 感谢您提供更多信息。 Aspose.Words 返回的值是正确的。 看起来你在MS Word中看到的是中文版MS Word中显示字体大小的特定方式。 如果检查所附文档,可以看到该段落应用了样式 2:

<w:p>
	<w:pPr>
		<w:pStyle w:val="2"/>
		<w:bidi w:val="0"/>
		<w:rPr>
			<w:rFonts w:hint="default"/>
			<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
		</w:rPr>
	</w:pPr>
	<w:r>
		<w:rPr>
			<w:rFonts w:hint="eastAsia"/>
			<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
		</w:rPr>
		<w:t>标题1</w:t>
	</w:r>
	<w:bookmarkStart w:id="0" w:name="_GoBack"/>
	<w:bookmarkEnd w:id="0"/>
</w:p>

如果检查此样式,字体大小似乎为 Aspose.Words 返回的 44 半点或 22 点:

<w:style w:type="paragraph" w:styleId="2">
	<w:name w:val="heading 1"/>
	<w:basedOn w:val="1"/>
	<w:next w:val="1"/>
	<w:qFormat/>
	<w:uiPriority w:val="9"/>
	<w:pPr>
		<w:keepNext/>
		<w:keepLines/>
		<w:spacing w:before="340" w:beforeLines="0" w:beforeAutospacing="0" w:after="330" w:afterLines="0" w:afterAutospacing="0" w:line="576" w:lineRule="auto"/>
		<w:outlineLvl w:val="0"/>
	</w:pPr>
	<w:rPr>
		<w:b/>
		<w:kern w:val="44"/>
		<w:sz w:val="44"/>
	</w:rPr>
</w:style>

不好意思有点没看懂您说的意思,那我怎么能转换为我想要的返回呢 二号

@ouchli 不幸的是,无法使用 Aspose.Words 以这种方式获取字体大小。 Aspose.Words 返回存储在文档中的字体大小,即以磅为单位。

请问我想获取标题前面的编号如何获取

如图红框中的编号

@ouchli 您可以使用 Paragraph.ListLabel 属性来获取列表标签。 请注意,在使用此属性之前,您应该调用 Document.updateListLabels 方法。

这种方法可以获取到内置的样式标题,但是如果不是内置的样式,该怎么获取呢
image.png (38.1 KB)

@jeremyliu 您可以使用 Style.getBuiltIn:

Document doc = new Document("input.docx");

NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph p : (Iterable<Paragraph>)paragraphs)
{
    Style style = p.getParagraphFormat().getStyle();
    if (!style.getBuiltIn())
    {
        //做点什么
    }
}