当前位置: 首页 > 知识库问答 >
问题:

如何在DOCX4J中保存word文档中的图像

颜宸
2023-03-14
/word/media/image1.png  rId5    image/png
/word/media/image2.png  rId5    image/png
/word/media/image3.jpg  rId5    image/jpeg

目前,我从文档中获得的所有文本如下所示:

   WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(filePath))
   MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart()
   Document wmlDocumentEl = (org.docx4j.wml.Document)documentPart.getJaxbElement()
   Body body =  wmlDocumentEl.getBody();
   DocumentTraverser traverser = new DocumentTraverser();

   class DocumentTraverser  extends TraversalUtil.CallbackImpl {
      @Override
      public List<Object> apply(Object o) {
         if (o instanceof org.docx4j.wml.Text) {
         ....
         }
         return null;
      }
   }

共有1个答案

司徒啸
2023-03-14

对于嵌入式(相对于外部)图像,最简单的方法是:

import java.io.FileOutputStream;
import java.util.Map.Entry;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.Part;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPart;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;

public class SaveImages  {

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

            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));

            for (Entry<PartName, Part> entry : wordMLPackage.getParts().getParts().entrySet()) {

                if (entry.getValue() instanceof BinaryPartAbstractImage) {

                    FileOutputStream fos = new FileOutputStream( yourfile ); // TODO: you can get file extension from PartName, or part class.
                    ((BinaryPart)entry.getValue()).writeDataToOutputStream(fos);
                    fos.close();

                }


            }
        }

    }

如果您关心图像的上下文,您必须在相关部分(如MainDocumentPart,以及您的页眉/页脚部分等)中搜索它们。

https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/imageConvertembeddedtolinked.java将为您提供如何做到这一点的提示。注意,图像有两种不同的XML结构。更新的DrawingML XML和遗留的VML。

 类似资料:
  • 如何从docx4j中删除图像。 假设我有10个映像,我想用我自己的字节数组/二进制数据替换8个映像,我想删除剩下的2个。 我也有麻烦在定位图像。 是否可以用图像替换文档中的文本占位符?

  • 我已经为Word创建了一个插件。我正在尝试通过单击按钮更新word文档中的自定义属性的值。但却得不到拯救。我写的代码是: 但如果我在文档中添加一个空格然后保存它。然后保存自定义属性的值。代码为: 为什么行为是这样的。我不想在我的文档中添加任何额外的空白处。请帮帮我。提前道谢。

  • 下面是一个简单的例子: first.docx=简单文本 second.docx=简单文本+图像 问题是我什么时候存钱。出现以下错误: 谢谢

  • 我根据你的建议和我的需要对代码进行了修改,代码就在这里 我不需要删除书签中的文本,所以我删除了它。我不知道出了什么问题,程序正在编译,但我打不开doc这个词,上面写着“未知错误”。我测试写一些字符串“值”,它在书签和文档打开时写得很完美,但在表的情况下不是这样。请帮我提前谢谢

  • 问题内容: 在同一页面中提到的oodocx模块会将用户引向一个似乎不存在的/ examples文件夹。 我已经阅读了python-docx 0.7.2的文档,以及在上可以找到的所有内容,因此请相信我已经完成了“作业”。 Python是我所知道的唯一语言(初学者+,也许是中级),所以请不要假定对C,Unix,xml等有任何了解。 任务:打开其中包含一行文本的ms-word 2007+文档(为简单起见