我正在尝试向现有文档中添加一些自定义属性:

HWPFDocument document = new HWPFDocument(new FileInputStream(sourceFile));
DocumentSummaryInformation docSumInf = document.getDocumentSummaryInformation();
CustomProperties customProperties = docSumInf.getCustomProperties();

CustomProperty singleProp = null;
//...
singleProp = new CustomProperty();
singleProp.setName(entry.getKey());
singleProp.setType(Variant.VT_LPWSTR);
singleProp.setValue((String) entry.getValue());
//..

customProperties.put(entry.getKey(), singleProp);
docSumInf.setCustomProperties(customProperties);
return document;


但是,属性永远不会将其存储到文件中。我尝试过了

document.getDocumentSummaryInformation().getCustomProperties().putAll(customProperties);


我也试过

document.getDocumentSummaryInformation().getCustomProperties().put(entry.getKey(), singleProp);
System.out.println(document.getDocumentSummaryInformation().getCustomProperties().size() + " Elemente in Map");


在一个循环中。印刷的尺寸始终是一。

第一次尝试(docSumInf.setCustomProperties(customProperties);)时,我先打印出customProperties,然后再将其设置为docSumInf。在将所有新属性设置为文档摘要后,这些地方就会丢失。

我看不到我想念的东西...

最佳答案

entry.getKey() = null


entry.getKey()对于地图中的所有CustomProperty具有公共值。

因此,CustomProperties映射中只有一个元素。

您需要在此处设置非null值

singleProp.setName(entry.getKey());



  CustomProperty类表示文档摘要信息流中的自定义属性。与常规属性的区别在于自定义属性具有可选名称。如果名称不为null,它将保留在该节的字典中。

07-24 09:16