Как создать аннотацию XFDF с изображением
Я хотел бы сгенерировать в Java XFDF Stamp Annotation, которая будет иметь прозрачное изображение внутри. У меня серьезные проблемы с распознаванием формата, в котором хранится изображение, и с тем, как преобразовать мое входное изображение в эту форму.
Пока знаю
- Элемент штампа является дочерним элементом элемента annots и соответствует аннотации "Штамп". Аннотация "Штамп" отображает текст или графику, которые должны выглядеть так, как если бы они были выбиты на странице штампом. При наличии дочерний элемент внешнего вида (ключ AP в словаре аннотаций) имеет приоритет над атрибутом значка (ключ Name в словаре аннотаций штампов). Модель содержимого (Content-Richtext? & Content? & Внешний вид? & Popup?)
- Элемент Внешний вид является дочерним элементом элемента штампа и соответствует ключу AP в словаре аннотаций. Значение представляет собой строку в кодировке Base 64. Модель содержимого Base 64, закодированная строка. Атрибуты Нет.
У меня есть пример XFDF, который содержит изображение, когда я декодирую изображение, я вижу такой синтаксис, но, к сожалению, я понятия не имею, какой тип необработанных данных присутствует в тег.
<DICT KEY="AP">
<STREAM KEY="N">
<ARRAY KEY="BBox">
<FIXED VAL="250"/>
<FIXED VAL="550"/>
<FIXED VAL="400"/>
<FIXED VAL="575"/>
</ARRAY>
<INT KEY="FormType" VAL="1"/>
<INT KEY="Length" VAL="35"/>
<DICT KEY="Resources">
<DICT KEY="XObject">
<STREAM KEY="Im1">
<INT KEY="BitsPerComponent" VAL="8"/>
<NAME KEY="ColorSpace" VAL="DeviceRGB"/>
<NAME KEY="Filter" VAL="FlateDecode"/>
<INT KEY="Height" VAL="150"/>
<INT KEY="Length" VAL="1907"/>
<STREAM KEY="SMask">
<INT KEY="BitsPerComponent" VAL="8"/>
<NAME KEY="ColorSpace" VAL="DeviceGray"/>
<NAME KEY="Filter" VAL="FlateDecode"/>
<INT KEY="Height" VAL="150"/>
<INT KEY="Length" VAL="5690"/>
<NAME KEY="Subtype" VAL="Image"/>
<NAME KEY="Type" VAL="XObject"/>
<INT KEY="Width" VAL="300"/>
<DATA MODE="RAW" ENCODING="HEX">
Мне удалось создать аннотацию резинового штампа с пользовательским изображением в PDF с помощью PDFBox, но, к сожалению, PDFBox, похоже, не поддерживает экспорт аннотаций такого типа в XFDF, они поддерживают только экспорт из форм (AcroForm). Я не знаю другого инструмента в Java, который позволил бы мне его экспортировать, кроме платных.
2 ответа
Это шестнадцатеричное представление формата DCT (JPEG). Если вам нужна печать с прозрачным изображением, у вас в XFDF будет две вещи: само изображение и маска.
Добавьте элемент штампа, который выглядит следующим образом:
<stamp creationdate="D:20200422160322Z" flags="print" date="D:20200422160322Z" icon="Unknown" page="0" rect="276.675,778.525,318.325,841">
<imagedata>data:image/png;base64,iVBORw0 . . . FTkSuQmCC</imagedata>
<apref y="841" x="276.675" gennum="2" objnum="198" />
</stamp>
Спецификации XFDF не объясняют, для чего предназначены эти теги. Думаю, они не учли важную часть информации.
Этот поток сэкономил мне время, чтобы выяснить, почему полученный образ base 64 не импортируется в Acrobat. Так что это XML XOjbect.
Может быть, спецификации PDF акробата упоминают об этом.