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

在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是正确的。

我看到两个问题:

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

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


问题答案:

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

构造函数中的URI参数FopFactoryBuilder用于 解析相对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中? 编辑: 字体似乎包含在文本中,但没有包含在字段中,因此字体(条形码)将