Как я могу вставить изображение с iTextSharp в существующий PDF файл?
У меня есть существующий PDF, и я могу использовать FdFWriter для ввода в текстовые поля. Это работает хорошо. Теперь у меня есть изображение. Я прочитал документацию и просмотрел множество примеров, но все они создают новые документы и вставляют изображение. Я хочу взять существующий PDF и вставить изображение в поле изображения или как изображение значка кнопки. Я попытался, но он развращает документ.
Мне нужно иметь возможность взять существующий документ и поместить на него изображение. Я не хочу открывать, читать, заменять и удалять оригинал. Это первоначальное изменение и имя "оригинал" означает только исходный файл в этом контексте. Существует много PDF файлов, для которых требуется изображение.
Спасибо за любую помощь.
Изменить - я очень благодарен за приведенный ниже код. Он отлично работает, но проблема для меня в том, что существующий PDF имеет цифровые подписи на нем. Когда документ копируется так (в result.pdf), эти подписи, пока все еще присутствуют, имеют другой байт-счет или другой элемент, который поврежден. Это означает, что подписи, пока они появляются на result.pdf, имеют рядом с ними значок, в котором указывается "недопустимая подпись".
В случае, если это имеет значение, я использую подпишущую панель Topaz для создания моих подписей, у которой есть своя безопасность. Простое копирование PDF не приведет к его повреждению, но процесс ниже будет.
Я пытаюсь поместить изображение в существующий документ, а не его копию, что в этом случае имеет значение.
Кроме того, подписи, я имею в виду рукописные, а не номера контактов.
Еще раз спасибо.
EDIT - Может ли PdfSignatureAppearance использоваться для этого?
EDIT - я, похоже, могу это сделать:
var stamper = new PdfStamper (reader, outputPdfStream, '1', true);
Ответы
Ответ 1
Если вы хотите изменить содержимое существующего файла 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.
Ответ 2
Вот аналогичный пример, который вставляет изображение на страницу с помощью шаблона:
Сообщение о рассылке Gmane iTex
Ответ 3
Я мог бы решить свою проблему, просто добавив следующие строки к моему коду подписи, чтобы добавить изображение
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;
Поскольку я подписывал документ с видимой цифровой подписью, теперь у меня могут быть как изображения, так и свойства цифровой подписи
Ответ 4
pdftk может это сделать. Это не библиотека, но вы можете легко назвать ее из своего кода как .exe.
См. команды stamp
и background
:
http://www.pdflabs.com/docs/pdftk-man-page/
ref: Как выполнить слияние писем поверх PDF?