Docx4j article (#2714)
* add docx4j dependencies * Add image.jpg (docx4j) * add Docx4j example * Add docx4j test * Remove unused import * Fix typo (baeldung instead of baledung)
This commit is contained in:
parent
9e273b1474
commit
26508f3104
|
@ -601,6 +601,16 @@
|
||||||
<artifactId>wurmloch-crdt</artifactId>
|
<artifactId>wurmloch-crdt</artifactId>
|
||||||
<version>${crdt.version}</version>
|
<version>${crdt.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.docx4j</groupId>
|
||||||
|
<artifactId>docx4j</artifactId>
|
||||||
|
<version>3.3.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
<version>2.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
package com.baeldung.docx;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBElement;
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
import org.docx4j.dml.wordprocessingDrawing.Inline;
|
||||||
|
import org.docx4j.jaxb.Context;
|
||||||
|
import org.docx4j.model.table.TblFactory;
|
||||||
|
import org.docx4j.openpackaging.exceptions.Docx4JException;
|
||||||
|
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
|
||||||
|
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
|
||||||
|
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
|
||||||
|
import org.docx4j.wml.BooleanDefaultTrue;
|
||||||
|
import org.docx4j.wml.Color;
|
||||||
|
import org.docx4j.wml.Drawing;
|
||||||
|
import org.docx4j.wml.ObjectFactory;
|
||||||
|
import org.docx4j.wml.P;
|
||||||
|
import org.docx4j.wml.R;
|
||||||
|
import org.docx4j.wml.RPr;
|
||||||
|
import org.docx4j.wml.Tbl;
|
||||||
|
import org.docx4j.wml.Tc;
|
||||||
|
import org.docx4j.wml.Text;
|
||||||
|
import org.docx4j.wml.Tr;
|
||||||
|
|
||||||
|
public class Docx4jExample {
|
||||||
|
|
||||||
|
public void createDocumentPackage(String outputPath, String imagePath) throws Exception {
|
||||||
|
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
|
||||||
|
MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart();
|
||||||
|
mainDocumentPart.addStyledParagraphOfText("Title", "Hello World!");
|
||||||
|
mainDocumentPart.addParagraphOfText("Welcome To Baeldung!");
|
||||||
|
ObjectFactory factory = Context.getWmlObjectFactory();
|
||||||
|
P p = factory.createP();
|
||||||
|
R r = factory.createR();
|
||||||
|
Text t = factory.createText();
|
||||||
|
t.setValue("Welcome To Baeldung");
|
||||||
|
r.getContent().add(t);
|
||||||
|
p.getContent().add(r);
|
||||||
|
RPr rpr = factory.createRPr();
|
||||||
|
BooleanDefaultTrue b = new BooleanDefaultTrue();
|
||||||
|
rpr.setB(b);
|
||||||
|
rpr.setI(b);
|
||||||
|
rpr.setCaps(b);
|
||||||
|
Color red = factory.createColor();
|
||||||
|
red.setVal("green");
|
||||||
|
rpr.setColor(red);
|
||||||
|
r.setRPr(rpr);
|
||||||
|
mainDocumentPart.getContent().add(p);
|
||||||
|
|
||||||
|
File image = new File(imagePath);
|
||||||
|
byte[] fileContent = Files.readAllBytes(image.toPath());
|
||||||
|
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, fileContent);
|
||||||
|
Inline inline = imagePart.createImageInline("Baeldung Image", "Alt Text", 1, 2, false);
|
||||||
|
P Imageparagraph = addImageToParagraph(inline);
|
||||||
|
mainDocumentPart.getContent().add(Imageparagraph);
|
||||||
|
|
||||||
|
int writableWidthTwips = wordPackage.getDocumentModel().getSections().get(0).getPageDimensions()
|
||||||
|
.getWritableWidthTwips();
|
||||||
|
int columnNumber = 3;
|
||||||
|
Tbl tbl = TblFactory.createTable(3, 3, writableWidthTwips / columnNumber);
|
||||||
|
List<Object> rows = tbl.getContent();
|
||||||
|
for (Object row : rows) {
|
||||||
|
Tr tr = (Tr) row;
|
||||||
|
List<Object> cells = tr.getContent();
|
||||||
|
for (Object cell : cells) {
|
||||||
|
Tc td = (Tc) cell;
|
||||||
|
td.getContent().add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mainDocumentPart.getContent().add(tbl);
|
||||||
|
File exportFile = new File(outputPath);
|
||||||
|
wordPackage.save(exportFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isTextExist(String testText) throws Docx4JException, JAXBException {
|
||||||
|
File doc = new File("helloWorld.docx");
|
||||||
|
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc);
|
||||||
|
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
|
||||||
|
String textNodesXPath = "//w:t";
|
||||||
|
List<Object> paragraphs = mainDocumentPart.getJAXBNodesViaXPath(textNodesXPath, true);
|
||||||
|
for (Object obj : paragraphs) {
|
||||||
|
Text text = (Text) ((JAXBElement) obj).getValue();
|
||||||
|
String textValue = text.getValue();
|
||||||
|
if (textValue != null && textValue.contains(testText)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static P addImageToParagraph(Inline inline) {
|
||||||
|
ObjectFactory factory = new ObjectFactory();
|
||||||
|
P p = factory.createP();
|
||||||
|
R r = factory.createR();
|
||||||
|
p.getContent().add(r);
|
||||||
|
Drawing drawing = factory.createDrawing();
|
||||||
|
r.getContent().add(drawing);
|
||||||
|
drawing.getAnchorOrInline().add(inline);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.docx;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class Docx4jReadAndWriteTest {
|
||||||
|
|
||||||
|
String imagePath = "src/main/resources/image.jpg";
|
||||||
|
String outputPath = "helloWorld.docx";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenWordPackage_whenTextExist_thenReturnTrue() {
|
||||||
|
Docx4jExample docx4j = new Docx4jExample();
|
||||||
|
try {
|
||||||
|
docx4j.createDocumentPackage(outputPath, imagePath);
|
||||||
|
assertTrue(docx4j.isTextExist("Hello World!"));
|
||||||
|
assertTrue(!docx4j.isTextExist("InexistantText"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue