你将如何解析/存储/修改/保存docx文件

问题描述:

我正在处理一个必须处理docx文件的应用程序。 我知道docx文件只是一个zip文件中的xml/images/others文件。你将如何解析/存储/修改/保存docx文件

我的应用程序必须:

  1. 导入docx文件和存储他们的表现(文字,但也 eveything相关介绍,如风格,警察,字体 ....)在数据库。

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

  3. 导出带有新文本的docx文件,同时保留样式/表示。

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

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

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

谢谢!

+0

你喜欢什么编程语言?一般参见http://www.slideshare.net/plutext/document-generation-2012osdcsydney – JasonPlutext

+0

标签已更新。我会在红宝石(或Java)。 – Arkan

这个问题并不容易。

下面是一些相关的问题我回答: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和图像一起
+0

嗨,这是一个难题,我可能不会得到任何其他答案。我现在接受你的问题,只要我有办法做我需要的事情,我会尽快更新这篇文章:-)谢谢! – Arkan