¿Cómo puedo exportar el informe a PDF / A-1a, PDF / A-1b?

Generar PDF / A en jasper-report, contiene numerosas trampas y no es compatible con algunas versiones de jasper-report. Esta es la razón por la que he decidido aprobar esta publicación de preguntas y respuestas, que indica los pasos y la versión de la biblioteca necesarios para exportar un informe simple con un gráfico a PDF / A.

Datos de muestra (usersRep.csv)

+----------------+--------+ | User | Rep | +----------------+--------+ | Jon Skeet | 854503 | | Darin Dimitrov | 652133 | | BalusC | 639753 | | Hans Passant | 616871 | | Me | 5640 | +----------------+--------+ 

Muestra jrxml (reputation.jrxml)

                                                                                             

Código Java para exportar a PDF (reputation.pdf)

 JasperReport report = JasperCompileManager.compileReport("reputation.jrxml"); JRCsvDataSource datasource = new JRCsvDataSource("usersRep.csv"); datasource.setFieldDelimiter(';'); datasource.setUseFirstRowAsHeader(true); JasperPrint jasperPrint = JasperFillManager.fillReport(report, new HashMap(),datasource); JRPdfExporter exporter = new JRPdfExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("reputation.pdf")); SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); configuration.setMetadataAuthor("Me and only me"); exporter.setConfiguration(configuration); exporter.exportReport(); 

Esto exporta el informe a un pdf, ¿qué debo hacer para generar un PDF / A-1a?

Se necesita JasperReports Library 4.1.2.3 o superior (con soporte discontinuado en 6.0.0, vea NullPointerException al final).

Estos pasos son necesarios para generar un PDF / A, se pueden lograr tanto con el código java o estableciendo la property jrxml en la etiqueta raíz (soporte jasper-server). Mostraré ambos pero solo un método es necesario .

Establecer PDF / A Conformidad

Java

 configuration.setPdfaConformance(PdfaConformanceEnum.PDFA_1A); // or PdfaConformanceEnum.PDFA_1B 

jrxml

  

Establecer el perfil ICC

para evitar JRPdfaIccProfileNotFoundException: The ICC profile is not available to the JVM

Java

 configuration.setIccProfilePath("srgb.icc"); 

jrxml

  

Incrustar todas las fonts utilizadas en los informes, utilizando extensiones de fuente

Si todavía tienes un error

 com.lowagie.text.pdf.PdfXConformanceException: All the fonts must be embedded. This one isn't: Helvetica 

incluir un estilo predeterminado en jrxml que indique fontName que se incluye en la extensión de fuente, por ejemplo

  

Eliminar objetos y capas transparentes (grupos de contenido opcionales) no están permitidos

para evitar PdfXConformanceException: Transparency is not allowed

En el ejemplo, el elemento del gráfico debe ser Opaque y para evitar la transparencia en las tags puede implementar un JRChartCustomizer

 public class NoTransparencyCustomizer implements JRChartCustomizer{ @Override public void customize(JFreeChart chart, JRChart jrchart) { PiePlot plot = (PiePlot) chart.getPlot(); plot.setLabelShadowPaint(Color.GRAY); } } 

Establecer el idioma etiquetado y etiquetado (innecesario para PDF / A-1b)

Java

 configuration.setTagged(true); configuration.setTagLanguage("en-us"); 

jrxml

   

Resultado

Este es el resultado de la implementación de lo anterior, cambiar fontName a DejaVu Sans y usar el paquete jasperreports-fonts.jar como fuente-extensión. Se ha validado con éxito en las herramientas de PDF para PDF / A-1a y PDF / A-1b

Resultado

Ninguna parte del pastel para mí

Soporte descontinuado En la versión de informe de jasper NullPointerException at com.itextpdf.text.pdf.internal.PdfA1Checker.checkPdfObject , siempre se lanzó una NullPointerException at com.itextpdf.text.pdf.internal.PdfA1Checker.checkPdfObject . Esto se ha resuelto en 6.0.4 y superior, consulte el rastreador de informes de Jasper .

    Intereting Posts