Лучшее место для уникального идентификатора в DOCX (Open XML WordprocessingDocument) - PullRequest
7 голосов
/ 14 марта 2009

Я ищу способ идентифицировать файлы DOCX, если они перемещены или переименованы. Причина очевидна, я играю с Open XML SDK, собирая средство проверки гиперссылок.

Отлично работает, по крайней мере он может добавлять или обновлять гиперссылки в документе.

Проблема, однако, если я переименую внешний файл (source.docx + target.docx в targetB.docx), ссылка будет разорвана. Я могу найти неработающие ссылки (просто проверяя, находится ли связанный файл на своем месте).

Но я хочу больше. Я хочу иметь возможность восстановить эти потерянные ссылки путем поиска всех документов в каталоге (docx) и сканирования, если они являются «целью». Самым простым способом должен быть GUID, хранящийся где-то в свойствах документа, который не изменится, если документ переименован или отредактирован (контрольная сумма неприменима).

Затем я создаю отдельный список ссылок и соответствующих идентификаторов, и, если какой-либо документ переименовывается, я просто обновляю ссылку. Я надеюсь, что концепция ясна.

Итак, есть несколько основных вопросов:

  • Есть ли "лучшая практика" для хранения эта «пользовательская информация» в Open XML-документ
  • WordProcessingDocument (DOCX) уже создать уникальный идентификатор словом
  • Где бы вы сохранили отображение (GUID цели гиперссылки)

Я надеюсь, что вопрос ясен, если не пытаюсь прояснить, просто прокомментируйте, если вопросы ..

Спасибо, Chris

Ответы [ 2 ]

1 голос
/ 04 января 2014

Как это было пять лет назад, я надеюсь, что вы нашли ответ. Если кому-то еще это интересно, лучше всего создать новое пользовательское свойство в ZIP-архиве (\ docProps \ custom.xml) и сохранить в нем свои метаданные. Проще всего будет сгенерировать один в пользовательском интерфейсе Word, чтобы увидеть, как они работают, но в итоге вы получите файл custom.xml внутри архива DOCX, который выглядит примерно так:

<?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 для однозначной идентификации файла.

0 голосов
/ 14 марта 2009

В Acrobat / PDF есть что-то похожее. Посмотрите Нумерация Бейтса , которая используется для идентификации документов путем ввода номера unqiue.

Обычно вы должны поместить это в раздел метаданных, если таковые имеются. Или добавьте пользовательскую часть в файл docx, который сохраняет отображение (конечно, оставаясь в пределах спецификации). (Я не очень знаком с форматом docx, поэтому вам придется это выяснить.)

...