Apache POI(Java):在Microsoft Word(.docx)上显示嵌入文件

时间:2016-05-09 15:20:08

标签: java ms-word apache-poi openxml docx

这是我第一次在这里发帖:)

我想用apache POI将文件嵌入到.docx中,并通过文档中的图标或链接引用它。

我想我已设法嵌入该文件。 我的问题:我无法显示对嵌入文件的引用。

说明我的问题: 使用以下代码,我设法在myWord.docx中嵌入文件" first.txt"在该位置" /word/embeddings/first.txt"。 我不知道如何引用它。

这是我的代码:

public void saveToDocx(OutputStream myOutputStream){

    Resource r = new ClassPathResource("/myWord.docx") ; 
    try (FileInputStream fis= new FileInputStream(r.getFile())){
        OPCPackage pkg = OPCPackage.open(fis);
        XWPFDocument docx = new XWPFDocument(pkg);
        fis.close();

        // first.txt
        final PackagePartName partName = PackagingURIHelper.createPartName("/word/embeddings/first.txt");
        final PackagePart pkgPart = pkg.createPart(partName, "application/vnd.openxmlformats-officedocument.oleobject");
        final OutputStream partOutputStream = pkgPart.getOutputStream();
        partOutputStream.write("test test test".getBytes());    
        partOutputStream.close();
        pkgPart.addRelationship(partName, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject");

        //image.jpg
        String imageName = "C:/image.jpg";
        InputStream imageIS = new FileInputStream(imageName);
        imageIS.close();
        imgPartOutputStream.close();

        //add simple picture to my document
        XWPFParagraph myParagraph = docx.createParagraph(); 
        XWPFRun run = myParagraph.createRun();
        run.addPicture(imageIS,  XWPFDocument.PICTURE_TYPE_JPEG, imageName, Units.toEMU(77.25), Units.toEMU(49.5));

        docx.write(myOutputStream);
        //pkg.save(myOutputStream); there is a difference between this and docx.write ?

    }catch(Exception e){
        e.printStackTrace();
    }
}

有人可以帮我吗?我真的卡住了(自上周五以来)。多谢你们! (请原谅我的语法,我不是本地人:/)

0 个答案:

没有答案