Problem adding image in the header of word document

大兔子大兔子 提交于 2021-01-28 02:06:57

问题


I'm adding a picture in the header of a word document. It shows a frame for the image and says "the image cannot currently be display". If I add text to the header it show the text, and if I add the image in the document body, it also shows the image. So is getting the image and it show text on the header, but no the image.

I'm running out of checkings, can anyone advise with this please?

Thank you!

public static void createHeaderAndFotter(XWPFDocument document) throws IOException, BadElementException, InvalidFormatException {

    XWPFHeaderFooterPolicy headerFooterPolicy = document.getHeaderFooterPolicy();
    if (headerFooterPolicy == null) headerFooterPolicy = document.createHeaderFooterPolicy();

    File image = new ClassPathResource("/static/images/NIAB_Header.bmp").getFile();
    BufferedImage bimg1 = ImageIO.read(image);
    int width = bimg1.getWidth();
    int height = bimg1.getHeight();
    String imageName= image.getName();

    XWPFHeader header = headerFooterPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);

    XWPFParagraph paragraph = header.createParagraph();
//        XWPFParagraph paragraph = document.createParagraph();
    paragraph.setAlignment(ParagraphAlignment.CENTER);

    XWPFRun run = paragraph.createRun();

    run.addPicture(new FileInputStream(image), XWPFDocument.PICTURE_TYPE_PNG, imageName, Units.toEMU(width), Units.toEMU(height));
    run.setText("HEADER"); 
}

If I remove the commment on this line and comment the one before, then it adds the image

        XWPFParagraph paragraph = document.createParagraph();

回答1:


I believe whether this works or not highly depends on apache poiversion used. There was multiple issues with pictures in header/footer in former apache poi versions.

The following is the most minimal working code using apache poi 4.0.1. It is recommend always using the latest stable version.:

Code:

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.apache.poi.util.Units;

public class CreateWordHeaderWithImage {

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

  XWPFDocument doc = new XWPFDocument();

  // the body content
  XWPFParagraph paragraph = doc.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The Body...");

  // create header
  XWPFHeader header = doc.createHeader(HeaderFooterType.DEFAULT);

  // header's first paragraph
  paragraph = header.getParagraphArray(0);
  if (paragraph == null) paragraph = header.createParagraph();
  paragraph.setAlignment(ParagraphAlignment.CENTER);

  run = paragraph.createRun();

  FileInputStream in = new FileInputStream("samplePict.jpeg");
  run.addPicture(in, Document.PICTURE_TYPE_JPEG, "samplePict.jpeg", Units.toEMU(100), Units.toEMU(50));
  in.close();  

  run.setText("HEADER"); 

  FileOutputStream out = new FileOutputStream("CreateWordHeaderWithImage.docx");
  doc.write(out);
  doc.close();
  out.close();

 }
}

Result:



来源:https://stackoverflow.com/questions/54257112/problem-adding-image-in-the-header-of-word-document

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