Обновление значений пользовательских свойств в документе Word с использованием Java

Я не могу обновить значение пользовательского свойства в текстовом документе с помощью java.

У меня есть текстовый документ, который содержит пользовательское свойство со значением «стек». Используя java, я хочу изменить это значение на «переполнение». Я использовал два подхода.

1) Использование Apache POI

Я установил org.apache.poi.hpsf.CustomProperties в org.apache.poi.hpsf.DocumentSummaryInformation и записал его в POIFSFileSystem.

Он обновляет значение в таблице customproperties слова. Но не обновляет значение для этого соответствующего свойства в документе. После открытия документа мне нужно вручную обновить документ, чтобы обновить это значение.

2) Разберите документ по символам и используйте коды полей DC3, DC4 и NAK, чтобы определить расположение пользовательских свойств. Замените существующее значение новым значением.

Теперь сгенерированный документ содержит новые значения. Но проблема здесь в том, что если длина старого значения и нового значения различаются, документ будет поврежден. Я убедился, что логика достаточно хороша.

Любая помощь будет оценена по достоинству.


person Joseph Kulandai    schedule 03.02.2010    source источник


Ответы (1)


Чтобы обновить подход, который я использовал для решения проблемы:

Использование документа Office 2007 (docx) в качестве шаблона стало проще. Это не что иное, как почтовый документ. Вы можете открыть его с помощью вашего zip-приложения (winzip/7zip), и вы можете найти в нем множество xml-файлов. document.xml содержит содержимое, styles.xml содержит информацию о форматировании и так далее.

Во время выполнения я разархивировал документ и проанализировал document.xml, затем использовал dom и обновил динамический контент. Пользовательские свойства доступны в отдельном XML-файле.

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

Не использовать apache-poi сейчас.

person Joseph Kulandai    schedule 11.02.2010