首先,我想指出apache poi-
link提供的示例,即正确的方法是
doc.createParagraph().createRun().addPicture(new FileInputStream(imgFile), format, imgFile, Units.toEMU(200), Units.toEMU(200));
但是,仍然存在一个现有错误,在执行上述语句后,该.docx文件将变得不可读。可能很快会解决,在这种情况下,上述声明将起作用。同时,有一种解决方法。
首先,生成没有任何图片的docx文件。然后将此类添加
CustomXWPFdocument到您的包中。
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 CustomXWPFdocument extends XWPFdocument{ public CustomXWPFdocument(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"); }}然后,通过添加图片来创建更新的文档,如下所示:-
CustomXWPFdocument document = new CustomXWPFdocument(new FileInputStream(new File("C:\Users\Avarice\Desktop\doc1.docx"))); FileOutputStream fos = new FileOutputStream(new File("C:\Users\Avarice\Desktop\doc2.docx")); String id = document.addPictureData(new FileInputStream(new File("C:\Users\Avarice\Desktop\thumbnail.jpg")), document.PICTURE_TYPE_JPEG); document.createPicture(id,document.getNextPicNameNumber(document.PICTURE_TYPE_JPEG), 64, 64); document.write(fos); fos.flush(); fos.close();您还应该在构建路径中包含以下jar:
poi-ooxml-schemas
xmlbeans
dom4j



