当前位置: 首页 > 面试题库 >

使用Apache FOP Java库将FO转换为PDF / a

陈昊昊
2023-03-14
问题内容

我正在尝试使用文档中给出的示例代码将.fo文件转换为PDF
/ a 。我设法将文件转换为PDF,但是当我尝试将其转换为PDF /文件时,出现此错误:Apache FOP 2.1helloworld.fo

org.apache.fop.pdf.PDFConformanceException: For PDF/A-1a, all fonts, even the base 14 fonts, have to be embedded! Offending font: /Helvetica

这就是为什么我尝试在fop.xconf文件中嵌入字体的原因: ``

  <fonts>

    <font kerning="yes" embed-url="C:/Users/thinkpad/workspace/FopConverter/Fonts/arial.ttf" name="Arial">
      <font-triplet name="Arial" style="normal" weight="700"/>
    </font>
    <font kerning="yes" embed-url="C:/Users/thinkpad/workspace/FopConverter/Fonts/arialbd.ttf" name="Arial Bold">
      <font-triplet name="Arial" style="normal" weight="bold"/>
    </font>
    <font kerning="yes" embed-url="C:/Users/thinkpad/workspace/FopConverter/Fonts/ariali.ttf" name="Arial Italique">
      <font-triplet name="Arial" style="italic" weight="700"/>
    </font>
    <font kerning="yes" embed-url="C:/Users/thinkpad/workspace/FopConverter/Fonts/arialbi.ttf" name="Helvetica Bold Italique">
      <font-triplet name="Arial" style="italic" weight="bold"/>
    </font>

    <directory>C:\Users\thinkpad\workspace\FopConverter\Fonts</directory>
    <directory>C:\Users\thinkpad\workspace\FopConverter\Fonts\ghostFonts</directory>

   <substitutions>
     <substitution>
       <from font-family="Helvetica" font-weight="700..900"/>
       <to font-family="Arial"/>
     </substitution>
   </substitutions>
   <auto-detect/>
  </fonts>

但是即使这样做,我仍然有相同的错误: org.apache.fop.pdf.PDFConformanceException: For PDF/A-1a, all fonts, even the base 14 fonts, have to be embedded! Offending font: /Helvetica

我还试图修改helloworld.fo加入font-family="Helvetica" font-weight="normal" font- style="normal"<fo:root">,因为一些论坛主题说,这样做,但它并没有改变任何东西。

请帮助我解决嵌入字体错误。感谢您阅读本主题。

[编辑]:这是整个错误消息

FOP ExampleFO2PDF

Preparing...
Input: XSL-FO (.\xml\fo\helloworld.fo)
Output: PDF (.\out\ResultFO2PDF.pdf)

