2015-05-07 3 views
1

Я пытаюсь создать список объектов слайдов pptx4j из библиотеки docx4j Java. Я загрузил пример кода из http://www.docx4java.org/, и я попытался его изменить, поэтому вместо печати одного слайда он может печатать столько, сколько захочу, добавив немного для цикла, который создает каждый слайд.Как я могу создать список объектов docx4j в java?

Это код для создания одного слайда:

SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart, 
      new PartName("/ppt/slides/slide1.xml")); 
Shape sample = ((Shape)XmlUtils.unmarshalString(SAMPLE_SHAPE, Context.jcPML)); 
slidePart.getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(sample); 

так я пытался делать для цикла, который повторяет это для каждого слайда, но я не знаю, как создавать объекты и добавлять их в массив , я попытался добавить объект непосредственно, но это дает мне ошибки, это мой для:

ArrayList<Object[]> lista =new ArrayList<>(); 
    Object[] diapositivas = new Object[3]; 
    for (int i=0;i<3;i++){  
     diapositivas[i] =(SlidePart) presentationMLPackage.createSlidePart(pp, layoutPart, 
     new PartName("/ppt/slides/slide[i+1].xml")); 
     Shape sample = ((Shape)XmlUtils.unmarshalString(SAMPLE_SHAPE, Context.jcPML)); 
     diapositivas[i].setJaxbElement(SlidePart.createSld()); 
     lista.add(diapositivas); 
    } 

я знаю, что я неудачу в чем-то основном здесь, но я не создал массивы объектов раньше, я попытался объявляя полный объект на каждую итерацию, но тогда я не мог изменить имя объекта для ea ch, чтобы он не работал.

это дает мне ошибку, не может найти символ для метода getJaxbElement() и когда я запускаю программу она дает мне эти ошибки в моем выходе:

ant -f "C:\\Documents and Settings\\Administrador\\Mis documentos\\NetBeansProjects\\JavaApplication2" -Dignore.failing.tests=true -Dnb.wait.for.caches=true -Dnb.internal.action.name=test test 
init: 
deps-jar: 
Updating property file: C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\built-jar.properties 
init: 
deps-clean: 
Updating property file: C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\built-clean.properties 
Deleting directory C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build 
clean: 
Created dir: C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\classes 
Created dir: C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\empty 
Created dir: C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\generated-sources\ap-source-output 
Compiling 7 source files to C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\build\classes 
C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\src\org\docx4j\samples\CreateHelloWorld.java:55: error: cannot find symbol 
         diapositivas[i].getJaxbElement().getCSld().getSpTree().getSpOrGrpSpOrGraphicFrame().add(sample); 
    symbol: method getJaxbElement() 
    location: class Object 
Note: Some input files use or override a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 
1 error 
C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\nbproject\build-impl.xml:923: The following error occurred while executing this line: 
C:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\JavaApplication2\nbproject\build-impl.xml:263: Compile failed; see the compiler error output for details. 
BUILD FAILED (total time: 7 seconds) 
+0

Размещение 'слайд [я + 1]' в 'строку PartName' не будет автоматически получить значение из array, потому что это просто еще одна строка, что касается Java. Чтобы создать строку с фактическим значением, выполните отдельные значения: '/ ppt/slides /" + slide [i + 1] + ".xml" '(если у вас есть массив с именем' slide'). – Vulcan

+0

Я этого не заметил. Также он дает мне не найти символьную ошибку для метода getJaxbElement(). Знает ли java, что diapositivas [i] является объектом «SlidePart»? Я попытался сделать его явным путем литья '(SlidePart)' в представлении 'diapositivas [i] = (SlidePart) presentationPackage.createSlidePart (pp, layoutPart, new PartName ("/ppt/slides/slide [i + 1] .xml ")) ;, но я не знаю, работает ли он –

+0

@ Vulcan делает java понимать, что это объект SlidePart? –

ответ

0

createSlidePart PresentationMLPackage является устаревшим. В соответствии с Javadoc вместо этого используйте метод addSlide MainPresentationPart.

В противном случае getJaxbElement(). GetCSld() вернет значение null, если вы не заполнили модель содержимого.

SlidePart содержит:

public static Sld createSld() throws JAXBException { 

    ObjectFactory factory = Context.getpmlObjectFactory(); 
    Sld sld = factory.createSld(); 
    sld.setCSld( 
      (CommonSlideData)XmlUtils.unmarshalString(COMMON_SLIDE_DATA, Context.jcPML, CommonSlideData.class)); 

    return sld;  
} 

так что вы можете использовать, чтобы

diapositivas[i].setJaxbElement(SlidePart.createSld()); 
+0

, что вы подразумеваете под заполнением модели контента? он работал хорошо с одним слайдом.

Я использовал 'diapositivas [i] .setJaxbElement (SlidePart.createSld()) ;, но он выбрасывает« Исключение в потоке »main« java.lang.RuntimeException: Некомпилируемый исходный код - Ошибочный тип sym: java.lang.Object. setJaxbElement \t at org.docx4j.samples.CreateHelloWorld.main (CreateHelloWorld.java:56) 'когда irun программа. –

+0

, пожалуйста, обновите свой вопрос с помощью вашего нового исходного кода. – JasonPlutext

+0

повторно заполняет модель контента: каждая часть XML JAXB содержит модель содержимого JAXB, изначально нулевую. Дополнительную информацию см. В документе «Начало работы с docx4j». – JasonPlutext

Смежные вопросы