8

如果 DOCX 文件被移动或重命名,我正在寻找一种方法来识别它们。原因很明显,我正在使用 Open XML SDK,构建一个超链接检查器。

完美运行,至少它可以在文档中添加或更新超链接。

但是,问题是,如果我重命名一个外部文件(source.docx + target.docx 为 targetB.docx),链接就会断开。我可以找到损坏的链接(只需检查链接文件是否在给定位置)。

但我想要更多。我希望能够通过搜索目录(docx)中的所有文档并扫描它们是否是“目标”来恢复丢失的链接。最简单的方法应该是存储在文档属性中某处的 GUID,如果文档被重命名或编辑(校验和不适用),它不会改变。

然后我创建一个单独的链接列表和相应的 ID,如果任何文档被重命名,我只需更新链接。我希望这个概念是清楚的。

所以有几个基本问​​题:

  • 是否有“最佳实践”将此“自定义信息”存储在 Open XML 文档中
  • 文字处理文档 (DOCX) 是否已经有一些由 Word 创建的唯一标识符
  • 您将在哪里保存映射(超链接目标的 GUID)

我希望问题很清楚,如果没有,我会尝试澄清,如果有问题,请发表评论..

谢谢,克里斯

4

3 回答 3

1

因为这是五年前的事,我希望你能找到答案。如果其他人对此感兴趣,最好的办法是在 ZIP 存档 (\docProps\custom.xml) 中创建一个新的自定义属性并将您的元数据存储在其中。最简单的方法是在 Word UI 中生成一个以查看它们是如何工作的,但您最终会在 DOCX 存档中得到一个 custom.xml,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
  <property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="test">
    <vt:lpwstr>chris</vt:lpwstr>
  </property>
</Properties>

这些工作的原理都记录在ECMA 376中,这是记录文件格式的标准。

据我所知,Word 不存储任何 GUID 来唯一标识文件。

于 2014-01-04T00:01:17.297 回答
1

从 Office 2013创建新文档时,MS Word 会生成唯一 ID (GUID) 。它将它放在 <w:settings> 元素内的文件“\word\settings.xml”中,作为“ docId ”名称。

例如在 MS Word 2016 中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:settings xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se">
    <w15:docId w15:val="{982A3D80-A23D-4148-8230-4160F3D87FF5}"/>
</w:settings>

请注意,制作文件副本时,MS Word 不会更改它。因此,如果创建每个新文件而不是从另一个文件复制,这是一种可靠的方法。

于 2019-08-20T08:10:50.290 回答
0

Acrobat/PDF 有类似的东西。查找Bates 编号,该编号用于通过输入唯一编号来识别文档。

您通常应该将其放在元数据部分(如果有)。或者,将自定义部分添加到保留映射的 docx 文件中(当然,保持在规范的范围内)。(我对 docx 格式不是很熟悉,所以你会弄明白的。)

于 2009-03-14T06:40:02.613 回答