Добавление внешних изображений в PDF с помощью iText

Мне сложно понять, как добавить внешнее изображение (на которое ссылается URL-адрес) в PDF-файл с помощью iText. Возможно ли такое?

В спецификации PDF в 7.1.5 говорится, что вы должны иметь возможность ссылаться на PDF-файл через URL-адрес, используя спецификацию URL-адреса. Вот что у меня есть на данный момент:

PdfFileSpecification pdfSpec = 
    PdfFileSpecification.url(writer, "http://www.someurl.com/test.jpg");

StringBufferInputStream sbis = new StringBufferInputStream("");   
PdfStream dict = new PdfStream(sbis, writer);
dict.put(PdfName.FILTER, PdfName.DCTDECODE)
dict.put(PdfName.TYPE, PdfName.XOBJECT);
dict.put(PdfName.SUBTYPE, PdfName.IMAGE);
dict.put(PdfName.WIDTH, new PdfNumber(100));
dict.put(PdfName.HEIGHT, new PdfNumber(100));
dict.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
dict.put(PdfName.LENGTH, new PdfNumber(0));
dict.put(PdfName.F, pdfSpec);

PdfIndirectObject img = writer.addToBody(dict);

Я знаю, что мне все еще нужно убедиться, что цветовое пространство добавлено и все такое, но сейчас моя главная забота - это фактически поместить это изображение в тело документа. Я не могу понять, как это сделать ... похоже, я не могу получить ссылку на PdfPage или словарь ресурсов или что-то еще. Возможно ли это с помощью iText?

Кстати, это упражнение бесполезно, если я собираюсь получить предупреждение системы безопасности, когда представление пытается загрузить изображение. Кто-нибудь знает, так ли это?


person MikeQ    schedule 02.12.2009    source источник
comment
Также - если такая низкоуровневая операция невозможна в iText, есть ли другая библиотека PDF, которая упрощает это?   -  person MikeQ    schedule 03.12.2009
comment
Основываясь на вашем комментарии ниже, вы действительно пытаетесь отслеживать, когда документ открывается пользователем. Вот пример того, как добавить код для выполнения активного вызова URL-адреса: stackoverflow.com/questions/8099927/   -  person CobaltBlue    schedule 25.01.2014


Ответы (1)


Внешний контент описан в спецификации PDF, но почти ни один PDF-процессор не поддерживает их. К настоящему времени Acrobat 9 поддерживает эту функцию, но я был бы очень осторожен с этой функцией: ваши клиенты или пользователи могут не видеть указанное содержимое.

person khkremer    schedule 04.12.2009
comment
Хм, большое спасибо, это помогло. Что я действительно пытаюсь сделать, так это просто заставить документ связаться с сервером в фоновом режиме (просто собирался вставить изображение размером 1 пиксель). Я работаю с клиентом, который хочет создать некоторые конфиденциальные документы для своих клиентов и определить, копируются ли они повсюду. - person MikeQ; 05.12.2009
comment
... и, конечно же, я быстро обнаружил, что программа для чтения Adobe имеет защиту от подобных вещей, начиная с версии 7 (она показывает предупреждение системы безопасности, что хорошо). - person MikeQ; 10.12.2009