How i can add an Image as my header in a word document using Apache POI

落花浮王杯 提交于 2019-12-11 11:08:47

问题


I am trying create an word document using Apache POI which will contains an image as its header and some information ,i.e paragraph as its footer.I am able to create the header footer with paragraph only.But i need to add the image to the header which i can not manage,I am posting my code here which is correctly giving the result as the header footer both with the paragraph.Somebody please help me to reach this,

public class CreateWordDoc {

public static void main (String[] args) throws Exception {


    //XWPFDocument document = new XWPFDocument();
    CustomXWPFDocument document = new CustomXWPFDocument(new FileInputStream(new File("D:\\test.docx")));
    CTP ctp = CTP.Factory.newInstance();
    CTR ctr = ctp.addNewR();
    CTRPr rpr = ctr.addNewRPr();
    CTText textt = ctr.addNewT();
    textt.setStringValue( " Client Service Contact:Tomas.Layrisse@mshgroupconsulting.com" );
    XWPFParagraph codePara = new XWPFParagraph( ctp, document );
    XWPFParagraph imagePara = new XWPFParagraph(ctp, document);

    XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
    newparagraphs[0] = codePara;
    XWPFParagraph[] imaheparagraphs = new XWPFParagraph[1];
    imaheparagraphs[0]=imagePara;
    String blipId = document.addPictureData(new FileInputStream(new File("D:\\msh.jpg")), Document.PICTURE_TYPE_JPEG);
    CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
    XWPFHeaderFooterPolicy headerFooterPolicy = new  XWPFHeaderFooterPolicy( document, sectPr );

    document.createPicture(blipId,document.getNextPicNameNumber(Document.PICTURE_TYPE_JPEG), 400, 129);


    headerFooterPolicy.createHeader( STHdrFtr.FIRST,imaheparagraphs);
    //headerFooterPolicy.createFooter( STHdrFtr.DEFAULT, newparagraphs );
    FileOutputStream out = new FileOutputStream("D:\\test.docx");
    document.write(out);
    System.out.println("Doc Created");

   }
}

my modofications

XWPFParagraph[] imaheparagraphs = new XWPFParagraph[1];
    r.addPicture(new FileInputStream(new File("D:\\msh.jpg")), Document.PICTURE_TYPE_JPEG, "D:\\msh.jpg", 21, 32);
    r=imagePara.createRun();
    imaheparagraphs[0]=imagePara;

    String blipId = document.addPictureData(new FileInputStream(new File("D:\\msh.jpg")), Document.PICTURE_TYPE_JPEG);
    CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
    XWPFHeaderFooterPolicy headerFooterPolicy = new  XWPFHeaderFooterPolicy( document, sectPr );

    document.createPicture(blipId,document.getNextPicNameNumber(Document.PICTURE_TYPE_JPEG), 400, 129);


    headerFooterPolicy.createHeader( STHdrFtr.DEFAULT,imaheparagraphs);

.....................................................................................

public class CustomXWPFDocument extends XWPFDocument{

public CustomXWPFDocument(FileInputStream 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");
   }
}

As of now the header is coming in the body of the doc ,please help,Thanks is advance.

来源:https://stackoverflow.com/questions/27583478/how-i-can-add-an-image-as-my-header-in-a-word-document-using-apache-poi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!