Предотвратить сохранение в Word 2010 o:gfxdata base64 или VML с uuencoded?

Я работаю с файлами.docx, содержащими несколько рисунков с вставленными изображениями и некоторые линии и стрелки, нарисованные в Word 2010. Я использую формат 2010 без режима совместимости.

Слово вставляет o:gfxdata атрибут в каждом v:shape а также v:group элемент и заполняет его с ascii что-то закодировано. Из того, что я прочитал, это может быть копия VML, описывающая v:shape или же v:group, Я не знаю, просто ли я не знаю, что искать, но я не могу определить, для чего эти данные, поскольку их удаление никак не влияет на мою способность читать или редактировать документ в Word 2003, 2007 или 2010,

Это увеличивает документ.xml почти вдвое (по-видимому) необходимого размера. Это значительно замедляет обработку OpenTBS, поэтому я хотел бы удалить ее, если это возможно. Кто-нибудь знает, как Word 2010 прекратить сохранение этих дополнительных данных? Или для чего это? Я действительно изо всех сил пытался найти любую документацию по этому вопросу помимо этого поста.

Редактировать:

Вот пример.docx. Размер файла document.xml составляет ~141 КБ, а OpenTBS в среднем требуется 10,35 секунды для создания файла, который включает это в качестве субшаблона 21 раз. Если я удаляю все атрибуты o:ogfxdata, размер файла уменьшается до ~37 КБ, а OpenTBS занимает всего 2,99 секунды для создания того же файла.

Изменить 2:

После дальнейшего изучения кажется, что удаление o:gfxdata может привести к тому, что Word 2003 с установленным более старым пакетом совместимости возражает против файла со следующей ошибкой:

"Это предварительная версия пакета обеспечения совместимости, которая может открывать только файлы предварительной версии Office 2007. Хотите проверить наличие более новой версии пакета обеспечения совместимости?"

Мне удалось открыть файл, установив новый пакет совместимости - хотя он запрашивает у пользователя информацию о несовместимости и преобразует файл, чтобы открыть его. Это не повредит мой файл, но это то, что нужно посмотреть.

1 ответ

Решение

Атрибут o:ogfxdata плохо документирован в сети. Согласно вашим исследованиям, это какая-то дополнительная информация о совместимости.

Вы можете удалить эти атрибуты в своем шаблоне, используя OpenTBS. Очистку можно выполнить один раз для вашего шаблона без слияния, а затем сохранить очищенный шаблон как новый шаблон. Или вы можете выполнять очистку каждый раз, когда открываете шаблон.

Очистка файла DOCX:

while ($x = clsTbsXmlLoc::FindStartTagHavingAtt($TBS->Source, 'o:gfxdata', 0) ) {
  $x->ReplaceAtt('o:gfxdata', '');
  $TBS->Source = str_replace(' o:gfxdata=""', '', $TBS->Source);
}

Обратите внимание, что класс clsTbsXmlLoc предоставляется OpenTBS и не имеет документов. Код должен работать начиная с OpenTBS 1.8.0. (которая в настоящее время находится в стабильной бета-версии).

Я заметил, что так как атрибуты o:gfxdata удаляются, они не возвращаются сразу же после редактирования документа.

Другие вопросы по тегам