Jump to content
Changes to the Jaspersoft community edition download ×

PDF/A PdfXConformanceException All the fonts must be embedded. This one isn't: Helvetica


Otto Hahn
Go to solution Solved by Otto Hahn,

Recommended Posts

I'm using JasperReports Studio 6.3.1 and for coding jasperreports-6.3.1.jar, jasperreports-font.6.3.1.jar, itext-2.1.7.js5.jar

I tried to export a very simple report to PDF/A, witch is only using DejaVu Sans Font from the library.

The Preview looks like this:

view.jpg.447b7eb8dcb6164d9b466e512ae58dd9.jpg

I get this Exeption:

com.lowagie.text.pdf.PdfXConformanceException: All the fonts must be embedded. This one isn't: Helvetica    at com.lowagie.text.pdf.internal.PdfXConformanceImp.checkPDFXConformance(Unknown Source)    at com.lowagie.text.pdf.PdfWriter.addSimple(Unknown Source)    at com.lowagie.text.pdf.PdfContentByte.setFontAndSize(Unknown Source)    at com.lowagie.text.pdf.PdfDocument.writeLineToContent(Unknown Source)    at com.lowagie.text.pdf.ColumnText.go(Unknown Source)    at com.lowagie.text.pdf.ColumnText.go(Unknown Source)    at net.sf.jasperreports.engine.export.JRPdfExporter.writePageAnchor(JRPdfExporter.java:1000)    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:912)    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:537)    at openkv.jasperreports.demo.FontExtensionDemo.exportToPdfA(FontExtensionDemo.java:48)    at openkv.jasperreports.demo.FontExtensionDemo.runDemo(FontExtensionDemo.java:40)    at openkv.jasperreports.demo.FontExtensionDemo.main(FontExtensionDemo.java:32)</pre>[/code]

The Java Source:

package openkv.jasperreports.demo;import java.io.File;import java.net.URL;import org.apache.log4j.BasicConfigurator;import org.apache.log4j.Level;import org.apache.log4j.Logger;import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.JREmptyDataSource;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.export.JRPdfExporter;import net.sf.jasperreports.export.SimpleExporterInput;import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;import net.sf.jasperreports.export.SimplePdfExporterConfiguration;import net.sf.jasperreports.export.type.PdfaConformanceEnum;public class FontExtensionDemo {    private final static String ICC_FILE = "/openkv/framework/jasperreports/engine/export/sRGB_v4_ICC_preference.icc";    private final static String reportName = "SimpleFontExtension";    public static void main(String[] args) {        BasicConfigurator.configure();        Logger.getRootLogger().setLevel(Level.DEBUG);        FontExtensionDemo demo = new FontExtensionDemo();        try {            demo.runDemo();        } catch (Throwable e) {            e.printStackTrace();        }    }    public void runDemo() throws Throwable {        JasperPrint jasperPrint = fillReport();        exportToPdfA(jasperPrint);    }    private void exportToPdfA(JasperPrint jasperPrint) throws JRException {        JRPdfExporter exporter = new JRPdfExporter();        exporter.setExporterInput(new SimpleExporterInput(jasperPrint));        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("H:" + reportName + ".pdf"));        exporter.setConfiguration(this.getPdfAExporterConfiguration());        exporter.exportReport();    }    private SimplePdfExporterConfiguration getPdfAExporterConfiguration() {        SimplePdfExporterConfiguration exporterConfiguration = new SimplePdfExporterConfiguration();        exporterConfiguration.isTagged();        exporterConfiguration.setPdfaConformance(PdfaConformanceEnum.PDFA_1A);        exporterConfiguration.setIccProfilePath(getClass().getResource(ICC_FILE).getPath());        return exporterConfiguration;    }    private JasperPrint fillReport() throws JRException {        JRDataSource dataSource = new JREmptyDataSource(1);        return JasperFillManager.fillReport(getSourceFileName(), null, dataSource);    }    private String getSourceFileName() {        String reportBasePath = "/openkv/jasperreports/demo/report";        URL reportResource = FontExtensionDemo.class.getResource(reportBasePath + "/FontExtension/" + reportName + ".jasper");        return new File(reportResource.getPath()).getAbsolutePath();    }}[/code]

 

The Report Source:

