¿Cómo puedo insertar una imagen con iTextSharp en un PDF existente?

Tengo un PDF existente y puedo usar FdFWriter para ingresar a cuadros de texto. Funciona bien. Ahora tengo una imagen. He leído la documentación y he observado muchos ejemplos, pero todos crean nuevos documentos e insertan una imagen. Quiero tomar un PDF existente e insertar una imagen en un campo de imagen o como la imagen del icono de un botón. Lo he intentado pero corrompe el documento.

Necesito poder tomar un documento existente y poner una imagen en él. No quiero abrir, leer, reemplazar y eliminar el original. Estos cambios originales y el nombre “original” solo se refieren al archivo fuente en este contexto. Hay muchos archivos PDF como este que necesitan una imagen.

Gracias por cualquier ayuda.

Editar – Estoy muy agradecido por el código a continuación. Funciona muy bien, pero el problema para mí es que el PDF existente tiene firmas digitales. Cuando el documento se copia de esta manera (en result.pdf) esas firmas, mientras aún están presentes, tienen un número de bytes diferente u otro elemento que está dañado. Esto significa que las firmas, mientras se muestran en result.pdf, tienen un ícono al lado que dice “firma inválida”.

En caso de que importe, estoy usando un panel de firmas de Topaz para crear mis firmas, que tiene su propia seguridad. La mera copia del PDF no lo corromperá, pero el proceso a continuación sí lo hará.

Estoy tratando de poner la imagen en el documento existente, no una copia, que en este caso importa.

Además, con la firma, me refiero a los manuscritos, no a los números de PIN.

Gracias de nuevo.

EDITAR – ¿Se puede usar PdfSignatureAppearance para esto?

EDITAR – Parece que puedo hacerlo con:

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

Si desea cambiar el contenido de un archivo PDF existente y agregar contenido adicional como marcas de agua, números de página, encabezados adicionales, PdfStamper es el objeto que necesita. He utilizado con éxito el siguiente código para insertar una imagen en un archivo pdf existente en una posición absoluta determinada:

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(); } } } 

Cuando inserta la imagen, tiene la posibilidad de cambiar su tamaño. Puede echar un vistazo a la matriz de transformación en la documentación de iTextSharp.

Aquí hay un ejemplo similar que inserta una imagen en la página usando el estampador:

Publicación de la lista de correo de Gmane iTex

Podría resolver mi problema simplemente agregando las siguientes líneas a mi código de firma para agregar una imagen

  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; 

Como estaba firmando documento con firma digital visible, ahora puedo tener propiedades de imagen y de firma digital una al lado de la otra

pdftk puede hacer esto. No es una biblioteca, pero puede llamarlo fácilmente desde su código como .exe.

Ver los comandos de stamp y background : http://www.pdflabs.com/docs/pdftk-man-page/

ref: ¿Cómo hacer combinación de correspondencia en la parte superior de un PDF?