Как я могу вставить изображение с iTextSharp в существующий PDF? - PullRequest
41 голосов
/ 25 февраля 2009

У меня есть существующий PDF, и я могу использовать FdFWriter для ввода в текстовые поля. Это работает хорошо. Теперь у меня есть изображение. Я прочитал документацию и посмотрел много примеров, но все они создают новые документы и вставляют изображение. Я хочу взять существующий PDF-файл и вставить изображение в поле изображения или в виде значка кнопки. Я пытался, но это портит документ.

Мне нужно иметь возможность взять существующий документ и наложить на него изображение. Я не хочу открывать, читать, заменять и удалять оригинал. Этот оригинал изменяется, и имя «оригинал» означает только исходный файл в этом контексте. Есть много таких файлов PDF, которым нужно изображение.

Спасибо за любую помощь.

Редактировать - я очень благодарен за код ниже. Это прекрасно работает, но проблема для меня в том, что в существующем PDF есть цифровые подписи. Когда документ копируется таким образом (в result.pdf), эти подписи, хотя и присутствуют, имеют другой счетчик байтов или другой поврежденный элемент. Это означает, что подписи, в то время как они отображаются в файле result.pdf, рядом с ними имеется значок, обозначающий «недопустимая подпись».

В случае, если это имеет значение, я использую панель подписи Topaz для создания своих подписей, которые имеют свою собственную безопасность. Простое копирование PDF не повредит его, но процесс, описанный ниже, будет.

Я пытаюсь поместить изображение в существующий документ, а не в его копию, что в данном случае имеет значение.

Кроме того, под подписью я имею в виду рукописные, а не пин-коды.

Еще раз спасибо.

РЕДАКТИРОВАТЬ - Может ли PdfSignatureAppearance использоваться для этого?

РЕДАКТИРОВАТЬ - Кажется, я могу сделать это с:

var stamper = new PdfStamper (reader, outputPdfStream, '1', true);

Ответы [ 4 ]

67 голосов
/ 25 февраля 2009

Если вы хотите изменить содержимое существующего файла PDF и добавить дополнительный контент, такой как водяные знаки, номера страниц, дополнительные заголовки, PdfStamper - это нужный вам объект. Я успешно использовал следующий код для вставки изображения в существующий файл PDF в заданную абсолютную позицию:

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main(string[] args)
    {
        using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            var reader = new PdfReader(inputPdfStream);
            var stamper = new PdfStamper(reader, outputPdfStream);
            var pdfContentByte = stamper.GetOverContent(1);

            Image image = Image.GetInstance(inputImageStream);
            image.SetAbsolutePosition(100, 100);
            pdfContentByte.AddImage(image);
            stamper.Close();
        }
    }
}

Когда вы вставляете изображение, у вас есть возможность изменить его размер. Вы можете взглянуть на матрицу преобразования в документации iTextSharp.

1 голос
/ 26 февраля 2017

Я мог бы решить мою проблему, просто добавив следующие строки в мой код подписи, чтобы добавить изображение

 var image = iTextSharp.text.Image.GetInstance(@"C:\Users\sushil\Documents\sansign.jpg");
appearance.Acro6Layers = true;
appearance.SignatureGraphic = image;
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

Поскольку я подписывал документ видимой цифровой подписью, теперь я могу иметь одновременно свойства изображения и цифровой подписи

1 голос
/ 05 марта 2010

Вот аналогичный пример, который вставляет изображение на страницу, используя штамп:

Почтовый список Gmane iTex

0 голосов
/ 25 февраля 2011

pdftk может сделать это. Это не библиотека, но вы можете легко вызвать ее из своего кода как .exe.

См. stamp и background команды: http://www.pdflabs.com/docs/pdftk-man-page/

ref: Как сделать слияние почты поверх PDF?

...