<?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1  --><!-- 2017-06-16T11:09:44 --><jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="SimpleFontExtension" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="33b3b27b-bc99-4208-a8fc-1f05d77efd89">    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>    <queryString>        <![CDATA[]]>    </queryString>    <background>        <band splitType="Stretch"/>    </background>    <detail>        <band height="103" splitType="Stretch">            <staticText>                <reportElement x="0" y="0" width="550" height="41" uuid="57a35ef2-2c45-4e6a-a302-9c3b083e2bcb"/>                <textElement textAlignment="Center" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="34" isBold="true" isItalic="false" isUnderline="true"/>                </textElement>                <text><![CDATA[DejaVu Sans Font Demo]]></text>            </staticText>            <staticText>                <reportElement key="" x="68" y="46" width="52" height="19" uuid="cd391c43-485c-4415-a71d-81930765738d"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="true" isUnderline="false"/>                </textElement>                <text><![CDATA[bold]]></text>            </staticText>            <staticText>                <reportElement key="" x="68" y="65" width="52" height="19" uuid="18fa45fa-2346-4d7d-8447-f76261754fef"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="false" isItalic="true" isUnderline="false"/>                </textElement>                <text><![CDATA[italic]]></text>            </staticText>            <staticText>                <reportElement key="" x="68" y="84" width="52" height="19" uuid="76f3ac47-7018-4227-8de7-34a9a9f3a603"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="false" isItalic="false" isUnderline="false"/>                </textElement>                <text><![CDATA[Normal]]></text>            </staticText>            <staticText>                <reportElement key="" x="130" y="46" width="110" height="19" uuid="65aae4f2-58c1-446a-941f-657fd7887916"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="true" isUnderline="true"/>                </textElement>                <text><![CDATA[bold Underline]]></text>            </staticText>            <staticText>                <reportElement key="" x="130" y="65" width="110" height="19" uuid="d2c5cbbd-d088-40b8-a1bc-fa68156dbf07"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="false" isItalic="true" isUnderline="true"/>                </textElement>                <text><![CDATA[italic Underline]]></text>            </staticText>            <staticText>                <reportElement key="" x="130" y="84" width="110" height="19" uuid="0859e64f-c9fd-4286-9303-cf76182b4734"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="false" isItalic="false" isUnderline="true"/>                </textElement>                <text><![CDATA[Normal Underline]]></text>            </staticText>            <staticText>                <reportElement key="" x="250" y="46" width="80" height="19" uuid="1af0605b-9669-42f9-af2c-41990708c7f8"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="true" isItalic="true" isUnderline="false"/>                </textElement>                <text><![CDATA[bold Italic]]></text>            </staticText>            <staticText>                <reportElement key="" x="340" y="46" width="150" height="19" uuid="fddc7585-5d20-4599-b64c-fd7859018020"/>                <textElement textAlignment="Left" verticalAlignment="Middle">                    <font fontName="DejaVu Sans" size="12" isBold="true" isItalic="true" isUnderline="true"/>                </textElement>                <text><![CDATA[bold Italic Underline]]></text>            </staticText>        </band>    </detail></jasperReport>[/code]

If I export the Report without this line:

exporterConfiguration.setPdfaConformance(PdfaConformanceEnum.PDFA_1A);[/code]

I can see the unembedded Helvetica Font:

fonts.jpg.97753da858d2ba70df12d99ada40593a.jpg

 

I don't need or use this font in my report. How can I turn off this.

 

Link to comment
Share on other sites

  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

  • Solution

I am amazed that no one is answering this specific question.
So I try it myself:

create a jasperreports.properties file in the root path of the project:

# loads/override properties from default.jasperreports.propertiesnet.sf.jasperreports.default.pdf.font.name=net/sf/jasperreports/fonts/dejavu/DejaVuSans.ttfnet.sf.jasperreports.default.pdf.embedded=true[/code]

 or change the default font by adding this Method and call it before export to PDF/A:

public void setDefaultPdfFontEmbedded() {    JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();    jasperReportsContext.setProperty("net.sf.jasperreports.default.pdf.font.name", "net/sf/jasperreports/fonts/dejavu/DejaVuSans.ttf");    jasperReportsContext.setProperty("net.sf.jasperreports.default.pdf.embedded", "true");}[/code]

Please correct me if this is not true!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...