【问题标题】:How would you parse/store/modify/save docx files您将如何解析/存储/修改/保存 docx 文件
【发布时间】:2013-05-30 12:56:31
【问题描述】:

我正在开发一个必须处理 docx 文件的应用程序。 我知道 docx 文件只是 zip 文件中的 xml/images/others 文件。

我的应用程序必须:

  1. 导入 docx 文件并存储其表示形式(文本,以及 与演示相关的所有内容,例如样式、警察、字体 .... ) 在数据库中。

  2. 提供一种方法来修改网页上每个句子的文本。

  3. 使用新文本导出 docx 文件,同时保留样式/演示文稿。

复杂的是我必须支持嵌套标签。例如,一个包含句子的标签也可以包含一些标签来为单词提供一些粗体。

我对数据库没有任何要求。它可以是任何东西。

我的问题更多是关于如何处理和表示数据以及如何处理我的要求,而不是关于如何解析 XML。

谢谢!

【问题讨论】:

标签: ruby xml database-design docx


【解决方案1】:

这个问题并不容易。

这是我回答的一些相关问题:Creating RTF , DOC , or DOCX in iOS

读完之后,这里有一个真实的单词示例:

<w:p w:rsidP="00CA7135" w:rsidR="00137C91" w:rsidRDefault="00137C91">
            <w:r>
                <w:t>Hello</w:t>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>My name</w:t>
            </w:r>
        </w:p>
        <w:p w:rsidP="00CA7135" w:rsidR="008C194D" w:rsidRDefault="00137C91">
            <w:r>
                <w:t xml:space="preserve">is</w:t>
            </w:r>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t xml:space="preserve">John Doe</w:t>
            </w:r>
            <w:proofErr w:type="spellStart"/>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t/>
            </w:r>
            <w:proofErr w:type="spellEnd"/>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>I want to</w:t>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>show</w:t>
            </w:r>
            <w:r w:rsidR="00E92392">
                <w:t xml:space="preserve">how difficult it is</w:t>
            </w:r>
        </w:p>

如你所见,一个段落中的文字永远不会只有一笔。

回答您的问题:

  1. 我认为在数据库中存储 docx 的唯一方法是将完整的 XML 和图像(或 docx 存储为 ByteArray)
  2. 要修改一个段落中的文本,您可以搜索所有&lt;w:t&gt; 标签并将它们按相同的&lt;w:p&gt; 标签分组。例如“你好”和“我的名字”在同一个&lt;w:p&gt;。然后你会想办法知道文本的插入位置,并在右边插入文本&lt;w:t&gt;
  3. 这只是将 XML 和图像压缩在一起

【讨论】:

  • 嗨,这是一个很难回答的问题,我可能不会得到任何其他答案。我现在接受你的问题,一旦我有办法做我需要的事情,我会及时更新这篇文章 :-) 谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 2021-08-31
  • 2017-07-07
  • 2021-08-29
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2012-07-02
相关资源
最近更新 更多