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> | ||||
|             <version>${crdt.version}</version> | ||||
|         </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> | ||||
|     <repositories> | ||||
|         <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