package com.report;
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 CustomXWPFDocument extends XWPFDocument {
	public CustomXWPFDocument(InputStream in) throws IOException {
		super(in);
	}
	public static void main(String[] args) {
		//
	}
	/**
	 * 
	 */
	public CustomXWPFDocument() {
		super();
		// TODO Auto-generated constructor stub
	}
	/**
	 * @param pkg
	 * @throws IOException
	 */
	public CustomXWPFDocument(OPCPackage pkg) throws IOException {
		super(pkg);
		// TODO Auto-generated constructor stub
	}
	
	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 = "" +
				"&lt;a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"&gt;" +
				"   &lt;a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"&gt;" +
				"      &lt;pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"&gt;" +
				"         &lt;pic:nvPicPr&gt;" +
				"            &lt;pic:cNvPr id=\"" + id + "\" name=\"Generated\"/&gt;" +
				"            &lt;pic:cNvPicPr/&gt;" +
				"         &lt;/pic:nvPicPr&gt;" +
				"         &lt;pic:blipFill&gt;" +
				"            &lt;a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/&gt;" +
				"            &lt;a:stretch&gt;" +
				"               &lt;a:fillRect/&gt;" +
				"            &lt;/a:stretch&gt;" +
				"         &lt;/pic:blipFill&gt;" +
				"         &lt;pic:spPr&gt;" +
				"            &lt;a:xfrm&gt;" +
				"               &lt;a:off x=\"0\" y=\"0\"/&gt;" +
				"               &lt;a:ext cx=\"" + width + "\" cy=\"" + height + "\"/&gt;" +
				"            &lt;/a:xfrm&gt;" +
				"            &lt;a:prstGeom prst=\"rect\"&gt;" +
				"               &lt;a:avLst/&gt;" +
				"            &lt;/a:prstGeom&gt;" +
				"         &lt;/pic:spPr&gt;" +
				"      &lt;/pic:pic&gt;" +
				"   &lt;/a:graphicData&gt;" +
				"&lt;/a:graphic&gt;";

		//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");
	}
}