Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中创建docx4j对象列表?_Java_Arrays_Arraylist_Docx4j - Fatal编程技术网

如何在java中创建docx4j对象列表?

如何在java中创建docx4j对象列表?,java,arrays,arraylist,docx4j,Java,Arrays,Arraylist,Docx4j,我试图从Java的docx4j库中创建pptx4j幻灯片的对象列表。我从下载了一个示例代码,并尝试对其进行修改,这样就可以通过添加一个创建每张幻灯片的for循环来打印任意多张幻灯片,而不是打印一张幻灯片 这是创建一张幻灯片的代码: SlidePart slidePart = presentationMLPackage.createSlidePart(pp, layoutPart, new PartName("/ppt/slides/slide1.xml")); Shap

我试图从Java的docx4j库中创建pptx4j幻灯片的对象列表。我从下载了一个示例代码,并尝试对其进行修改,这样就可以通过添加一个创建每张幻灯片的for循环来打印任意多张幻灯片,而不是打印一张幻灯片

这是创建一张幻灯片的代码:

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);
所以我试着做一个for循环,在每张幻灯片上重复这个过程,但我不知道如何创建对象并将它们添加到数组中,我尝试直接添加对象,但它会给我错误,这是我的for:

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);
     }

PresentationMLPackage的createSlidePart已弃用。根据Javadoc,使用MainPresentationPart的addSlide方法代替

除此之外,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() );

slide[i+1]
放入
PartName
字符串不会自动从数组中获取值,因为就Java而言,它只是另一个字符串。若要创建具有实际值的字符串,请指定单独的值:
“/ppt/slides/”+slide[i+1]+.xml”
(假设您有一个名为
slide
)的数组。我没有注意到这一点。它还为方法getJaxbElement()提供了一个找不到符号错误。java是否理解dipositivas[i]是一个
SlidePart
对象?我试图通过在
diapositivas[i]=(SlidePart)presentationMLPackage.createSlidePart(pp,layoutPart,newpartname(“/ppt/slides/slide[i+1].xml”))中强制转换
(SlidePart)
来明确它但我不知道它是否works@Vulcanjava理解它是一个SlidePart对象吗?“给我错误”通常没有帮助。您应该发布您的异常类型和/或StackTrace。如果您使用IDE(例如Eclipse),您可能会发现生活会更轻松。这会提醒您生成错误。您键入了吗?填充内容模型是什么意思?一张幻灯片效果很好。

我使用了
diapositivas[I].setJaxbElement(SlidePart.createSld())但它在线程“main”java.lang.RuntimeException:不可编译的源代码中抛出
异常-错误的符号类型:java.lang.Object.setJaxbElement位于org.docx4j.samples.CreateHelloWorld.main(CreateHelloWorld.java:56)
启动程序时。请使用新的源代码更新您的问题重新填充内容模型:每个JAXB XML部分都包含一个JAXB内容模型,最初为空。有关更多信息,请参阅docx4j的入门文档。
diapositivas[i].setJaxbElement( SlidePart.createSld() );