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

在java servlet中嵌入Apache fop 2.1

王长卿
2023-03-14

我有一个使用Apache FOP生成PDF文件的应用程序。一切都很好,除了生成的PDF中的西里尔字母。据我所知,我应该捆绑应用程序的西里尔字母的字体。

因此,我将应用程序设置如下:我在../src/main/resources/conf/fop . XML(PDF渲染器的默认设置)并像这样初始化FOP:

FopFactoryBuilder fopBuilder =
  new FopFactoryBuilder(fileLoader.getFile("conf/fop.xml").toURI(),
    new ClasspathResolverURIAdapter());
fopFactory = fopBuilder.build();

fileLoader是我自己的读取文件的实用程序,XSLT由它加载,一切都很好。我尝试了另一种方法来做到这一点,但运气不好。Fop本身工作得很好,除了字体。

在配置中,我有:

<renderers>
    <renderer mime="application/pdf">
      <filterList>
        <value>flate</value>
      </filterList>
      <fonts>
        <directory recursive="true">./</directory>
        <auto-detect/>
      </fonts>
    </renderer>
  </renderers>

字体位于conf/下的子目录中。

我的 XSLT 引用字体,通过命令行一切正常,我得到了我想要的结果,所以我想 XSLT 是正确的。

我看到两个问题:

    < li >当我更改配置时,我看不到fop运行时的任何反应,即使我将其破坏。 < li >当然,不会加载字体。

可能我在这里错过了一些非常明显的东西,希望有人能指导我。

共有1个答案

郝昊东
2023-03-14

目前您没有使用配置文件,因此字体没有配置,也没有嵌入到PDF输出中。

FopFactoryBuilder构造函数中的URI参数用于解析相对URI,而不是加载配置文件。

根据嵌入说明,您的代码应该类似于以下内容:

import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;

...

DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder.buildFromFile(new File("conf/conf.xml"));
FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(new File(".").toURI()).setConfiguration(cfg);
FopFactory fopFactory = fopFactoryBuilder.build();
 类似资料:
  • 做这件事最轻的方法是什么。使用像反应艺术这样的东西对我试图做的事情来说是过度的。

  • 我正在编写一个小闹钟程序,当闹钟时间到了时,它会播放一个音频文件几次。 程序的报警部分已经完成。现在我开始播放文件。我使用jFileChooser来选择文件。javax . sound . sampled . audio inputstream、javax . sound . sampled . audio system和javax.sound.sampled.Clip来播放我的wav文件。也在工

  • 所以我有下面的问题。我收到一个文件,其中包含一组字体。这些字体没有嵌入到文件中。下面是一个简单的例子: 我希望将这些字体嵌入到中,这样它们就可以自包含并且始终可用。但事情似乎没那么简单。我正在使用进行处理。 我已经阅读并尝试了以下问题/答案: null

  • 问题内容: 我有一个自定义字体,我想在Java程序中炫耀它,用户无需安装就可以查看它。有谁知道这是怎么做到的吗? 工作解决方案 我已经实现了以下内容: 问题答案: 我从未做过,但似乎您想要的方法是 导入字体 或者 该参数是或,而或参数包含字体的二进制数据。 导入后使用字体: 要使Font对Font构造函数可用,必须通过调用在中注册返回的Font 。

  • 问题内容: 我需要在Tomcat中启动Hazelcast,而无需单独的war文件。因此,将hazelcast.jar放入lib文件夹中的hazelczast.xml某处…接下来呢?还是不可能? 问题答案: 第一步是好的,只需将Hazelcast lib和配置放在Tomcat的libs文件夹中。接下来,如果您不需要单独的WAR文件,则是构建一个小的Valve类来启动/关闭Hazelcast节点。问题

  • 问题内容: 我正在编写一个需要文件打开对话框的Java程序。文件打开对话框并不难,我希望使用。我的问题是我想要一个双窗格(由2组成)。左侧面板上有一个,右侧面板上有一个文件打开对话框。 当我使用它时,将在所有其他窗口上方打开对话框,这不是我想要的。有什么方法可以使(或可能是另一个文件选择对话框)显示在而不在其上方弹出? 这是我尝试过的代码,目前已非常简化。目前,我只是试图将嵌入。 我也打过电话与和

  • 问题内容: 我拼命试图将可正常使用的bokeh小程序嵌入烧瓶中,但找不到合适的方法来执行此操作。我浏览了所有示例,但找不到包含更新数据功能的示例(最佳示例:sliders_applet)。 如果我没记错的话,我确实需要bokeh服务器能够更改数据(使用滑块等)。以这种方式启动小程序有效,例如: 但是我找不到将sliders_app嵌入flask的正确方法,或者至少是一种可行的方法。并且由于应该可以

  • 问题内容: 我有一个使用Foxit表单设计器创建的pdf文件。在我的设计系统上,我安装了条形码字体。条形码字体在AcroField之一中使用。foxit似乎没有在文档中嵌入字体。 我也有一些客户的计算机上未安装条形码字体,因此我想将该字体嵌入到PDF中。我是否可以使用iText将AcroFields中使用的字体嵌入到PDF中? 编辑: 字体似乎包含在文本中,但没有包含在字段中,因此字体(条形码)将