#java #maven #itext #jasper-reports #pdfa
#java #maven #itext #jasper-отчеты #pdfa
Вопрос:
Проблема:
Я пытаюсь создать файл, совместимый с PDF / A-1b, начиная с java, используя JasperReports. Я использую Adobe Acrobat Pro DC для проверки файла с помощью инструмента предполетной проверки, который выдает мне ошибку в отношении поля dc:title
, это скриншот ошибки:
Я пытался установить свойство любым возможным способом, но я все еще получаю эту ошибку и не могу понять, почему. Я пробовал читать на http://purl.org/dc/elements/1.1/dc:title , но я не нашел ничего полезного. У меня есть подозрение по поводу этого отчета относительно метаданных -> дополнительно -> http://purl.org/dc/elements/1.1 , где я вижу, что есть dc:title
пустое и dc:title[1]
заполненное, но я не знаю, как установить первое.
Фрагмент кода
Session session = getMyConnection();
SessionImpl sessionImpl = (SessionImpl) session;
Connection conn = sessionImpl.connection();
String title = "Test title";
Map<String, Object> hm = new HashMap<>();
hm.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session);
hm.put("ID", getTestId();
hm.put("reportTitle", title); //Title here
hm.put("info.title", title); //Title here
JasperReport jasperReport = JasperCompileManager
.compileReport("c:/eglobal/TEST_REPORT.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, hm, conn);
jasperPrint.setProperty(PdfExporterConfiguration.PROPERTY_METADATA_TITLE, title); //Title here
JRPdfExporter exporter = new JRPdfExporter();
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setPdfaConformance(PdfaConformanceEnum.PDFA_1B);
configuration.setIccProfilePath("c:/eglobal/AdobeRGB1998.icc");
configuration.setMetadataTitle(title); //Title here
configuration.setDisplayMetadataTitle(true);
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("c:/eglobal/TEST_REPORT.PDF"));
exporter.setConfiguration(configuration);
exporter.exportReport();
Как вы можете видеть, заголовок настроен всеми возможными способами (см. //Title here
Комментарий): Я пробовал с каждым из них по отдельности, и ничего не изменилось.
Библиотека
Это библиотеки, которые я использую
<jasperVersion>6.16.0</jasperVersion>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>${jasperVersion}</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>${jasperVersion}</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-metadata</artifactId>
<version>${jasperVersion}</version>
</dependency>
Ответ №1:
Читая код JRPdfExporter
внутри библиотеки JasperReport, я нашел комментарий, в котором говорится:
iText 2.1.7 неправильно записывает локализованные свойства и ключевые слова. Возможно, метаданные XMP не соответствуют требованиям, включите библиотеку Adobe XMP для исправления
Итак, я обнаружил внутри отчета Jasper pom.xml
, что существует определенная библиотека Adobe (установленная как необязательная внутри этого pom):
<dependency>
<groupId>com.adobe.xmp</groupId>
<artifactId>xmpcore</artifactId>
<version>5.1.3</version>
</dependency>
Добавление этой зависимости в мой pom решило проблему