我正在尝试找到一种 api 或 php 技术,可以读取 docx 文档,删除一些 MS 内容控制值,然后重新创建相同的 docx 文档,同时保留所有 MSWord 内容和样式元素。
您可能想知道这有什么用处。例如,您可以像这样在 MSWord 中设置问题:
The sky is blue in colour.
然后,在另一端,当在 MSWord 中查看处理过的文件时,用户只看到:
The Sky is in colour.
一方面,您可以将 Content Control 元素中的“蓝色”数据提取到您的数据库中。另一方面,您可以让其他最终用户在 MSWord 中查看已处理的文件,而不会显示蓝色的“答案”。多么酷啊。
我的想法一般是这样的:
1. 打开 MSWord 创建的 docx 文件(MSWord 2007 及更高版本)。该文件包含一些常用的 MSWord 文本和样式元素以及自定义内容控制元素(您在开发人员的 MSWord/Visual Studio 中创建的),看起来像(伪):
... some standard MS styles or runs ...
……<SdtRun> The sky is </SdtRun>
<Sdt Content Control attribute: colour>
<Sdt Content Control value> blue** </Sdt Content Control value>
</Sdt Content Control attribute>
<SdtRun> in colour.></SdtRun>
_
2. 删除内容控件元素内的值,同时保留该值包含的空格。
3. 生成一个没有指定内容控制元素值的新MSword文档。所有常用的 MSWord 文本和样式元素都被保留。或者,新生成的 docx 可以不使用以静态文本形式保存的原始内容控制标签和空格。
4. 无需应用 Content Control 绑定技术即可实现上述目标 (在某些情况下,您宁愿不绑定 Content Control 元素,但这本身就是另一个话题)。
挑战在于创建一个新的 MSWord docx 并保留所有标准的 MSWord 内容(文本、样式等),而不使用任何预定义的模板。我环顾四周寻找 apis,但似乎找不到任何可以读写 MSWord docx 文档的东西。我只能确定一些可以写入预制模板(例如 phpdocx)的内容。
我什至不确定上述方法是否合适,但它的要点实际上是在不破坏原始文档的内容、样式和布局的情况下从 docx 文档中删除内容控制值。我猜该解决方案可能涉及
(i)通过 XML api 定位 document.xml 本身或
(ii)通过 docx api 定位本机 docx,或
(iii)您可能希望分享的任何其他技术。
有没有人可以分享一些指针?
=======在 13 年 2 月 23 日添加了详细信息========
我想多分享一点,以便为原始问题提供背景信息。我想要实现的要点是为人们创建一种通过可编辑的 MSWord 模板将数据上传到数据库的方法。
此类使用的一个示例可能是营销研究公司希望在 MSword 中即时创建在线调查表格,上传这些表格,然后立即在线启动这些调查表格,所有这些都只需通过网页上传 MSWord Doc。在 docx 本身上,有些人可能希望在同一表单中灵活地复制和粘贴数据字段占位符(即内容控制标签),并且不受固定长度模板的显着限制。
数据绑定对于固定长度的固定布局方案来说是理想的。但是在这种情况下,最终用户将无法轻松编辑模板,因为复制-n-粘贴数据绑定标签也意味着在第 n 个复制和粘贴标签中复制相同的值(MSword 自动执行此操作)。我尝试了另一种方法,我直接解析来自 document.xml 而不是 customXml 的值,并且能够从 document.xml 中提取 sdt 节点,并通过简单地为某些内容控制标签分配含义并通过节点识别它们来重建所需的数据结构属性。
我什至能够通过“blip”节点解析图像,但我还没有从 custom.XML 中找到这样做的方法。在这种情况下,用户可以不受限制地复制内容控制标签,包括图像标签,并且仍然能够从这些标签中捕获值。
最后,有些人可能希望能够接收他们上传的原始 docx 的返回“公共”版本,去除某些“默认”内容控制值。因此,提出了上述问题。我将深入研究各种 api,例如 phpWord。同时,我希望能听到更多关于您的消息。