Transforming...
août 07, 2017 11:26:49 AM org.apache.fop.events.LoggingEventListener processEvent
INFOS: Rendered page #1.
org.apache.fop.pdf.PDFConformanceException: For PDF/A-1b, all fonts, even the base 14 fonts, have to be embedded! Offending font: /Helvetica
    at org.apache.fop.pdf.PDFFont.validate(PDFFont.java:170)
    at org.apache.fop.pdf.PDFFont.output(PDFFont.java:179)
    at org.apache.fop.pdf.PDFDocument.outputIndirectObject(PDFDocument.java:1053)
    at org.apache.fop.pdf.PDFDocument.streamIndirectObject(PDFDocument.java:1018)
    at org.apache.fop.pdf.PDFDocument.output(PDFDocument.java:994)
    at org.apache.fop.pdf.PDFDocument.outputTrailer(PDFDocument.java:1097)
    at org.apache.fop.render.pdf.PDFDocumentHandler.endDocument(PDFDocumentHandler.java:191)
    at org.apache.fop.render.intermediate.util.IFDocumentHandlerProxy.endDocument(IFDocumentHandlerProxy.java:187)
    at org.apache.fop.render.intermediate.IFRenderer.stopRenderer(IFRenderer.java:295)
    at org.apache.fop.area.RenderPagesModel.endDocument(RenderPagesModel.java:265)
    at org.apache.fop.area.AreaTreeHandler.endDocument(AreaTreeHandler.java:342)
    at org.apache.fop.fo.FOTreeBuilder.endDocument(FOTreeBuilder.java:170)
    at org.apache.xalan.transformer.TransformerIdentityImpl.endDocument(TransformerIdentityImpl.java:963)
    at org.apache.xerces.parsers.AbstractSAXParser.endDocument(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityManager.endEntity(Unknown Source)
    at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
    at org.apache.xerces.impl.XMLEntityScanner.skipSpaces(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:485)
    at ConverterFO2PDFa.convertFO2PDF(ConverterFO2PDFa.java:104)
    at ConverterFO2PDFa.main(ConverterFO2PDFa.java:154)

问题答案:

进行一些更改后,我能够使用相同的示例文件创建PDF / A输出:

  1. 输入FO文件中 ,我font-family="Helvetica"在影响所有文本的位置显式添加了(或您最喜欢的字体系列)

如果没有此设置,即使FOP在未font-family设置no时默认使用Helvetica ,显然也无法为其找到配置。

  1. 配置文件中 ,我将Helvetica字体系列映射到了现有字体,例如Arial
        <font kerning="yes" embed-url="/Library/Fonts/arial.ttf">
      <font-triplet name="Helvetica" style="normal" weight="normal"/>
    </font>
  1. Java代码中 ,我将FOP配置为使用配置文件,并通过用户代理启用了可访问性
        import org.apache.avalon.framework.configuration.Configuration;
    import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
    import org.apache.fop.apps.FopFactoryBuilder;

    ...
    DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
    Configuration cfg = cfgBuilder.buildFromFile(new File("/Users/lfurini/fop.xconf"));
    FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(new File(".").toURI()).setConfiguration(cfg);
    FopFactory fopFactory = fopFactoryBuilder.build();

    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    // configure foUserAgent as desired
    foUserAgent.setAccessibility(true);
    foUserAgent.getRendererOptions().put("pdf-a-mode", "PDF/A-1b");
    ...


 类似资料:
  • 我是java新手,fo试图将fo文件转换为pdf。我从这个链接复制了java,但我得到以下错误: 改变。。。log4j:WARN找不到记录器(org.apache.fop.util.ContentHandlerFactoryRegistry)的appender。log4j:警告请正确初始化log4j系统。线程“main”java中出现异常。lang.NoClassDefFoundError:org

  • 目前我正在尝试将PDF转换为PDF/A。 然而,不知何故,我不知道我是否可以转换色彩空间,有没有办法这样做? 这是我的代码,然而: 色彩空间被添加但是在验证我得到: 对于每个页面/元素,它都经常出现。 我能做点什么来反对它吗?比如转换颜色空间?使用她的图书馆?

  • 问题内容: 我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30至50页)转换为PDF文档。 我的搜索找到了以下可能的解决方案。其中包括一些PHP库和一些命令行应用程序。每种都有自己的优点和缺点。 PHP库: fpdf(需要更多的转换努力) tcpdf(需要更多的转换努力) html2fpdf http://html2fpdf.sourceforge.net html2pd

  • 问题内容: 我们正在构建一个与其他系统部分交互的应用程序。我们正在从另一个系统中提取一些数据,这些数据作为RTF文档返回。但是我们必须防止用户编辑此文件,因此我们考虑将其与iText转换为PDF。程式码片段: 创建了Pdf,但是字体大小错误,样式错误并且编码错误。也许您有类似的问题,并且您已经解决了一些问题?也许有更好的解决方案? 问题答案: 根据这篇文章, itext正在放弃RTF 。我使用的一

  • 问题内容: 如何使用Python将PDF文件转换为HTML? 我只是在想Google会(或似乎会)对PDF文件建立索引的行为。 我的最终目标是设置Apache以显示PDF文件的HTML,因此,向该方向发展的任何事情也将不胜感激。 问题答案: 该poppler的包提供了一个实用PDF2HTML您可能能够使用。还有一个Python绑定到libpoppler。

  • 问题内容: 我想尝试使用documents4j来将doc转换为PDF。我在http://documents4j.com/#/develop遵循这些说明 。当我键入然后按Enter时,一切似乎都正常运行,但是我明白了 我试图删除C:\ Users \ My User.m2文件夹,但是它不起作用。对于这个简单的问题,我感到很抱歉,但是我对maven还是很陌生,我不知道这可能是问题所在,也许是docum