【问题标题】:org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader foundorg.apache.xmlgraphics.image.loader.ImageException:不支持文件格式。未找到 ImagePreloader
【发布时间】:2014-12-10 12:35:13
【问题描述】:

我正在使用 Apache FOP 1.1(Java) 生成 PDF 文件。 它在 Windows 机器上运行良好,但是当我使用 Ubuntu 机器时出现此错误

org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported.  No ImagePreloader found

我有点困惑。请给我解决方案来解决这个问题。 谢谢

【问题讨论】:

    标签: java xslt apache-fop


    【解决方案1】:

    我只从 stackoverflow 获得了解决方案。我要特别感谢这篇文章的作者 Apache FOP in a Java Applet - No ImagePreloader found for data

    With reference from above post , To give precedence to XmlGraphics
    API , 
      1. I have excluded XML-graphics API from FOP jar
      2. added new maven dependency XmlGraphics API and placed above FOP dependancy
      3. so that POM will give priority
    
    
       <dependency>
            <groupId>xmlgraphics-commons</groupId>
            <artifactId>xmlgraphics-commons</artifactId>
            <version>1.4</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>fop</artifactId>
            <version>1.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>xmlgraphics-commons</artifactId>
                    <groupId>org.apache.xmlgraphics</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <groupId>org.apache.avalon.framework</groupId>
            <artifactId>avalon-framework-api</artifactId>
            <version>4.3.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.avalon.framework</groupId>
            <artifactId>avalon-framework-impl</artifactId>
            <version>4.3.1</version>
        </dependency>
    

    谢谢

    【讨论】:

    • 我有 fop.jar 但它不包含 xmgraphics-commons 我仍然有这个问题。你能帮我吗?
    • 您使用的是哪个版本的 FOP?
    【解决方案2】:

    问题是存在于META-INF/services/ 中的配置文件在fop jar 文件和xmlgraphics-commons jar 文件中存在冲突。

    如果你使用 maven 并且想避免有时可能会导致麻烦的排除,你可以使用 ma​​ven shade 插件 来构建一个 jar 并强制连接 META-INF/services/ 中的配置文件。像这样的 sn-p 对我有用:

       <build>
            <finalName>desired_jar_name</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>my.main.class</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    【讨论】:

      【解决方案3】:

      gradle 的等效解决方案是:

      shadowJar{
          mergeServiceFiles()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 1970-01-01
        • 2019-11-21
        • 2016-10-03
        • 2018-12-15
        • 2017-01-31
        • 2019-05-17
        相关资源
        最近更新 更多