poi 导出word,导出图片解决方法

    /**
	 * 写入图片
	 * @param document
	 * @param picName
	 * @param width
	 * @param height
	 * @param alignment 
	 */
	private void WriteImage(CustomXWPFDocument document, String picName, int width, int height, ParagraphAlignment alignment) {
		try {
			CustomXWPFDocument document= new CustomXWPFDocument();
			XWPFParagraph imgPara = document.createParagraph();
			imgPara.setAlignment(alignment);
			int format = XWPFDocument.PICTURE_TYPE_PNG;
			if(picName.endsWith(".emf")) format = XWPFDocument.PICTURE_TYPE_EMF;
			else if(picName.endsWith(".wmf")) format = XWPFDocument.PICTURE_TYPE_WMF;
			else if(picName.endsWith(".pict")) format = XWPFDocument.PICTURE_TYPE_PICT;
			else if(picName.endsWith(".jpeg") || picName.endsWith(".jpg")) format = XWPFDocument.PICTURE_TYPE_JPEG;
			else if(picName.endsWith(".png")) format = XWPFDocument.PICTURE_TYPE_PNG;
			else if(picName.endsWith(".dib")) format = XWPFDocument.PICTURE_TYPE_DIB;
			else if(picName.endsWith(".gif")) format = XWPFDocument.PICTURE_TYPE_GIF;
			else if(picName.endsWith(".tiff")) format = XWPFDocument.PICTURE_TYPE_TIFF;
			else if(picName.endsWith(".eps")) format = XWPFDocument.PICTURE_TYPE_EPS;
			else if(picName.endsWith(".bmp")) format = XWPFDocument.PICTURE_TYPE_BMP;
			else if(picName.endsWith(".wpg")) format = XWPFDocument.PICTURE_TYPE_WPG;
			XWPFRun stdMarkRun = imgPara.createRun();
			stdMarkRun.addBreak();

			String blipId = imgPara.getDocument().addPictureData(new FileInputStream(new File(picName)),format); 
			document.createPicture(blipId,document.getNextPicNameNumber(format),width,height, imgPara);

		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	*创建自定义Java类继承自XWPFDocument
	*/
	class CustomXWPFDocument extends XWPFDocument {  
	  public CustomXWPFDocument() {  
	    super();  
	  }  
	  
	  public CustomXWPFDocument(InputStream in) throws IOException {  
	    super(in);  
	  }  
	  
	  public CustomXWPFDocument(OPCPackage pkg) throws IOException {  
	    super(pkg);  
	  }  
	  
	  public void createPicture(String blipId, int id, int width, int height,  
	      XWPFParagraph paragraph) {  
	    final int EMU = 9525;  
	    width *= EMU;  
	    height *= EMU;  
	    // String blipId =  
    // getAllPictures().get(id).getPackageRelationship().getId();  
    if (paragraph == null) {  
      paragraph = createParagraph();  
    }  
    CTInline inline = paragraph.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=\"img_"  
        + id  
        + "\"/>"  
        + "            <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("docx_img_ " + id);  
    docPr.setDescr("docx Picture");  
  }  
  
  public void createPictureCxCy(String blipId, int id, long cx, long cy) {  
    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=\""  
        + cx  
        + "\" cy=\""  
        + cy  
        + "\"/>"  
        + "            </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(cx);  
    extent.setCy(cy);  
    CTNonVisualDrawingProps docPr = inline.addNewDocPr();  
    docPr.setId(id);  
    docPr.setName("docx_img_ " + id);  
    docPr.setDescr("docx Picture");  
  }  
}
时间: 2024-11-06 07:17:55

poi 导出word,导出图片解决方法的相关文章

Asp.net导出Excel乱码的解决方法

通过跟踪Asp.net服务器代码,没有乱码,然而导出Excel到浏览器后,打开时出现乱码. 解决方法是添加编码格式的前缀字节码:Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Response.Clear(); Response.AddHeader("content-disposition","attachment;filenam

[转]mysql导入导出数据中文乱码解决方法小结

本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 代码如下: mys

asp.net 导出excel 中文乱码解决方法 (转)

用我转载的上一篇文章 Asp.net中把DataTable或DataGrid导出为Excel 导出的文档,中文有乱码现象,其实要解决中文乱码很简单,设置一下字符集.如下: // 设置编码和附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312&

FreeMark对导出Word中图片的处理

当导出的Word中带有图片时,我们可以创建一个带有图片的word模板,并将其保存成xml文档.此时我们能看到这样一段代码: <w:binData w:name="wordml://03000001.png" xml:space="preserve">iVBORw0KGgo...此处省略base64编码...AASUVORK5CYIJ=</w:binData> <#--用于声明图片的base64编码,并对其命名 --><v:

mysql导入导出数据中文乱码解决方法小结

inux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 复制代码 代码如下: mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql 那么导入数据的时候也要使用--

BCP SQL导出EXCEL常见问题及解决方法;数据导出存储过程

一.'xp_cmdshell'的启用 SQL Server阻止了对组件'xp_cmdshell'的过程'sys.xp_cmdshell'的访问.因为此组件已作为此服务嚣安全配置的一部分而被关 闭.系统管理员可以通过使用sp_configure启用'xp_cmdshell'.有关启用'xp_cmdshell'的详细信息 解决方法: 1.通过SQL语句开启.[推荐此方法,因为在任何版本的SQL SERVER中都可以使用.]通过查询分析器,选择Master数据库,然后执行以下SQL内容: sp_con

poi 导出word,导出表格(复杂表格合并行列)解决方法

如下图:一个table表格,需要作为表格插入到word中: 1.首先对表格做拆分处理 代码如下: private String simplifyTable(String tableContent) { if(StringUtils.isEmpty(tableContent)) return null; Document tableDoc = Jsoup.parse(tableContent); Elements trElements = tableDoc.getElementsByTag("tr

Oracle11g用exp无法导出空表的解决方法

方法1: 设置deferred_segment_creation参数 SQL> show parameter deferred_segment_creation NAME TYPE VALUE -------------------------- ----------- ---------- deferred_segment_creation boolean TRUE SQL> alter system set deferred_segment_creation=false; 系统已更改. S

[转]mysql导出导入中文表解决方法

在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下. 在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下一.先针对utf8导出: (1)导出源数据库的所有表: 代码如下: mysqldump -u root -p密码 --socket=mysql.sock --default-character-set=utf8 --set-charset=utf8 --hex-blob --databases 数据库名 >