Java 如何配置BIRT报告引擎直接从类路径加载字体?
我正在编写一个Java应用程序,它使用BIRT生成报告。我想将自定义字体打包到jar文件中,并能够将它们嵌入到PDF报告中Java 如何配置BIRT报告引擎直接从类路径加载字体?,java,itext,birt,Java,Itext,Birt,我正在编写一个Java应用程序,它使用BIRT生成报告。我想将自定义字体打包到jar文件中,并能够将它们嵌入到PDF报告中 我可以先将字体提取到文件系统,然后将BIRT指向文件系统位置,但我想知道是否可以将BIRT配置为直接从类路径加载字体?我查阅了BIRT的源代码,发现无法将BIRT配置为从类路径注册可嵌入字体。BIRT按照fontsConfig.xml中指定的路径注册字体。它使用iText的FontFactory。令人惊讶的是,FontFactory本身可以从类路径注册字体。但是BIRT的开
我可以先将字体提取到文件系统,然后将BIRT指向文件系统位置,但我想知道是否可以将BIRT配置为直接从类路径加载字体?我查阅了BIRT的源代码,发现无法将BIRT配置为从类路径注册可嵌入字体。BIRT按照fontsConfig.xml中指定的路径注册字体。它使用iText的
FontFactory
。令人惊讶的是,FontFactory
本身可以从类路径注册字体。但是BIRT的开发人员可能不知道这个特性,因此BIRT不会注册任何不在文件系统中的字体,即当file#exists()时返回false
幸运的是,FontFactory.register()
是一种静态方法,因此有一个解决方法:我们可以绕过BIRT自行注册字体。在初始化BIRT之前,我们可以执行以下操作:
FontFactory.register("/com/example/fonts/font1.ttf");
FontFactory.register("/com/example/fonts/font2.ttf");
我试过了,字体正确地嵌入到PDF输出中。非常感谢@dened
根据您的回答,我发现自定义字体也可以通过以下方式作为资源加载:
- 将字体复制到resources文件夹(例如,Maven项目的src/main/resources)
- 在BIRT引擎初始化代码中,注册字体而不指定路径。
只需使用文件名,例如:\
导入com.lowagie.text.FontFactory
…
FontFactory.register(“gillsans.ttf”)
FontFactory.register(“GILLUBCD.TTF”)
FontFactory将在resources文件夹中搜索并查找这些文件。这适用于带有iText v2.1.7的BIRT运行时4.4.2
这似乎是一种将非标准字体加载到BIRT运行时引擎的好方法,以便它们在生成的PDF中工作。如果使用这种方法,则不需要将字体添加到system fonts文件夹或JRE/lib/fonts文件夹,也不需要编辑BIRT jars中的fontsConfig.xml文件。。。所有内容都包含在应用程序中。请提供一个示例,说明我们如何将注册字体分配给Birt标签。