2009-02-24 51 views
36

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.¿Cómo puedo insertar una imagen con iTextSharp en un PDF existente?

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 siguiente código. 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 sea importante, estoy usando un bloc de firmas 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.

También, con la firma, me refiero a los manuscritos, no a los números de los pines.

Gracias de nuevo.

EDITAR - ¿Se puede utilizar PdfSignatureAppearance para esto?

EDITAR - Me parece ser capaz de hacerlo con:

var = new estampador PdfStamper (lector, outputPdfStream, '1', true);

+0

Esto también puede ser de utilidad: http://stackoverflow.com/questions/7115242/insert-an-image-in-pdf-using-itextsharp –

Respuesta

56

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 código siguiente para insertar una imagen en un archivo PDF existente a una posición absoluta dada:

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

Al insertar la imagen que tiene la posibilidad de cambiar su tamaño. Puede echar un vistazo al transformation matrix en la documentación de iTextSharp.

+0

¿Hay una manera de hacerlo donde se coloca el imagen en el original en lugar de result.pdf? Gracias por esta respuesta – johnny

+0

La razón es porque el documento tiene firmas digitales que están dañadas por el proceso. – johnny

+3

La firma digital garantiza que el documento no ha sido manipulado. No puede agregar contenido sin renunciar al documento. –

1

pude resolver mi problema, simplemente añadiendo las líneas siguientes a la firma de código 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 firma digital una al lado de la otra

+0

El problema de la operación era agregar una imagen a un PDF existente, ya firmado, para no establecer la imagen de una visualización de firma. – mkl

+0

Creo que agregar cualquier cosa al documento firmado invalida el documento digital firmado. por favor corrígeme si estoy equivocado –

+0

Para detalles cf. http://stackoverflow.com/documentation/pdf/5161/integrated-pdf-signatures/18524/allowed-and-disallowed-changes-to-a-signed-document#t=20170227100646546925 – mkl

Cuestiones relacionadas