POIXMLProperties props = workbook.getProperties();
- /*
- * Extended properties are a predefined set of metadata properties
- * that are specifically applicable to Office Open XML documents.
- * Extended properties consist of 24 simple properties and 3 complex properties stored in the
- * part targeted by the relationship of type
- */
+ /*
+ * Extended properties are a predefined set of metadata properties
+ * that are specifically applicable to Office Open XML documents.
+ * Extended properties consist of 24 simple properties and 3 complex properties stored in the
+ * part targeted by the relationship of type
+ */
POIXMLProperties.ExtendedProperties ext = props.getExtendedProperties();
ext.getUnderlyingProperties().setCompany("Apache Software Foundation");
ext.getUnderlyingProperties().setTemplate("XSSF");
- /*
- * Custom properties enable users to define custom metadata properties.
- */
+ /*
+ * Custom properties enable users to define custom metadata properties.
+ */
POIXMLProperties.CustomProperties cust = props.getCustomProperties();
cust.addProperty("Author", "John Smith");
public static final String FORMAT_ID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
private org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props;
+ private Integer lastPid = null;
+
private CustomProperties(org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props) {
this.props = props;
}
* @return next property id starting with 2
*/
protected int nextPid() {
+ int propid = lastPid == null ? getLastPid() : lastPid;
+ int nextid = propid + 1;
+ this.lastPid = nextid;
+ return nextid;
+ }
+
+ /**
+ * Find the highest Pid in use
+ *
+ * @return the highest Pid in use in the property set; returns 1 if no properties are set
+ */
+ protected int getLastPid() {
int propid = 1;
for(CTProperty p : props.getProperties().getPropertyList()) {
if(p.getPid() > propid) propid = p.getPid();
}
- return propid + 1;
+ return propid;
}
/**
}
}
+ @Test
+ public void testAddProperty() throws IOException {
+ try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("documentProperties.docx")) {
+ POIXMLProperties.CustomProperties cps = doc.getProperties().getCustomProperties();
+ assertEquals(1, cps.getLastPid());
+ cps.addProperty("prop1", "abc");
+ assertEquals(2, cps.getLastPid());
+ assertEquals(2, cps.getProperty("prop1").getPid());
+ assertEquals("abc", cps.getProperty("prop1").getLpwstr());
+ }
+ }
+
@Test
public void testBug60977() throws IOException {
public void testCustomProperties() throws Exception {
try (InputStream is = _samples.openResourceAsStream("TestMickey.doc");
POIFSFileSystem fs = new POIFSFileSystem(is);
- HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs)) {
+ HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs)) {
+
// Custom properties are part of the document info stream
String dinfText = ext.getDocumentSummaryInformationText();
assertContains(dinfText, "Client = sample client");