java - 将 jasperreport 导出为 .pdf 时如何设置 jasperreport 字体

标签 java jasper-reports

当jasperreport在java应用程序中导出为.pdf时,我们如何设置jasperreport的字体。

最佳答案

我需要将西里尔字体导出到 jasperreport 中以生成 pdf。字体必须包含在 jar 中。在 jasperreport v5.6.1 中,我解决了这个问题:
将“ttf”文件放入“默认包”中。
将 jasperreport_extension.properties 放入“默认包”中:
net.sf.jasperreports.extension.registry.factory.ytr paymentorderpdffonts=testpdf.YtrJasperFontExtensionFactory
将我的字体扩展类“YtrJasperFontExtensionFactory”放入包“testpdf”中:

package testpdf;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.sf.jasperreports.engine.DefaultJasperReportsContext;

import net.sf.jasperreports.engine.JRPropertiesMap;
import net.sf.jasperreports.engine.fonts.FontFamily;
import net.sf.jasperreports.engine.fonts.SimpleFontFace;
import net.sf.jasperreports.engine.fonts.SimpleFontFamily;
import net.sf.jasperreports.extensions.ExtensionsRegistry;
import net.sf.jasperreports.extensions.ExtensionsRegistryFactory;



public class YtrJasperFontExtensionFactory implements ExtensionsRegistryFactory, ExtensionsRegistry {
    private List <FontFamily> families;

    @Override
    public ExtensionsRegistry createRegistry(String string, JRPropertiesMap jrpm) {
        return new YtrJasperFontExtensionFactory();
    }

    @Override
    public List getExtensions(Class type) {
        if (type.equals(FontFamily.class)) {
            if (families == null) {
                families = new ArrayList<FontFamily>();
                loadFonts();
            }
            return new ArrayList<FontFamily>(families);
        } else {
            return Collections.emptyList();
        }
    }

    private void loadFonts() {                 
            DefaultJasperReportsContext dJRC = DefaultJasperReportsContext.getInstance();

                SimpleFontFamily family = new SimpleFontFamily();
                family.setName("Times New Roman");
                family.setPdfEmbedded(true); 

                SimpleFontFace sffNormal = new SimpleFontFace(dJRC);
                sffNormal.setTtf("Times_New_Roman.ttf");
                family.setNormalFace(sffNormal);

                family.setPdfEncoding("Cp1251");
                families.add(family);
    }
}

现在从流(jar)加载字体。

关于java - 将 jasperreport 导出为 .pdf 时如何设置 jasperreport 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152727/

相关文章:

java - JasperReports 与 iReport : setNoDataMessage not working

java - 使用 JasperReport API

maven-2 - Jasper Reports 的 Maven 存储库是什么?

java - 是否可以让 hibernate 生成用于创建表索引的 SQL 代码?

java - 一步一步谷歌单点登录(java)?

java - 从 Web 表中获取行数 - Selenium WebDriver Java

c# - 从 C# 在 JasperServer 上运行报告

jasper-reports - 将值从主报告传递到子报告?

Java Apache CLI 可选命令行参数不起作用

java - 有什么方法可以在 Eclipse 中创建 wicket 项目