怎么在指定标题下面添加新的标题?

怎么在指定标题下面添加新的标题?

并实现文档所有标题重新排序

@Tiaohh 您可以克隆标题段落,在其中放入新文本,然后使用 CompositeNode.insert_after 方法将此段落插入到原始标题段落之后。

怎么删除标题和修改标题信息呢

@Tiaohh 文档中的标题是一个简单的段落,因此您可以像文档中的任何其他节点一样删除它,即使用 Node.remove 方法。

对已有的标题如果修改呢 目标标题内容 修改目标标题内容的内容

@Tiaohh 在这种情况下,您可以简单地删除标题段落的子节点,并将具有新标题约定的新节点放入该标题段落中。

你有有案例嘛?????????

还有一种情况就是我查找主标题信息怎么给这个标题下面插入一个子标题信息呢。有没有案例呀

插入标题之后怎么重新排序呢

可以给我一个案例吗 读取原有文档标题进行此操作

{
    "deleted_ids": ["研究代表者", "研究代表循序"],
    "added_titles_with_parents": [
        {
            "parent": "試験の中止と終了",
            "added_title": "試験合作信息",
            "is_child": False,
            "level":1
        },
        {"parent": "試験合作信息", "added_title": "不知道", "is_child": True,"level":2},
        {"parent": "試験合作信息", "added_title": "怎么办", "is_child": True,"level":2},
        {"parent": "怎么办", "added_title": "哈哈哈哈哈", "is_child": True,"level":3},
        {"parent": "研究の実施体制", "added_title": "我不知", "is_child": False,"level":1},
    ],
    "modifications": [{"original": "研究分担者", "modified": "研究者担当"}],
}

deleted_id为删除的标题信息
added_titles_with_parents向文档添加的信息parent上个标题的内容,added_title添加的标题 “level”:1标题等级
modifications为标题修改的内容 以下是文件信息怎么对文档进行修改标题呢,如果删除标题也需要删除段落信息
111.docx (45.5 KB)

还需要修改文档之后目录重新排序

@Tiaohh 在文档标题中使用简单的文本作为标签。 为了实现你所需要的,需要使用列表。 在这种情况下,当您删除或添加项目时,编号将自动处理。

可以用上面的数据给我写一个demo吗 文档文件以上传

import aspose.words as aw

    lic = aw.License()
    lic_path = os.path.join(settings.BASE_PATH, "core/Aspose.Total.Product.Family.lic")
    lic.set_license(lic_path)
    # 加载现有文档
    doc = aw.Document("/Users/dip/Desktop/111.docx")

    # 初始化文档构建器
    builder = aw.DocumentBuilder(doc)

    # 处理删除操作
    deleted_ids = ["研究分担者"]  # 需要删除的标题列表
    for para in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True):
        if para.get_text().strip() in deleted_ids:
            para.remove()  # 删除与deleted_ids匹配的段落

    # 处理添加操作
    added_titles_with_parents = [
        {
            "parent_id": 0,
            "parent": "研究の実施体制",
            "added_title": "研究代wwwwww表者111",
            "is_child": True,
            "level": 2,
        }
    ]

    # 创建标题字典,方便查找父级标题
    title_dict = {
        para.get_text().strip(): para
        for para in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)
    }

    # 添加新的标题
    for item in added_titles_with_parents:
        parent_title = item["parent"]
        added_title = item["added_title"]
        level = item["level"]

        if parent_title in title_dict:
            parent_para = title_dict[parent_title]

            # 将光标移动到父级标题后
            builder.move_to(parent_para)

            if item["is_child"]:
                # 添加子标题
                builder.paragraph_format.style = doc.styles.get_by_style_identifier(
                    getattr(aw.StyleIdentifier, f"HEADING_{level}")
                )
                builder.insert_paragraph()
                builder.writeln(added_title)

    # 处理修改操作
    modifications = [{"original": "研究代表者", "modified": "研究代表者111"}]

    # 修改标题
    for mod in modifications:
        original = mod["original"]
        modified = mod["modified"]

        if original in title_dict:
            para = title_dict[original]
            para.runs.clear()  # 清除原始文本
            para.append_child(aw.Run(doc, modified))  # 添加新文本

    # 保存修改后的文档
    doc.save("modified_document.docx")

