如何将捕获的图像写入/粘贴到doc文件?

时间:2017-02-06 10:31:11

标签: java apache-poi

我有一个场景,我需要捕获图像并将它们一个接一个地写入word文件。我写了下面的代码,但似乎没有起作用。请帮忙

          Robot robot;
          try {
          robot = new Robot();

          BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ImageIO.write(screenShot, "JPG", new File("C:\\xxx\\Gaurav\\NEW1.JPG"));
          InputStream is = new ByteArrayInputStream(baos.toByteArray());
          XWPFParagraph paragraph = document.createParagraph();
          XWPFRun run=paragraph.createRun();
          run.setText(resulttext);
          run.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "new", 300, 300);
      } catch (AWTException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
      //Blank Document

}

1 个答案:

答案 0 :(得分:2)

使用ImageIO.write(screenShot, "JPG", baos);图像在那里,但它有点小,因为测量单位不是像素而是EMU(英制公制单位)。有一个org.apache.poi.util.Units可以将像素转换为EMU。

以下内容对我有用:

import java.io.*;

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

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


public class CreateWordPictureScreenshot {

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

  XWPFDocument document= new XWPFDocument();

  String resulttext = "The Screenshot:";

  Robot robot = new Robot();

  BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  //ImageIO.write(screenShot, "JPG", new File("NEW1.JPG"));
  ImageIO.write(screenShot, "JPG", baos);
  baos.flush();
  InputStream is = new ByteArrayInputStream(baos.toByteArray());
  baos.close();
  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run=paragraph.createRun();
  run.setText(resulttext);
  run.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "new", Units.toEMU(72*6), Units.toEMU(72*6/16*9));
  is.close();

  document.write(new FileOutputStream("CreateWordPictureScreenshot.docx"));

  document.close();

 }
}