Quantcast
Channel: Java Programming Forum - Learn Java Programming - Apache POI
Viewing all articles
Browse latest Browse all 120

Add image to WORD in header doc or docx

$
0
0
Hi everyone
I have the following 2 classes which add an image to the body of a word document.
Now I need to add an image but to the header.
Please provide me with the solution.
Thanks all!
I have attached the image of the libraries I used apache poi 3.10
And the image of the error when I open the word document when I try to add the image
Class 1:
Code:



import java.io.*;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.*;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;

public class ImagesDoc {
    public static void main(String[] args) throws IOException,
                                                  InvalidFormatException {
        String raiz = "C:\\Users\\diflores\\Desktop\\";
        CustomXWPFDocument document = new CustomXWPFDocument(new FileInputStream(new File(raiz+"doc1.docx")));
        FileOutputStream fos = new FileOutputStream(new File(raiz+"doc2.doc"));
       
      XWPFHeaderFooterPolicy policy = document.getHeaderFooterPolicy();
      if (policy.getDefaultHeader() == null && policy.getFirstPageHeader() == null
            && policy.getDefaultFooter() == null) {
        // Need to create some new headers
        // The easy way, gives a single empty paragraph
        XWPFHeader headerD = policy.createHeader(policy.DEFAULT);
        //headerD.getParagraphs().get(0).createRun().setText("Hello Header World!");//this works I NEED to ADD AN IMAGE
        /*headerD.getParagraphs().get(0).createRun().addPicture(new FileInputStream(new File(raiz+"Captura.png")),
                                                              Document.PICTURE_TYPE_PNG, "Captura.png", 426, 389);*///ERROR HERE
        // Or the full control way
          CTP ctP1 = CTP.Factory.newInstance();
          CTR ctR1 = ctP1.addNewR();
          CTText t = ctR1.addNewT();
          t.setStringValue("Paragraph in header");

          XWPFParagraph p1 = new XWPFParagraph(ctP1, document);
          XWPFParagraph[] pars = new XWPFParagraph[1];
          pars[0] = p1;

          policy.createHeader(policy.FIRST, pars);
      } else {
        // Already has a header, change it
      }
     
        String id = document.addPictureData(new FileInputStream(new File(raiz+"Captura.png")),
                                            Document.PICTURE_TYPE_PNG);
        document.createPicture(id,document.getNextPicNameNumber(Document.PICTURE_TYPE_PNG),
                              426, 389);//W,H
        document.write(fos);
        fos.flush();
        fos.close();
    }
}


//second class

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

Attached Images

Viewing all articles
Browse latest Browse all 120

Latest Images

Trending Articles



Latest Images