2015-03-11 4 views
0

У меня есть требование, когда мне нужно заменить некоторый текст в файле Powerpoint во время выполнения. (Файл Powerpoint используется в качестве шаблона с некоторыми заполнителями/токами, например {{USER_NAME}}) Я пробовал использовать POI, но не повезло. Я ссылался на другие ссылки на форуме и начинал с «docx4j», но не смог выйти за пределы точки, и документация не очень ясна (по крайней мере для меня). Вот что я сделал до сих пор: получил PPTX загружен «PresentationMLPackage» Получили «MainPresentationPart» и слайды (с помощью mainPresentationPart.getSlide (п))Как заменить текст в файле Powerpoint с помощью Java

Но я не уверен в следующем шаги отсюда (или, если это правильный подход, в первую очередь).

Любые предложения будут очень благодарны.

спасибо, -Vini

ответ

0
SlidePart extends JaxbPmlPart<Sld> 
JaxbPmlPart<E> extends JaxbXmlPartXPathAware<E> 
JaxbXmlPartXPathAware<E> extends JaxbXmlPart<E> 

JaxbXmlPart содержит:

/** 
* unmarshallFromTemplate. Where jaxbElement has not been 
* unmarshalled yet, this is more efficient (3 times 
* faster, in some testing) than calling 
* XmlUtils.marshaltoString directly, since it avoids 
* some JAXB processing. 
* 
* @param mappings 
* @throws JAXBException 
* @throws Docx4JException 
* 
* @since 3.0.0 
*/ 
public void variableReplace(java.util.HashMap<String, String> mappings) throws JAXBException, Docx4JException { 

    // Get the contents as a string 
    String wmlTemplateString = null; 
    if (jaxbElement==null) { 

     PartStore partStore = this.getPackage().getSourcePartStore(); 
     String name = this.getPartName().getName(); 
     InputStream is = partStore.loadPart( 
       name.substring(1)); 
     if (is==null) { 
      log.warn(name + " missing from part store"); 
      throw new Docx4JException(name + " missing from part store"); 
     } else { 
      log.info("Lazily unmarshalling " + name); 

      // This seems to be about 5% faster than the Scanner approach 
      try { 
       wmlTemplateString = IOUtils.toString(is, "UTF-8"); 
      } catch (IOException e) { 
       throw new Docx4JException(e.getMessage(), e); 
      } 
     } 

    } else { 

     wmlTemplateString = XmlUtils.marshaltoString(jaxbElement, true, false, jc); 

    } 

    // Do the replacement 
    jaxbElement = (E)XmlUtils.unwrap(
         XmlUtils.unmarshallFromTemplate(wmlTemplateString, mappings, jc)); 

} 

Так как только вы слайд часть, вы можете вызвать variableReplace на нем. Вам понадобятся переменные в формате, ожидаемом от XmlUtils.unmarshallFromTemplate

+0

Спасибо, тонна Jason – Vini