• Word控件Spire.Doc 【文本】教程(12) ;新方法在 C# 中获取 Word 文档中内容控件的别名、标签和 ID


    内容控件为您提供了一种设计文档的方法。当您向文档添加内容控件时,该控件由边框、标题和临时文本标识,这些文本可以向用户提供说明,并且可以防止用户编辑或删除文档的受保护部分。

    将文档或模板的部分内容绑定到数据。您可以将内容控件绑定到数据库字段、.NET Framework 中的托管对象、存储在文档中的 XML 元素以及其他数据源。

    Spire.Doc for.NET 最新下载icon-default.png?t=M85Bhttps://www.evget.com/product/3368/download

    本文说明了如何通过Spire.Doc使用新方法获取所有控件及其属性,包括别名、id 和标签,并将 Barcode 替换为另一个图像。

    参考这篇文章检查旧方法: Get alias, tag and id of content controls in a Word document in C#

    以下是测试文件new.docx

    以下是步骤:

    第 1 步:创建一个新的 Word 文档并加载测试文件。

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

    第 2 步:创建一个列表 StructureDocument 来存储标签。在这里,每个内容控件都将由标签标识。

    public class StructureTags
    {
    List m_structureDocumnt;
    public List StructureDocument
    {
    get
    {
    if (m_structureDocumnt == null)
    m_structureDocumnt = new List();
    
    return m_structureDocumnt;
    }
    }
    
    }
    

    第 3 步:使用foreach语句获取Word文档中的所有标签。

    foreach (Section section in doc.Sections)
    {
    foreach (Body body in section.ChildObjects)
    {
    ModifyBody(body);
    }
    }
    

    第 4 步:显示所有控件的属性。

    List tagInlines = structureTags.StructureDocument;
    Console.WriteLine("Part1");
    for (int i = 0; i < tagInlines.Count; i++)
    {
    string alias = tagInlines[i].SDTProperties.Alias; // Can be null or empty
    decimal id = tagInlines[i].SDTProperties.Id;
    string tag = tagInlines[i].SDTProperties.Tag;
    string STDType = tagInlines[i].SDTProperties.SDTType.ToString();
    
    Console.WriteLine("{0,20},{1,15},{2, 10} - {3}", alias, id, STDType, tag);
    Console.ReadKey();
    }
    

    第 5 步:替换图片内容控件内的图像。

    doc.SaveToFile("replace1.docx", FileFormat.Docx2013);
    System.Diagnostics.Process.Start("replace1.docx");
    

    结果截图

    完整代码

    using Spire.Doc;
    using Spire.Doc.Documents;
    using Spire.Doc.Fields;
    using System;
    using System.Drawing;
    namespace GetAlias
    {
    
    class Program
    {
    
    static StructureTags structureTags = new StructureTags();
    static void Main(string[] args)
    {
    Document doc = new Document(@"new.docx");
    
    foreach (Section section in doc.Sections)
    {
    foreach (Body body in section.ChildObjects)
    {
    ModifyBody(body);
    }
    }
    
    List tagInlines = structureTags.StructureDocument;
    Console.WriteLine("Part1");
    for (int i = 0; i < tagInlines.Count; i++)
    {
    string alias = tagInlines[i].SDTProperties.Alias;
    decimal id = tagInlines[i].SDTProperties.Id;
    string tag = tagInlines[i].SDTProperties.Tag;
    string STDType = tagInlines[i].SDTProperties.SDTType.ToString();
    
    Console.WriteLine("{0,20},{1,15},{2, 10} - {3}", alias, id, STDType, tag);
    Console.ReadKey();
    
    if (tagInlines[i].SDTProperties.SDTType == SdtType.Picture)
    {
    DocPicture picture = tagInlines[i].ChildObjects.FirstItem as DocPicture;
    if (picture == null)
    {
    picture = new DocPicture(doc);
    picture.LoadImage(Image.FromFile(@"cat.jpg"));
    tagInlines[i].ChildObjects.Add(picture);
    }
    else
    {
    picture.LoadImage(Image.FromFile(@"cat.jpg"));
    }
    }
    }
    
    doc.SaveToFile("replace1.docx", FileFormat.Docx2013);
    System.Diagnostics.Process.Start("replace1.docx");
    }
    
    static void ModifyBody(Body body)
    {
    if (body == null)
    return;
    
    foreach (DocumentObject docObj in body.ChildObjects)
    {
    if (docObj is StructureDocumentTag)
    {
    structureTags.StructureDocument.Add(docObj as StructureDocumentTag);
    
    }
    else if (docObj is Table)
    {
    ModifyTable(docObj as Table);
    }
    else if (docObj is Paragraph)
    {
    ModifyParagraph(docObj as Paragraph);
    }
    }
    }
    
    static void ModifyTable(Table table)
    {
    if (table == null)
    return;
    
    foreach (TableRow row in table.Rows)
    {
    foreach (TableCell cell in row.Cells)
    {
    if (cell is StructureDocumentTagCell)
    {
    structureTags.StructureDocument.Add(cell as StructureDocumentTagCell);
    }
    else
    {
    ModifyBody(cell);
    }
    }
    }
    }
    
    static void ModifyParagraph(Paragraph para)
    {
    if (para == null)
    return;
    
    foreach (DocumentObject docObj in para.ChildObjects)
    {
    if (docObj is StructureDocumentTagInline)
    {
    
    structureTags.StructureDocument.Add(docObj as StructureDocumentTagInline);
    }
    }
    }
    
    public class StructureTags
    {
    List m_structureDocumnt;
    public List StructureDocument
    {
    get
    {
    if (m_structureDocumnt == null)
    m_structureDocumnt = new List();
    
    return m_structureDocumnt;
    }
    }
    }
    
    }
    }
    
     

     如有您有产品试用,授权等相关问题,欢迎私聊我获取~

  • 相关阅读:
    基于51单片机六车道智能交通灯设计(仿真+源程序+PCB+论文)
    简单易懂的C++类的友元教程(friend)。全局函数做类友元,一个类做另一个类的友元,一个类中某个成员函数做友元。过程中顺序很重要哦。最后附有完整实现代码
    js中的原型链理解
    通过BeanFactotyPostProcessor动态修改@FeignClient的path
    S7-1500 PLC之间进行TCP通信的具体方法和步骤详解(图文)
    10-1 基于Prometheus联邦收集Node指标数据
    JVM性能——垃圾回收器的优化策略
    Allegro如何输出EMN文件操作指导
    Linux必会100个命令(五十四)lsof命令
    Linux C 应用编程学习笔记——(3)深入探究文件 I/O
  • 原文地址:https://blog.csdn.net/m0_67129275/article/details/127684643