为什么我写的增加 删除 修改标题都没有生效 可以帮我看一下嘛

以上问题都以解决,
为什么我设置字体样式没有生效报错 new_paragraph.runs[0].font.name = parent_font.name
^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: ‘NoneType’ object has no attribute ‘font’

added_titles_with_parents = [
        {
            "parent_id": 0,
            "parent": "研究の実施体制",
            "added_title": "研究代wwwwww表者111",
            "is_child": True,
            "level": 2,
        },
        {
            "parent_id": 0,
            "parent": "研究の実施体制",
            "added_title": "我是哈哈哈哈哈",
            "is_child": False,
            "level": 1,
        },
    ]

    # 创建标题字典,方便查找父级标题
    title_dict = {
        re.sub(numbering_pattern, "", para.get_text()).strip(): para
        for para in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)
    }

    # 添加新的标题
    for item in added_titles_with_parents:
        parent_title = item["parent"]
        added_title = item["added_title"]
        level = item["level"]
        if parent_title in title_dict:
            parent_para = title_dict[parent_title]
            parent_para = parent_para.as_paragraph()
            # 将光标移动到父级标题之后
            builder.move_to(parent_para)
            # 插入一个新的段落
            new_paragraph = builder.insert_paragraph().as_paragraph()
            # 从父级标题中获取样式
            parent_style = parent_para.paragraph_format  # 父级段落的样式
            parent_font = parent_para.runs[0].font  # 获取字体

            new_paragraph.paragraph_format.style = doc.styles.get_by_style_identifier(
                getattr(aw.StyleIdentifier, f"HEADING{level}")
            )
            # 添加新的文本
            new_paragraph.runs[0].font.name = parent_font.name
            new_paragraph.runs[0].font.size = parent_font.size
            new_paragraph.append_child(aw.Run(doc, added_title))

@Tiaohh 出现此问题的原因是新创建的段落为空并且没有任何子节点。 请尝试像这样更改代码:

new_paragraph.append_child(aw.Run(doc, added_title))
new_paragraph.runs[0].font.name = parent_font.name
new_paragraph.runs[0].font.size = parent_font.size

PS:我会将您的主题移至Aspose中文支持类别。

added_titles_with_parents = [
        {
            "parent_id": 0,
            "parent": "研究の実施体制",
            "added_title": "研究代wwwwww表者111",
            "is_child": True,
            "level": 2,
        },
        {
            "parent_id": 0,
            "parent": "研究の実施体制",
            "added_title": "我是哈哈哈哈哈",
            "is_child": False,
            "level": 1,
        },
    ]

    # 创建标题字典,方便查找父级标题
    title_dict = {
        re.sub(numbering_pattern, "", para.get_text()).strip(): para
        for para in doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)
    }

    # 添加新的标题
    for item in added_titles_with_parents:
        parent_title = item["parent"]
        added_title = item["added_title"]
        level = item["level"]
        if parent_title in title_dict:
            parent_para = title_dict[parent_title]
            parent_para = parent_para.as_paragraph()
            # 将光标移动到父级标题之后
            builder.move_to(parent_para)
            # 插入一个新的段落
            new_paragraph = builder.insert_paragraph().as_paragraph()
            # 从父级标题中获取样式
            parent_style = parent_para.paragraph_format  # 父级段落的样式
            parent_font = parent_para.runs[0].font  # 获取字体

            new_paragraph.paragraph_format.style = doc.styles.get_by_style_identifier(
                getattr(aw.StyleIdentifier, f"HEADING{level}")
            )
            # 添加新的文本
            new_paragraph.append_child(aw.Run(doc, added_title)) 

按照你的方法修改不对,还有一个问题如果我一级标题下面有多个子标题,我需要在整个一标题下面插入一个标题而不是在子标题下面插入

问题出现在 如果我插入平级的标题,插入在研究の実施体制之后 一个我是哈哈哈哈哈标题,如果研究の実施体制有子标题,这样顺序都变了。原来的段落格式不改变