如何在java中创建docx4j对象列表?
我试图从Java的docx4j库中创建pptx4j幻灯片的对象列表。我从下载了一个示例代码,并尝试对其进行修改,这样就可以通过添加一个创建每张幻灯片的for循环来打印任意多张幻灯片,而不是打印一张幻灯片 这是创建一张幻灯片的代码:如何在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
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() );