Проблема с добавлением изображения в заголовок текстового документа - PullRequest
0 голосов
/ 18 января 2019

Я добавляю картинку в заголовок текстового документа. Он показывает рамку для изображения и говорит: «Изображение не может быть отображено в данный момент». Если я добавляю текст в заголовок, он показывает текст, а если я добавляю изображение в тело документа, он также показывает изображение. Так получается изображение, и оно показывает текст в заголовке, но не изображение.

У меня заканчиваются проверки, может кто-нибудь посоветовать с этим, пожалуйста?

Спасибо!

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

Если я уберу комментарий в этой строке и прокомментирую предыдущий, он добавит изображение

        XWPFParagraph paragraph = document.createParagraph();

1 Ответ

0 голосов
/ 18 января 2019

Я считаю, работает ли это или нет, в значительной степени зависит от используемой версии apache poi. В предыдущих apache poi версиях было несколько проблем с изображениями в верхнем / нижнем колонтитуле.

Ниже приведен самый минимальный рабочий код, использующий apache poi 4.0.1. Рекомендуется всегда использовать последнюю стабильную версию.

Код:

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();

 }
}

Результат:

enter image description here

...