如何在java中使用apache poi更新docx文件的元数据?

时间:2013-11-06 10:36:34

标签: java apache-poi

我没有得到如何使用apache poi更新docx文件的元数据(标题,主题,作者等..)。 我使用apache poi尝试了一个doc文件:


     File poiFilesystem = new File(file_path1);

     /* Open the POI filesystem. */
     InputStream is = new FileInputStream(poiFilesystem);
    POIFSFileSystem poifs = new POIFSFileSystem(is);
     is.close();

     /* Read the summary information. */
     DirectoryEntry dir = poifs.getRoot();
     SummaryInformation si;
     try
     {
        DocumentEntry siEntry = (DocumentEntry)
             dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
         DocumentInputStream dis = new DocumentInputStream(siEntry);
         PropertySet ps = new PropertySet(dis);
         dis.close();
         si = new SummaryInformation(ps);
     }
     catch (FileNotFoundException ex)
     {
         /* There is no summary information yet. We have to create a new
         * one. */
         si = PropertySetFactory.newSummaryInformation();
     }


     si.setAuthor("xzy");
     System.out.println("Author changed to " + si.getAuthor() + ".");
    si.setSubject("mysubject");
    si.setTitle("mytitle");

1 个答案:

答案 0 :(得分:3)

下面使用POI-3.10。您可以使用PackageProperties设置一些元数据:

import java.util.Date;
import org.apache.poi.openxml4j.opc.*;
import org.apache.poi.openxml4j.util.Nullable;

class SetDOCXMetadata{
  public static void main(String[] args){
      try{
          OPCPackage opc = OPCPackage.open("metadata.docx");
          PackageProperties pp = opc.getPackageProperties();

          Nullable<String> foo = pp.getLastModifiedByProperty();
          System.out.println(foo.hasValue()?foo.getValue():"empty");
          //Set some properties
          pp.setCreatorProperty("M Kazarian");
          pp.setLastModifiedByProperty("M Kazarian " + System.currentTimeMillis());
          pp.setModifiedProperty(new Nullable<Date>(new Date()));
          pp.setTitleProperty("M Kazarian document");

          opc.close();
      } catch (Exception e) {}
  }
}