Проблема соответствия PDF / A-1b с dc: заголовок

#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 решило проблему