how to add a picture to a .docx document with Apache POI XWPF in java

前端 未结 6 606
小蘑菇
小蘑菇 2020-11-30 08:32

I\'ve created a simple docx-Document, using Java POI 3.7. XWPF. Then, I added a picture by using the Method XWPFDocument.addpicture(byte[] arg0, int arg1).

6条回答
  •  有刺的猬
    2020-11-30 08:51

    I have used docx4j and found it to be working.I tried with POI but not able to make it work.Please find the code for using docx4j.

    public static void main(String[] args) throws Exception {
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        //wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Title", "Hello World");
        //wordMLPackage.getMainDocumentPart().addParagraphOfText("Text");
         java.io.InputStream is = new java.io.FileInputStream("path\\to\\images.jpg");
    // commons-io.jar
         byte[] bytes = IOUtils.toByteArray(is);
         String filenameHint = null;
         String altText = null;
         int id1 = 0;
         int id2 = 1;
         org.docx4j.wml.P p = newImage( wordMLPackage, bytes,filenameHint, altText,id1, id2,6000  );
         // Now add our p to the document
         wordMLPackage.getMainDocumentPart().addObject(p);
         wordMLPackage.save(new java.io.File("helloworld.docx") );
         is.close();
    }
    
    
    
    public static org.docx4j.wml.P newImage( WordprocessingMLPackage wordMLPackage,
            byte[] bytes,
            String filenameHint, String altText, 
            int id1, int id2, long cx) throws Exception {
    
            BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
    
            Inline inline = imagePart.createImageInline(filenameHint, altText,id1, id2, cx,false);
    
        // Now add the inline in w:p/w:r/w:drawing
            org.docx4j.wml.ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
            org.docx4j.wml.P  p = factory.createP();
            org.docx4j.wml.R  run = factory.createR();             
            p.getContent().add(run);       
            org.docx4j.wml.Drawing drawing = factory.createDrawing();               
            run.getContent().add(drawing);               
            drawing.getAnchorOrInline().add(inline);
    
            return p;
    

    }

提交回复
热议问题