Я пытаюсь добавить текст и снимок экрана к существующему файлу слов.Но каждый раз, когда я выполняю приведенный ниже код, я получаю сообщение об ошибке:
org.apache.poi.EmptyFileException: предоставленный файл был пустым (длиной 0 байт) в org.apache.poi.util.IOUtils.peekFirstNBytes (IOUtils.java:74) в org.apache.poi.util.IOUtils.peekFirst8Bytes (IOUtils.java:57) в org.apache.poi.poifs.filesystem.FileMagic.valueOjava (FileMag: 135) в org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader (ZipHelper.java:175) в org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream (ZipHelper.java:20org.apache.poi.openxml4j.opc.ZipPackage. (ZipPackage.java:98) в org.apache.poi.openxml4j.opc.OPCPackage.open (OPCPackage.java:324) в org.apache.poi.util.PackageHelper.open (PackageHelper.java:37) в org.apache.poi.xwpf.usermodel.XWPFDocument. (XWPFDocument.java:116) в test.tester. (tester.java:44) в test.tester.main (тестер.java: 100)
не удалось создать файл Принимая сначала ss
java.lang.NullPointerException at test.tester.setText (tester.java:62) at test.tester.main (tester.java:103)
Вот код:
public class tester{
FileOutputStream fos = null;
XWPFDocument doc = null;
// create para and run
XWPFParagraph para = null;
XWPFRun run = null;
File file = null;
public tester() {
try {
file = new File("WordDocWithImage.docx");
writeToWord();
//doc = new XWPFDocument();
doc = new XWPFDocument(OPCPackage.open(file));
//doc = new XWPFDocument(new FileInputStream("WordDocWithImage.docx"));
para = doc.createParagraph();
run = para.createRun();
para.setAlignment(ParagraphAlignment.CENTER);
} catch (Exception e) {
e.printStackTrace();
System.out.println("failed to create file");
}
}
public FileOutputStream writeToWord() throws FileNotFoundException {
fos = new FileOutputStream("WordDocWithImage.docx");
return fos;
}
public void setText(String text) {
run.setText(text);
}
public void takeScreenshot() throws IOException, AWTException, InvalidFormatException {
// Take screenshot
Robot robot = new Robot();
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
// convert buffered image to Input Stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(screenFullImage, "jpeg", baos);
baos.flush();
ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());
baos.close();
// add image to word doc
run.addBreak();
run.addPicture(bis, XWPFDocument.PICTURE_TYPE_JPEG, "image file", Units.toEMU(450), Units.toEMU(250)); // 200x200
// pixels
bis.close();
}
public void writeToFile() {
try {
// write word doc to file
doc.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
tester t = new tester();
try {
System.out.println("Taking first ss");
t.setText("First Text");
t.takeScreenshot();
System.out.println("Taking second ss");
t.setText("Second Text");
t.takeScreenshot();
t.writeToFile();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Пожалуйстапомощь.