利用poi向word里粘贴图片

来源:互联网 发布:知乎邀请没有回答 编辑:程序博客网 时间:2024/05/01 00:58
import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.xmlbeans.XmlException;import org.apache.xmlbeans.XmlToken;import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;import java.io.IOException;import java.io.InputStream;public class PictureToWord extends XWPFDocument {public PictureToWord() {super();}public PictureToWord(OPCPackage opcPackage) throws IOException {super(opcPackage);}    public PictureToWord(InputStream in) throws IOException {        super(in);    }    public void createPicture(String blipId,int id, int width, int height) {        final int EMU = 9525;        width *= EMU;        height *= EMU;        //String blipId = getAllPictures().get(id).getPackageRelationship().getId();                CTInline inline = createParagraph().createRun().getCTR().addNewDrawing().addNewInline();        String picXml = "" +                "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" +                "   <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" +                "      <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" +                "         <pic:nvPicPr>" +                "            <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>" +                "            <pic:cNvPicPr/>" +                "         </pic:nvPicPr>" +                "         <pic:blipFill>" +                "            <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" +                "            <a:stretch>" +                "               <a:fillRect/>" +                "            </a:stretch>" +                "         </pic:blipFill>" +                "         <pic:spPr>" +                "            <a:xfrm>" +                "               <a:off x=\"0\" y=\"0\"/>" +                "               <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" +                              "            </a:xfrm>" +                "            <a:prstGeom prst=\"rect\">" +                "               <a:avLst/>" +                "            </a:prstGeom>" +                "         </pic:spPr>" +                "      </pic:pic>" +                "   </a:graphicData>" +                "</a:graphic>";        //CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData();        XmlToken xmlToken = null;        try {            xmlToken = XmlToken.Factory.parse(picXml);        } catch(XmlException xe) {            xe.printStackTrace();        }        inline.set(xmlToken);        //graphicData.set(xmlToken);        inline.setDistT(0);        inline.setDistB(0);        inline.setDistL(0);        inline.setDistR(0);        CTPositiveSize2D extent = inline.addNewExtent();        extent.setCx(width);        extent.setCy(height);        CTNonVisualDrawingProps docPr = inline.addNewDocPr();        docPr.setId(id);        docPr.setName("Picture " + id);        docPr.setDescr("Generated");    }}//调用的时候PictureToWord toWord = new PictureToWord();int width=550;int height = 350;String picId = toWord.addPictureData(new FileInputStream(path), XWPFDocument.PICTURE_TYPE_JPEG);toWord.createPicture(picId, toWord.getNextPicNameNumber(XWPFDocument.PICTURE_TYPE_JPEG), width, height);XWPFRun runOne1 =  toWord.createParagraph().createRun();runOne1.setText(text);runOne1.setBold(false);runOne1.setTextPosition(50);runOne1.setFontSize(10);


 

0 0