JAVA中如何导出PDF_java – 如何将报告导出为PDF / A-1a,PDF / A-1b?

本文详细介绍了如何在JAVA中使用JasperReports库导出符合PDF/A-1a和PDF/A-1b标准的报告。讨论了所需的库版本、设置PDF/A一致性、处理字体、去除透明对象以及设置元数据和标记等关键步骤,并提供了Java代码示例和JRXML配置选项。示例中展示了从CSV数据生成报告并导出为PDF/A的完整流程。
摘要由CSDN通过智能技术生成

在jasper-report中生成PDF / A,包含许多陷阱,并且在某些版本的jasper-report中不受支持.这就是为什么我决定通过这个问答帖子,指出将带图表的简单报告导出为PDF / A所需的步骤和库版本

示例数据(usersRep.csv)

+----------------+--------+

| User | Rep |

+----------------+--------+

| Jon Skeet | 854503 |

| Darin Dimitrov | 652133 |

| BalusC | 639753 |

| Hans Passant | 616871 |

| Me | 5640 |

+----------------+--------+

示例jrxml(reputation.jrxml)

要导出为PDF的Java代码(信誉.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();

这会将报告导出为pdf,生成PDF / A-1a需要做什么?

解决方法:

JasperReports Library 4.1.2.3或更高版本is needed(6.0.0中已停止支持,最后请参见NullPointerException).

这些步骤需要生成PDF / A,它们既可以通过java代码实现,也可以通过将jrxml属性设置为root标签(jasper-server support)来实现.我将展示两者,但只需要一种方法.

设置PDF / A一致性

java的

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

JRXML

to avoid JRPdfaIccProfileNotFoundException: The ICC profile is not

available to the JVM

java的

configuration.setIccProfilePath("srgb.icc");

JRXML

如果你还有错误

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

在jrxml中包含一个默认样式,表示字体扩展中包含的fontName,例如

删除透明对象和图层(可选内容组),它们是not allowed

to avoid PdfXConformanceException: Transparency is not allowed

在示例中,图表元素必须是不透明的,并且为了避免标签上的透明度,您可以实现JRChartCustomizer

public class NoTransparencyCustomizer implements JRChartCustomizer{

@Override

public void customize(JFreeChart chart, JRChart jrchart) {

PiePlot plot = (PiePlot) chart.getPlot();

plot.setLabelShadowPaint(Color.GRAY);

}

}

设置标记和标记语言(PDF / A-1b不需要)

java的

configuration.setTagged(true);

configuration.setTagLanguage("en-us");

JRXML

结果

这是实现上述结果的结果,将fontName切换为DejaVu Sans并使用捆绑的jasperreports-fonts.jar作为font-extension.它已在pdf-tools成功验证PDF / A-1a和PDF / A-1b

LEyj1.png

对我来说没有一块蛋糕

停止支持

在jasper报告版本6.0.0中,始终抛出com.itextpdf.text.pdf.internal.PdfA1Checker.checkPdfObject中的NullPointerException.这已在6.0.4及以上解决,见Jasper report tracker.

标签:export-to-pdf,java,pdf-generation,jasper-reports,pdfa

来源: https://codeday.me/bug/20190925/1815976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值