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

前端 未结 6 625
小蘑菇
小蘑菇 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:56

    Because XWPFRun.addPicture does not work (it damage xdoc file) i manage to picture like this:

        private void addPicture(final String fileName, final int id, int width, int height, final XWPFRun run)
    {
        FileInputStream fileInputStream = null;
    
        try
        {
            fileInputStream = new FileInputStream("/home/maq/ebworkspace/TeamForge_Tools/" + fileName);
            final String blipId = run.getDocument().addPictureData(fileInputStream, Document.PICTURE_TYPE_JPEG);
    
            final int EMU = 9525;
            width *= EMU;
            height *= EMU;
            //String blipId = getAllPictures().get(id).getPackageRelationship().getId();
    
            final CTInline inline = run.getCTR().addNewDrawing().addNewInline();
    
            final String picXml = "" + ""
                    + "   " + "      "
                    + "         " + "            "
                    + "            "
                    + "         "
                    + "         "
                    + "            "
                    + "            "
                    + "               "
                    + "            "
                    + "         "
                    + "         "
                    + "            "
                    + "               "
                    + "               "
                    + "            "
                    + "            "
                    + "               "
                    + "            "
                    + "         "
                    + "      " + "   " + "";
    
            //CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData();
            XmlToken xmlToken = null;
            xmlToken = XmlToken.Factory.parse(picXml);
            inline.set(xmlToken);
            //graphicData.set(xmlToken);
    
            inline.setDistT(0);
            inline.setDistB(0);
            inline.setDistL(0);
            inline.setDistR(0);
    
            final CTPositiveSize2D extent = inline.addNewExtent();
            extent.setCx(width);
            extent.setCy(height);
    
            final CTNonVisualDrawingProps docPr = inline.addNewDocPr();
            docPr.setId(id);
            docPr.setName("Picture " + id);
            docPr.setDescr("Generated");
        }
        catch (final Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            //close streams 
            if (fileInputStream != null)
            {
                try
                {
                    fileInputStream.close();
                }
                catch (final IOException ioEx)
                {
                    //can be ignored
                }
            }
        }
    
    }
    

    And running example:

     addPicture(filePath, xdoc.getNextPicNameNumber(Document.PICTURE_TYPE_JPEG), 100, 50, xRun);
    

提交回复
热议问题