Estoy usando iTextSharp para trabajar con archivos Pdf. Quiero añadir imagen de la firma de la Firma de campo sin firmar digitalmente el documento de (sin participación alguna de certificado).

Es posible? Soy capaz de trabajar con la firma digital, pero también quiero agregar sólo la imagen de firma en firma de campo sin ningún tipo de uso de los certificados.

ACTUALIZACIÓN:

Escribir ahora tengo código siguiente.

//Set PDF Reader and PDF Stamper
PdfReader reader = new PdfReader(sourceDocument);

//File stream where PDF will write
FileStream fout = new FileStream(destinationPath, FileMode.Create, FileAccess.ReadWrite);
PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '
//Set PDF Reader and PDF Stamper
PdfReader reader = new PdfReader(sourceDocument);
//File stream where PDF will write
FileStream fout = new FileStream(destinationPath, FileMode.Create, FileAccess.ReadWrite);
PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', null, true);
//Set PDF Appearance              
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
iTextSharp.text.Image signatureFieldImage = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Png);
appearance.SignatureGraphic = signatureFieldImage;
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC;
appearance.SetVisibleSignature(signatureFieldName);
stamper.Close();
reader.Close();
fout.Close();
'
, null, true); //Set PDF Appearance PdfSignatureAppearance appearance = stamper.SignatureAppearance; iTextSharp.text.Image signatureFieldImage = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Png); appearance.SignatureGraphic = signatureFieldImage; appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC; appearance.SetVisibleSignature(signatureFieldName); stamper.Close(); reader.Close(); fout.Close();

Pero cuando intento ejecutarlo, se da el siguiente error:

Firma definido. Debe ser cerrado en PdfSignatureAppearance

  • Después de agregar una apariencia a la firma de campo, el campo de firma aún se muestra (en la ficha firma) como no utilizados. Es esto correcto para usted?
  • Que sí, que va a estar bien. Sólo quiero mostrar la imagen de la firma en uno de los casos.
  • por favor, consulte la actualización del post.
  • Como yo lo veo, @Bruno ya ha respondido a su pregunta de forma adecuada.
  • Gracias mkl y Bruno. La respuesta de Bruno trabajó para mí.
InformationsquelleAutor rizzz86 | 2013-12-18

2 Comentarios

  1. 8

    Utiliza el código para firmar digitalmente un archivo PDF que usted no quiere firmar digitalmente 😉

    Si el documento ya está firmado, la adición de cualquier contenido adicional (como una imagen) romper la firma, pero si el documento no se había firmado aún, usted tiene diferentes opciones.

    Necesita utilizar PdfStamper la forma normal, que es: no mediante el uso de la CreateSignature() método, pero de la manera que se describe en capítulo 6 de mi libro acerca de iText. Usted también tiene que decidir si es o no es importante que (1) la imagen es parte del campo de firma (en el que caso de que desaparecerá cuando el PDF firmado) o (2) la imagen necesita ser agregado como parte de la secuencia de contenido (en el que caso de que todavía estará allí cuando usted firme el documento).

    En caso de (1), por favor, eche un vistazo a ejemplo de código 2.6 y el ejemplo de código 2.7 de mi libro acerca de las firmas digitales (véase el CreateEmptyField ejemplo para la versión de C# del código). En el ejemplo de código 2.6, usted aprenderá a crear un PdfFormField con una costumbre PdfAppearance. En el ejemplo de código 2.7, usted aprenderá cómo agregar un campo de firma a un documento existente utilizando PdfStamper. En su caso, tendría que eliminar el actual campo de firma (mediante el removeField() método) y reemplazarlo con un nuevo PdfFormField con una apariencia diferente en las mismas coordenadas.

    En caso de (2), usted acaba de crear un Image objeto y añadir a la PdfContentByte recuperado de la PdfStamper el uso de la GetOverContent() método. Ver el ejemplos del capítulo 6 para la inspiración.

    En ambos casos, usted necesita saber las coordenadas y el número de página en ambos casos. Esta información puede ser recuperada como este:

    AcroFields form = stamper.AcroFields;
    AcroFields.FieldPosition f = form.GetFieldPositions("mySigName")[0];

    Obtendrá la página como esta: f.page y un Rectangle la definición de la posición como esta: f.position.

    Como no sabemos exactamente que tipo de resultado final que usted requiere, es difícil entrar en más detalles. El más importante error en el código es que se utiliza el CreateSignature() método para obtener un PdfStamper objeto mientras que usted no quiere firmar el documento.

    • Gracias @Bruno, que trabajó para mí. He utilizado el GetOverContent() método para mostrar mi imagen en PDF.
    • En su caso, tendría que eliminar el actual campo de firma (mediante el removeField() método) y reemplazarlo – si alguien la tiene que por favor tenga cuidado; si su firma original de campo lleva a configuraciones especiales, por ejemplo, bloqueo de los diccionarios o los valores de las semillas, simplemente reemplazando el campo va a tirar esa información. Tendrás que copiar también las referencias en cuestión.
    • Yo no soy extracción de la firma de campo, pero ocultando que el uso de FLAGS_HIDDEN anotación. Quiero que el campo de firma nombre más tarde.
  2. 3

    Esto es cómo puedo añadir un unsigned campo de firma

         public void buildPDFMemoSignature(string DocName, BuildableDoc docBuild)
         {   
            using (var ms = new MemoryStream())
            {
            var doc = new Document(PageSize.A4, 20f, 10f, 30f, 0f);
            {
                PdfWriter writer = PdfWriter.GetInstance(doc, ms);
                doc.Open();
                try
                {
                  //add stuff to your PDF
    
                 //Signature is added here ***************
    
                 PdfFormField field = PdfFormField.CreateSignature(writer);
      field.SetWidget(new iTextSharp.text.Rectangle(190, 730, 440, 650), PdfAnnotation.HIGHLIGHT_NONE);
                        //Rectangle(float llx, float lly, float urx, float ury) 
                        field.FieldName = "mySig";
                        field.Flags = PdfAnnotation.FLAGS_PRINT;
                        field.SetPage();
                        field.MKBorderColor = BaseColor.BLACK;
                        field.MKBackgroundColor = BaseColor.WHITE;
                        PdfAppearance tp = PdfAppearance.CreateAppearance(writer, 72, 48);
                        tp.Rectangle(0.5f, 0.5f, 71.5f, 47.5f);
                        tp.Stroke();
                        field.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp);
                        writer.AddAnnotation(field); 
                        }
                        catch (Exception ex)
                        {  
                          //exceptions                   
                        }
                        finally
                        {
                            doc.Close();
                        }  
     }
    • Esto no puede ser un ejemplo de trabajo… no utilizar cualquiera de los parámetros pasados en el método de la…

Dejar respuesta

Please enter your comment!
Please enter your name here