Expand my Community achievements bar.

iTextSharp the library. me something strange happens with the fields are empty, to fill in some fields in the XML file. Newlines / carriage return generated (in empty fields)

Avatar

Level 1

     Hi all, with the library iTextSharp. me something strange happens. the fields are empty, to fill in some fields in the XML file. Newlines / carriage return is generated. I do not know why it happens

  --------------------------CODE EN C# --------------------------------------

  public static int PDF_Actualizar_URL_ENVIO_IDSESSION_PDF(int idOperador, string URL_ENVIO, string ID_SESSION, string rutaFormulario, string rutaFormularioDestino)

        {

            try

            {

                if (Path.GetExtension(rutaFormularioDestino).ToLower() == ".pdf")

                {

                    using (PdfReader pdfReader1 = new PdfReader(rutaFormulario, new System.Text.ASCIIEncoding().GetBytes(global_constants.passwordPDF())))

                    {

                        //si es un formulario con nodos XML y no esta firmado

                        if ((pdfReader1.AcroFields.Xfa.DatasetsNode != null) && (pdfReader1.AcroFields.GetSignatureNames().Count == 0))

                        {

                            //modifico los elmentos referencia e idinforme  del unico nodo dentro del nodo SUBFORMULARIOENCABEZADO

                            XmlDocument xml = new XmlDocument();

                            xml.LoadXml(pdfReader1.AcroFields.Xfa.DatasetsNode.FirstChild.OuterXml);

                            #region rellenar

                            //busco los campos y los modifico, en este caso solamente habrá 1

                            XmlNodeList ElementosFormularios = xml.GetElementsByTagName("SUB_ENCABEZADO");

                            if (ElementosFormularios.Count > 0)

                            {

                                //modifico los dos elementos del nodo

                                foreach (XmlElement nodo in ElementosFormularios)

                                {

                                    if (nodo["URL_ENVIO"].ChildNodes.Item(0) != null)

                                    {

                                        nodo["URL_ENVIO"].ChildNodes.Item(0).InnerText = URL_ENVIO;

                                    }

                                    if (nodo["IDSESSION"].ChildNodes.Item(0) != null)

                                    {

                                        nodo["IDSESSION"].ChildNodes.Item(0).InnerText = ID_SESSION;

                                    }

                                }

                            }

                            #endregion rellenar

                            //creo el fichero y cargo los datos del XML en el nuevo formulario

                            using (PdfStamper pdfStamper1 = new PdfStamper(pdfReader1, new FileStream(rutaFormularioDestino, FileMode.Create)))

                            {

                                //guardo el formulario en un Stream (en memoria)

                                using (MemoryStream xmlStream = new MemoryStream())

                                {

                                    //guardo el fichero XML en el Stream

                                    xml.Save(xmlStream);

                                    //pongo el puntero en el inicio del fichero

                                    xmlStream.Position = 0;

                                    //relleno el formulario con los datos del fichero xmlStream

                                    pdfStamper1.AcroFields.Xfa.FillXfaForm(xmlStream);

                                    pdfStamper1.FormFlattening = false;

                                    xmlStream.Close();

                                }

                                pdfStamper1.Close();

                            }

                        }

                        else //DOCUMENTO FIRMADO

                        {

                            //copio el fichero (firmado) en la ruta destino, este fichero no se puede modificar/rellenar para no invalidar la firma

                            File.Copy(rutaFormulario, rutaFormularioDestino, true);

                        }

                        pdfReader1.Close();

                        //todo OK

                        return 0;

                    }

                }

                else

                {

                    return -2;  //No se trata de un fichero pdf

                }

            }

            catch (Exception ex)

            {

                OperadorCecop.IN_ins_incidencia(idOperador, "Error en el método: PDF_Actualizar_URL_ENVIO_IDSESSION_PDF de la clase  'GestionFichero'", ex.Message);

                return -1;  //Error inexperado

            }

        }

0 Replies