Добавление текста в существующий файл слов с помощью XWPFDocument - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь добавить текст и снимок экрана к существующему файлу слов.Но каждый раз, когда я выполняю приведенный ниже код, я получаю сообщение об ошибке:

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

    }

Пожалуйстапомощь.

1 Ответ

0 голосов
/ 21 мая 2018

Предоставленный файл был пуст (длина ноль байтов)

Проблема заключается в получении файла WordDocWithImage в этой строке.

file = new File("WordDocWithImage.docx"); 

Не удалось найти файл docx.Вы должны проверить местоположение файла и указать верный путь к нему.

РЕДАКТИРОВАТЬ: Вам нужно изменить outputStream на другое место.Вы можете создать подпапку.Я получил ss, пробуя это.

public FileOutputStream writeToWord() throws FileNotFoundException {
        fos = new FileOutputStream("path/subFolder/WordDocWithImage.docx");
        return fos;

    }

Примечание : я пробовал код.

...