Reputation: 3578
How can we set the font of a jasperreport when it is exported into a .pdf in a java application.
Upvotes: 0
Views: 3807
Reputation: 11
I need to export cyrillic fonts into jasperreport fo generate pdf. Fonts must be included into jar. In jasperreport v5.6.1 I resolve this so:
Put "ttf" file into "default package".
Put jasperreport_extension.properties into "default package":
net.sf.jasperreports.extension.registry.factory.ytrpaymentorderpdffonts=testpdf.YtrJasperFontExtensionFactory
Put mine class "YtrJasperFontExtensionFactory" for font extension into package "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);
}
}
And fonts loaded from stream(jar) now.
Upvotes: 1
Reputation: 6969
You can try to set the font as a parameter. Then you can pass the font names to be set at runtime. Or just adapt this. http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=5860
Upvotes: 0