ruby - 您将如何解析/存储/修改/保存 docx 文件

标签 ruby xml database-design docx

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

我的应用程序必须:

  1. 导入 docx 文件并存储其表示形式(文本,也可以 与演示相关的一切,例如风格、风格、字体 ....)在数据库中。

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

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

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

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

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

谢谢!

最佳答案

这个问题并不容易。

这是我回答的一些相关问题: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. 要修改一个段落中的文本,您可以搜索所有 <w:t>标签并按相同的 <w:p> 对它们进行分组标签。例如“你好”和“我的名字”在同一个 <w:p> 中然后你会找到一种方法来知道文本被插入到哪里,并将文本插入到右侧的<w:t>中。
  3. 这只是将 XML 和图像压缩在一起

关于ruby - 您将如何解析/存储/修改/保存 docx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16912585/

相关文章:

ruby-on-rails - Rails 和 capistrano 部署 : bundle stderr: Nothing written

ruby - 如何使用 RVM 更新 Ruby 解释器?

Ruby MITM 代理

java - Spring Web 服务客户端和服务器 - 未找到端点映射

xml - PDF 到 XML 并再次返回 PDF

mysql - 设计一个关系数据库,以便实体可以保存一组可选的数据

ruby - "python -i"相当于 Ruby

java - 通过 XML 将属性注入(inject) Spring Rest Controller

sql-server - 当我有 "IsDeleted"列类型的日期时间列时,是否需要 bool 列?

c# - 将序列化对象存储在数据库中而不是多个 xml 文本文件中是个好主意吗?