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>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										106
									
								
								libraries/src/main/java/com/baeldung/docx/Docx4jExample.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								libraries/src/main/java/com/baeldung/docx/Docx4jExample.java
									
									
									
									
									
										Normal file
									
								
							@ -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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								libraries/src/main/resources/image.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								libraries/src/main/resources/image.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user