【问题标题】:How to get alt text from images in a docx file using Open XML and C#如何使用 Open XML 和 C# 从 docx 文件中的图像中获取替代文本
【发布时间】:2012-07-12 20:23:55
【问题描述】:

我正在创建一个 Web 表单,它将对 Word 文档进行 508 合规性检查。我正在浏览 MSDN 和其他网站,以从用户选择的文件中获取我需要的信息。我找不到的一件事是如何查找图像,并检查它们是否有替代文本。任何帮助将不胜感激!

【问题讨论】:

    标签: asp.net image openxml


    【解决方案1】:

    插入到 2007+ Word 文档中的图像是 Drawing 对象。所以你可以遍历w:drawing成员的XML。

    http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.drawing.aspx

    w:drawing 成员将有一个名为 w:inline 的孩子,它是 Inline 类的一部分。

    http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.wordprocessing.inline.aspx

    w:inline 成员将有一个名为 wd:docPr 的成员。

    http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.wordprocessing.docproperties.aspx

    wd:docPr 成员可能有一个名为 title 的字段包含替代文本标题,还有一个名为 descr 的字段包含所有替代文本。

    示例 XML:

    <w:drawing xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
        <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="357A850A" wp14:editId="384E9053" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
            <wp:extent cx="5943600" cy="4457700" />
            <wp:effectExtent l="0" t="0" r="0" b="0" />
            <wp:docPr id="1" name="Picture 1" descr="ALL TEXT HERE" title="ALT TEXT TITLE HERE"/>
            ...
    

    我强烈建议您使用 OpenXML SDK 附带的 OpenXML Productivity Tool。

    【讨论】:

    • 我认为替代文本在 dorPr 的描述中?
    • 你是对的。我混淆了网络图像替代文本(它们只有一个字段)。更新了答案。如果您需要示例,我只能提供 C# 代码,我不会做 ASP。
    • 太棒了。因此,我需要从我所了解的内容中学习 LINQ 基础知识,至少要更容易做到这一点。这对我来说是新的编码,我是一个 Java 和 c 或 C++ 的人。你将如何循环遍历绘图元素,然后抓住那些 inline 没有带有 descr 属性的 docPr 的元素?
    • 这里是一些示例 C# 代码,我能做到的最好(这是从内存中提取的,但可以编译并且应该可以工作):pastebin.com/dEWPTGag
    • 你是一个绅士和一个学者。我非常感谢帮助。我一直在研究 LINQ 书籍和 MSDN 为这个项目做准备。非常感谢你给我一个开始的推动力。
    【解决方案2】:

    您可以使用解压缩和 lxprintf 的副本(LTXML2 工具包的一部分)更轻松地执行相同的操作,方法是循环解压缩幻灯片并在每个幻灯片上运行 lxprintf 以定位 wp:docPr 元素并输出@descr 和 @title 的值,例如

    for f in `unzip -l demo.pptx | grep ppt/slides/slide.*\.xml | awk '{print $NF}'`; do 
      unzip -p demo.pptx $f |\
        lxprintf -e 'w:drawing/wp:inline/wp:docPr' "%s, %s\n" @descr @title -
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多