我要求我有一个Word(.DOCX)文件。通过使用java程序,我需要使用DOCX4J将图像放在文档中的某个位置。任何人都可以帮助我!!!
我正在尝试使用以下代码...
final String XPATH = "//w:t";
String image_Path = "D:\\Temp\\ex.png";
String template_Path = "D:\\Temp\\example.docx";
WordprocessingMLPackage package = WordprocessingMLPackage.createPackage();
List texts = package.getMainDocumentPart().getJAXBNodesViaXPath(XPATH, true);
for (Object obj : texts) {
Text text = (Text) ((JAXBElement) obj).getValue();
ObjectFactory factory = new ObjectFactory();
P paragraph = factory.createP();
R run = factory.createR();
paragraph.getContent().add(run);
Drawing drawing = factory.createDrawing();
run.getContent().add(drawing);
drawing.getAnchorOrInline().add(image_Path);
package.getMainDocumentPart().addObject(paragraph);
package.save(new java.io.File("D:\\Temp\\example.docx"));here
答案 0 :(得分:2)
添加图像比添加空的Drawing对象更多。查看并了解docx4j ImageAdd sample。
您发布的代码看起来就像您只是复制/粘贴了一些内容而没有尝试理解您在做什么。我这样说是因为你正在迭代一堆XPath结果,而没有对它们做任何事情。
答案 1 :(得分:2)
您只是使用该代码将图像附加到文档的末尾。如果您需要在文档中的某个位置,您需要处理在哪里(例如,您可能使用MainDocumentPart.getJAXBNodesViaXPath()
找到特定的P节点),然后只需在该索引处插入新内容'在文件中如此:
package.getMainDocumentPart().getContent().add(index, imageParagraph);
(您可以使用类似MainDocumentPart.getContent().indexOf(oldParagraph)
的内容来推导'index'的值,并且可能还希望删除您找到的节点,这可以通过remove()
调用来实现。