概述

上一篇中我们介绍了如何使用 Apache POI Word API 绘制表格,本篇介绍如何使用 POI Word 向文档中插入图片。

插入图片

import org.apache.poi.common.usermodel.PictureType;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

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

public class CreateDocPic {

  public static void main(String[] args) throws IOException, InvalidFormatException {
    try (XWPFDocument doc = new XWPFDocument()) {
      try (FileOutputStream out = new FileOutputStream("D:\\tmp\\dogeDoc.docx")) {
        XWPFParagraph p = doc.createParagraph();
        XWPFRun run = p.createRun();
        try (FileInputStream in = new FileInputStream("D:\\tmp\\doge.jpg")) {
          run.addPicture(in, PictureType.JPEG, "doge", (int) (Units.EMU_PER_CENTIMETER * 5.54), (int) (Units.EMU_PER_CENTIMETER * 6.99));
          doc.write(out);
        }
      }
    }
  }
}

插入图片的方法是 addPicture(InputStream pictureData, PictureType pictureType, String filename, int width, int height),值得一提的是,这里的宽高单位不是像素,而是 EMU,好在 org.apache.poi.util.Units 类中有一些实用方法可以转换不同的长度单位。

我这里希望插入的图片显示宽度是 5.54cm*6.99cm,Units 中的 Units.EMU_PER_CENTIMETER 表示一厘米有多少个 EMUs,因此需要将长度乘以 Units.EMU_PER_CENTIMETER。

生成的文档截图如下

有问题吗?点此反馈!

温馨提示:反馈需要登录