Как залить xmp в / Запись метаданных страниц PDF

Я работаю над проектом, который встраивает метаданные на каждую страницу существующего PDF (стандарт PDF / A3). У меня есть xml-файлов столько же, сколько страниц, программа встраивает соответствующий xml-файл в качестве метаданных на страницу.

До сих пор моя программа добавляет запись / Metadata на каждую страницу, используя iText 5, и я также могу добавить простую строку или текст в запись метаданных на каждой странице, и она может отображаться в древовидной структуре PDF в Adobe Acrobat Pro. Вот мой код, в котором добавляется запись / метаданные на страницу:

        writer.addPageDictEntry(PdfName.METADATA, new PdfString("123"));

Пока проблема в том, как добавить xml в запись / Metadata? Мои файлы xml представляют собой простые древовидные структуры, я понятия не имею, как преобразовать файлы xml в PdfObject. На сайтах разработчиков iText говорится, что запись / Metadata на каждой странице должна содержать ссылку на xmp, я понятия не имею, как это сделать. Должен ли я встраивать все XML-файлы вместе и передавать ссылку на часть в запись каждой страницы?


person Xh Wan    schedule 13.02.2017    source источник


Ответы (1)


Метод addPageDictEntry() - не то, что вам нужно. Вам следует попробовать метод setPageXmpMetadata(). См. API документы.

Этот метод принимает byte[]. Убедитесь, что byte[] содержит правильные данные XMP. Этот метод сделает всю тяжелую работу внутренне. То есть: он создаст объект потока, содержащий XML, и добавит ссылку из словаря страниц на этот объект потока. Как вы, наверное, знаете, в PDF запрещено использовать поток PDF как прямой объект.

Если вы хотите сделать это сложным способом, создав объект потока самостоятельно, получив ссылку, добавив ее в PdfWriter, а затем используя эту ссылку как значение записи в словаре страницы, вы можете найти вдохновение в ответе на этот вопрос: Как добавить метаданные XMP на каждую страницу существующего PDF-файла с помощью iTextSharp (или this example), но метод быстрого доступа должен быть намного проще в использовании.

person Bruno Lowagie    schedule 14.02.2017
comment
Спасибо за ваш ответ!! Это действительно очень поможет !!! Прямо сейчас я понял, как заполнить xmp на страницах PDF. Но есть новая проблема, с которой я столкнулся: я устал проверять, является ли мой PDF-файл истинным PDF / A или нет с помощью Adobe Acrobat CC. Однако программное обеспечение сообщает мне, что мой файл PDF не является истинным PDF / A-3A, сообщение об ошибке: свойство XMP предопределено, но не используется в соответствии с определением (XMP 2005). Свойством ошибки является именно purl.org/dc/elements/1.1/dc:title. Я смущен этим, так как не знаю, как решить эту проблему. - person Xh Wan; 28.02.2017
comment
Как можно ответить на этот вопрос, не просматривая PDF? Я могу только догадываться, что у вас есть разница между метаданными в словаре /Info и метаданными в XMP. - person Bruno Lowagie; 28.02.2017
comment
Думаю, вам нужен специалист. Рассматривали ли вы покупку лицензии iText и получение платной поддержки? - person Bruno Lowagie; 04.03.2017