Как создать аннотацию XFDF с изображением

Я хотел бы создать на Java аннотацию штампа XFDF, внутри которой будет прозрачное изображение. У меня серьезные проблемы с распознаванием формата, в котором хранится изображение, и как преобразовать входное изображение в эту форму.

Пока я знаю

  • Элемент штампа является дочерним элементом элемента annots и соответствует аннотации Rubber Stamp. Аннотация Резиновый штамп отображает текст или графику, которые должны выглядеть так, как если бы они были проштампованы на странице с помощью резинового штампа. Если присутствует, дочерний элемент внешнего вида (ключ AP в словаре аннотаций) имеет приоритет над атрибутом значка (ключ Name в словаре аннотаций штампа). Модель контента (content-richtext? &contents?&appearance?&popup?)
  • Элемент внешнего вида является дочерним элементом элемента штампа и соответствует ключу AP в словаре аннотаций. Значение представляет собой строку в кодировке base 64. Строка модели содержимого в кодировке Base 64. Атрибуты Нет.

У меня есть пример XFDF, который содержит изображение, когда я декодирую изображение, я вижу такой синтаксис, но, к сожалению, я понятия не имею, какие необработанные данные присутствуют в ‹DATA MODE=RAW ENCODING=HEX› тег.

<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">

Мне удалось создать аннотацию Rubber Stamp с пользовательским изображением в PDF с помощью PDFBox, но, к сожалению, PDFBox, похоже, не поддерживает экспорт такого рода аннотаций в XFDF, они поддерживают только экспорт из форм (AcroForm). Я не знаю другого инструмента на Java, который позволил бы мне его экспортировать, кроме платных.


person Javo    schedule 06.10.2016    source источник


Ответы (3)


Это HEX-представление формата DCT (JPEG). Если вам нужна прозрачная печать изображения, у вас будет две из этих вещей в вашем XFDF: само изображение и маска.

person joelgeraci    schedule 06.10.2016
comment
Это единственный поддерживаемый формат или вы предположили его из примера? Не могли бы вы указать мне на документацию по этому поводу? - person Javo; 07.10.2016
comment
Я предположил это на основе образца, который я сделал, создав собственный штамп из файла PNG с помощью Acrobat DC. Документация по XFDF находится по ссылке ниже partners.adobe.com /public/developer/en/xml/XFDF_Spec_3.0.pdf - person joelgeraci; 07.10.2016
comment
Я пытался преобразовать Base64 в текст, преобразовать Hex в текст и сохранить его как jpg, но это не сработало. Но я допускаю, что мог сделать ошибочное преобразование. Спецификация, на которую вы мне указали, мало что говорит о формате. - person Javo; 07.10.2016
comment
Я нажал Enter слишком рано. Вот полный комментарий ... Я предположил это на основе образца, который я сделал, создав собственный штамп из файла PNG с помощью Acrobat DC. Я предполагаю, что любая из потоковых кодировок для изображений может работать, но даже Acrobat не обязательно поддерживает все, что возможно в спецификации, по моему опыту, лучше следовать тому, что делает Acrobat, а не тому, что указано в спецификации < я>говорит. Документация для XFDF находится по ссылке ниже. partners.adobe.com/public/developer/en/xml/ XFDF_Spec_3.0.pdf - person joelgeraci; 07.10.2016
comment
Я знаю, что это старый пост. Может кто-нибудь сказать мне, как я могу преобразовать HEX-представление формата DCT (JPEG) в IRandomAccessStream в С#? (УВП) - person Gayashan Rathnavibushana; 18.10.2020

Спецификации XFDF не объясняют, для чего нужны эти теги dict. Думаю, они упустили важную часть информации.

Эта ветка сэкономила мне время, чтобы выяснить, почему результирующее изображение base 64 не импортируется в Acrobat. Итак, это XML XOjbect.

Возможно, в спецификациях Acrobat PDF это упоминается.

person chitgoks    schedule 27.10.2016

Добавьте элемент штампа, который выглядит следующим образом:

<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>
person Brian THOMAS    schedule 22.04.2020