Java 无法使用DocX4J将图像添加到文档中

Java 无法使用DocX4J将图像添加到文档中,java,docx4j,Java,Docx4j,我正在尝试使用Docx4j库将图像添加到文档(.docx),代码如下。该图像已经存在于本地机器中,最初我教它不支持png,然后我将该图像重命名为jpg,它仍然抛出错误 String userSignatureFile = "C:\\esignature\\sign.jpg"; // read the signature image into Bytes InputStream inputStream = new java.io.FileInpu

我正在尝试使用Docx4j库将图像添加到文档(.docx),代码如下。该图像已经存在于本地机器中,最初我教它不支持png,然后我将该图像重命名为jpg,它仍然抛出错误

String userSignatureFile = "C:\\esignature\\sign.jpg";

            // read the signature image into Bytes

            InputStream inputStream = new java.io.FileInputStream(userSignatureFile);
            long fileLength = userSignatureFile.length();    

            byte[] bytes = new byte[(int)fileLength];

            int offset = 0;
            int numRead = 0;

            while(offset < bytes.length
                   && (numRead = inputStream.read(bytes, offset, bytes.length-offset)) >= 0) {
                offset += numRead;
            }

            inputStream.close();

            String filenameHint = null;
            String altText = null;

            int id1 = 0;
            int id2 = 1;

            // create Inline Image

            BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, bytes);
            Inline inline = imagePart.createImageInline( filenameHint, altText, id1, id2);

            // Create Drawing and add to Run
              Drawing imageDrawing = factory.createDrawing();
               imageDrawing.getAnchorOrInline().add(inline);
            // add Text to Run
            run.getContent().add(imageDrawing);

            // add Run to Paragraph
            ((P) jaxbNode).getContent().add(run);
String userSignatureFile=“C:\\esignature\\sign.jpg”;
//将签名图像读入字节
InputStream InputStream=new java.io.FileInputStream(userSignatureFile);
long fileLength=userSignatureFile.length();
字节[]字节=新字节[(int)文件长度];
整数偏移=0;
int numRead=0;
while(偏移量=0){
偏移量+=numRead;
}
inputStream.close();
字符串filenameint=null;
字符串altText=null;
int id1=0;
int id2=1;
//创建内联图像
BinaryPartAbstractImage imagePart=BinaryPartAbstractImage.createImagePart(字包,字节);
Inline Inline=imagePart.createImageInline(filenameint,altText,id1,id2);
//创建图形并添加到运行
Drawing imageDrawing=factory.createDrawing();
imageDrawing.getAnchorOrInline().add(内联);
//添加要运行的文本
run.getContent().add(imageDrawing);
//将运行添加到段落
((P)jaxbNode.getContent().add(run);
下面是错误消息

    Exception in thread "main" org.docx4j.openpackaging.exceptions.Docx4JException: Error checking image format
        at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.ensureFormatIsSupported(BinaryPartAbstractImage.java:429)
        at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.ensureFormatIsSupported(BinaryPartAbstractImage.java:331)
        at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.createImagePart(BinaryPartAbstractImage.java:225)
        at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.createImagePart(BinaryPartAbstractImage.java:144)

Caused by: java.io.IOException: Cannot run program "imconvert": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.convertToPNG(BinaryPartAbstractImage.java:905)
    at org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.ensureFormatIsSupported(BinaryPartAbstractImage.java:413)
    ... 6 more
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 12 more
线程“main”org.docx4j.openpackaging.exceptions.docx4jeexception中的异常:检查图像格式时出错 在org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.EnsureReformatisSupported上(BinaryPartAbstractImage.java:429) 在org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.EnsureReformatisSupported上(BinaryPartAbstractImage.java:331) 位于org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.CreateMagePart(BinaryPartAbstractImage.java:225) 位于org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.createImagePart(BinaryPartAbstractImage.java:144) 原因:java.io.IOException:无法运行程序“imconvert”:CreateProcess错误=2,系统找不到指定的文件 位于java.lang.ProcessBuilder.start(未知源) 位于java.lang.Runtime.exec(未知源) 位于java.lang.Runtime.exec(未知源) 位于java.lang.Runtime.exec(未知源) 位于org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.convertToPNG(BinaryPartAbstractImage.java:905) 在org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.EnsureReformatisSupported上(BinaryPartAbstractImage.java:413) ... 还有6个 原因:java.io.IOException:CreateProcess error=2,系统找不到指定的文件 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(未知源) 位于java.lang.ProcessImpl.start(未知源) ... 还有12个
实际上,这是我的错误,我使用了输入流并直接传递了文件路径字符串(没有文件),经过如下更正后,它工作了

正确的

File file = new File(userSignatureFile);

            // read the signature image into Bytes

            InputStream inputStream = new java.io.FileInputStream(file);


如果不支持PNG格式,则重命名将无济于事–更改文件名不会更改文件中的数据!即使我已经创建了新的jpg,但它仍然不支持,并给出错误为org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.EnsureReformatisSupported(BinaryPartAbstractImage.java:429),显然找不到该文件。您确定路径正确吗?
        InputStream inputStream = new java.io.FileInputStream(userSignatureFile);