【问题标题】:FOP giving NoSuchMethodError when font auto-detect enableFOP 在字体自动检测启用时给出 NoSuchMethodError
【发布时间】:2017-05-20 23:26:17
【问题描述】:

从 Apache FOP 生成 PDF 时出现以下错误,

  FopFactory fopFactory = FopFactory.newInstance(new File("/Users/vinurip/cloud/Stripe/Full/pdfboxtut/src/main/resources/fop.xconf"));
    OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(outFile)));
    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

OutFile 是一个空的 pdf 文件位置。 fop.xconf 与 FOP 源中的相同

  Exception in thread "main" java.lang.NoSuchMethodError: org.apache.fontbox.cff.CFFFont.getProperty(Ljava/lang/String;)Ljava/lang/Object;
    at org.apache.fop.fonts.truetype.OTFFile.readName(OTFFile.java:134)
    at org.apache.fop.fonts.truetype.OpenFont.readFont(OpenFont.java:740)
    at org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:109)
    at org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:93)
    at org.apache.fop.fonts.FontLoader.getFont(FontLoader.java:124)
    at org.apache.fop.fonts.FontLoader.loadFont(FontLoader.java:108)
    at org.apache.fop.fonts.autodetect.FontInfoFinder.find(FontInfoFinder.java:254)
    at org.apache.fop.fonts.FontAdder.add(FontAdder.java:63)
    at org.apache.fop.fonts.FontDetectorFactory$DefaultFontDetector.detect(FontDetectorFactory.java:105)
    at org.apache.fop.fonts.FontManager.autoDetectFonts(FontManager.java:229)
    at org.apache.fop.fonts.DefaultFontConfigurator.configure(DefaultFontConfigurator.java:82)
    at org.apache.fop.render.PrintRendererConfigurator.getCustomFontCollection(PrintRendererConfigurator.java:147)
    at org.apache.fop.render.PrintRendererConfigurator.setupFontInfo(PrintRendererConfigurator.java:127)
    at org.apache.fop.render.intermediate.IFUtil.setupFonts(IFUtil.java:170)
    at org.apache.fop.render.intermediate.IFRenderer.setupFontInfo(IFRenderer.java:187)
    at org.apache.fop.area.RenderPagesModel.<init>(RenderPagesModel.java:75)
    at org.apache.fop.area.AreaTreeHandler.setupModel(AreaTreeHandler.java:135)
    at org.apache.fop.area.AreaTreeHandler.<init>(AreaTreeHandler.java:105)
    at org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:350)
    at org.apache.fop.fo.FOTreeBuilder.<init>(FOTreeBuilder.java:107)
    at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:104)
    at org.apache.fop.apps.Fop.<init>(Fop.java:78)
    at org.apache.fop.apps.FOUserAgent.newFop(FOUserAgent.java:182)
    at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:220)
    at foptest.fo2PDF(foptest.java:73)
    at foptest.main(foptest.java:57)

此问题似乎仅在启用字体自动检测时出现

【问题讨论】:

    标签: pdf pdf-generation apache-fop


    【解决方案1】:

    您可以使用搜索引擎找到一些信息 - 例如。 https://qnalist.com/questions/6434450/pdfbox-2-0-and-batik - 虽然这些不是很有用...

    我的解决方法是使用&lt;directory recursive="true"&gt;/usr/share/fonts&lt;/directory&gt; 而不是&lt;auto-detect /&gt;

    【讨论】:

      【解决方案2】:

      由于 Apache FOP 和 Apache PDFBox/FontBox 之间的 Maven 依赖项不匹配,我遇到了这个问题。

      我通过将我的项目的 pom.xml 迁移到撰写本文时的最新依赖项版本解决了这个问题:

      <dependency>
        <groupId>org.apache.xmlgraphics</groupId>
         <artifactId>fop</artifactId>
         <version>2.2</version>
      </dependency>
      <dependency>
         <groupId>org.apache.pdfbox</groupId>
         <artifactId>pdfbox</artifactId>
         <version>2.0.9</version>
      </dependency>
      <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>fontbox</artifactId>
        <version>2.0.9</version>
      </dependency>
      

      要迁移到 Apache FOP 2.2,请遵循 embedding guidelinesmigration guideslines

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 2015-04-15
        • 2012-04-22
        • 1970-01-01
        相关资源
        最近更新 更多