Переход с itext5 на itext7: как заменить определенное изображение внутри pdf?

Я просто оцениваю iText7 для небольшого инструмента, который нам нужно написать о добавлении/замене водяных знаков изображения внутри файлов PDF.

Я мог бы заставить часть добавления работать с образцами с официального сайта, но я изо всех сил пытаюсь удалить/заменить добавленные изображения.

Здесь есть аналогичный пост для itext5: https://stackoverflow.com/a/4308500

Но я не могу адаптировать это к itext7 .. API, похоже, сильно изменился, и официальная документация тоже не очень полезна (или я просто не нахожу подходящего места для просмотра)

По сути, мне нужно найти собственное добавленное изображение из pdf-файла, что означает его идентификацию либо по идентификатору, который я мог бы дать ему во время добавления, либо по его высоте/ширине (это было бы достаточно уникальным для нас).

Любая помощь будет очень кстати!

Обновить

Код для добавления водяного знака (может быть интересно, как пометить изображение, чтобы его потом было легче найти, но в целом это уже работает нормально):

var reader = new PdfReader($"c:\\testconv\\test.pdf");
PdfDocument pdfDoc = new PdfDocument(reader, new PdfWriter($"c:\\testconv\\test+watermark.pdf"));

Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDoc.GetNumberOfPages();

iText.IO.Image.ImageData myImageData = ImageDataFactory.Create($"c:\\testconv\\label@0,25x.jpg");

var height = 0.45f/2.54f*72f;
for (int i = 1; i <= n; i++)
{
    var page = pdfDoc.GetPage(i);
    pageSize = page.GetPageSizeWithRotation();
    var top =  1.2f/2.54f*72f - height;
    var left = pageSize.GetWidth() - myImageData.GetWidth() / myImageData.GetHeight() * height - 1.2f / 2.54f * 72f;
    canvas = new PdfCanvas(page);
    canvas.AddImage(myImageData, left, top, height, false, false);
}
pdfDoc.Close();

для повторного поиска/удаления метки у меня пока нет рабочего кода:

var page = pdfDoc.GetPage(i);
var res = page.GetResources();
var xobj = res.GetResource(PdfName.XObject);

foreach (var xobject in xobj.KeySet())
{
    PdfObject obj = xobj.Get(xobject);
    if (obj.IsIndirect())
    {
        var stream = xobj.GetAsStream(xobject);
        var subtype = stream.GetAsName(PdfName.Subtype);
        if (PdfName.Image.Equals(subtype)) //direct image
        {

        }
        else if (PdfName.Form.Equals(subtype)) // check for nested image?
        {

        }                        
    }
}

Я не могу понять, как на самом деле найти изображения, а затем сравнить их свойства, чтобы выяснить, является ли это правильным или неправильным для удаления (например, по имени или идентификатору или свойствам, таким как ширина/высота.


person Mikk    schedule 23.01.2017    source источник
comment
Пожалуйста, добавьте код, который у вас уже есть.   -  person Amedee Van Gasse    schedule 23.01.2017
comment
В частности, покажите код, который вы используете для добавления водяного знака.   -  person mkl    schedule 23.01.2017
comment
спасибо за комментарии, пожалуйста, проверьте мой обновленный вопрос, чтобы найти код, который у меня есть.   -  person Mikk    schedule 23.01.2017