2016-02-12 3 views
3

Я хочу использовать Apache POI для преобразования файлов с платформы * .fidus (Fidus Writer) в формат * .docx и наоборот.Добавить пользовательские (расширенные) свойства в docx и абзацы Apache POI

В файлах * .fidus есть некоторые свойства, которые мне нужно сохранить в качестве расширенных или настраиваемых свойств в файле * .docx, после чего я смогу их восстановить, когда я хочу преобразовать его обратно в * .fidus.

Таким образом, мне нравится знать, как я могу использовать класс CustomProperties для POI или что-то вроде этого, чтобы добавить некоторые свойства в файл docx. Также можно добавить пользовательские свойства (расширенные свойства) к абзацу в файлах docx с помощью POI?

Заранее спасибо.

ответ

3

С *.docx документов XML основой, мы должны использовать POIXMLProperties.CustomProperties см http://poi.apache.org/apidocs/org/apache/poi/POIXMLProperties.CustomProperties.html.

Пример:

import java.io.*; 
import org.apache.poi.*; 
import org.apache.poi.xwpf.usermodel.*; 

import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty; 

import java.util.GregorianCalendar; 

public class DocumentProperties { 

public static void main(String[] args) throws IOException { 

    XWPFDocument document = new XWPFDocument(new FileInputStream("This is a Test.docx")); 

    POIXMLProperties properties = document.getProperties(); 
    //http://poi.apache.org/apidocs/org/apache/poi/POIXMLProperties.html 

    //prints the core property Creator: 
    System.out.println(properties.getCoreProperties().getCreator()); 

    //prints the extendend property Application: 
    System.out.println(properties.getExtendedProperties().getApplication()); 

    //sets a custom property 
    POIXMLProperties.CustomProperties customproperties = properties.getCustomProperties(); 
    if (!customproperties.contains("Test")) { 
    customproperties.addProperty("Test", 123); 
    } 
    CTProperty ctproperty = customproperties.getProperty("Test"); 
    System.out.println(ctproperty); 
    System.out.println(ctproperty.getI4()); 

    //the above customproperties.addProperty() can only set boolean, double, integer or string properties 
    //the CTProperty contains more possibitities 
    if (!customproperties.contains("Test Date")) { 
    customproperties.addProperty("Test Date", 0); 
    ctproperty = customproperties.getProperty("Test Date"); 
    ctproperty.unsetI4(); 
    ctproperty.setFiletime(new GregorianCalendar(2016,1,13)); 
    } 
    ctproperty = customproperties.getProperty("Test Date"); 
    System.out.println(ctproperty); 
    System.out.println(ctproperty.getFiletime()); 


    FileOutputStream out = new FileOutputStream(new File("This is a Test.docx")); 
    document.write(out); 
} 
} 

POIXMLProperties.CustomProperties.addProperty() можно установить только логические, двойные, целые или строковые свойства, но лежащий в основе CTProperty содержит больше возможностей.

CTProperty см. http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/ooxml-schemas/1.1/org/openxmlformats/schemas/officeDocument/x2006/customProperties/CTProperty.java#CTProperty.