none
itextsharp.dll - Como preencher dados em campos dinâmicos E inserir imagens ??? RRS feed

  • Pergunta

  • Olá a todos. Estou fazendo um form no Windows Forms e ao usuário preencher os campos ele clica no botão e salva um .pdf preenchido, usando aquela biblioteca itextsharp.dll , no caso o objeto PdfStamper, que preenche campos dinâmicos do pdf.

    até aí tudo bem, só que o usuário também aponta alguma imagens via FileUploadControl, que devem ser também inseridas em lugares predefinidos do pdf. Só que o PdfStamper não possui campos dinâmicos para imagens.

    Eu encontrei um exemplo utilizando um objeto itextsharp.text.Image.GetInstance("caminho") que puxa a imagem , transforma em um objeto e então ela deve ser adicionada através de um objeto Document , que é incompatível com o PdfStamper . Como inserir as imagens no PDF, juntamente com os campos ?(tem que usar um modelo predefinido, um pdf template que serve de "esqueleto" pra ser preenchido)

    Grato desde já!

    Anderson 

    segunda-feira, 26 de agosto de 2013 18:01

Respostas

  • COnsegui! segue o código:

    #region criacao dos objetos
                string pdfTemplate = @"c:\OS_LAUDO\OS_Modelo.pdf";
                string newFile = "c:\\OS_LAUDO\\PDF_OS\\OS_" + os.OSID.ToString() + ".pdf";
    
                PdfReader pdfReader = new PdfReader(pdfTemplate);
                PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(                        newFile, FileMode.Create));
    
                AcroFields pdfFormFields = pdfStamper.AcroFields; 
    #endregion
    
    #region campos
                // set form pdfFormFields
                pdfFormFields.SetField("F[0].P1[0].Cliente[0]", cli_textbox.Text);
    #endregion
    
    #region fotos
                //fotos
                if (os.Foto1 != "")
                {
                    iTextSharp.text.Image foto1obj = iTextSharp.text.Image.GetInstance(foto1.Text);
                    foto1obj.SetAbsolutePosition(20, 420);
                    foto1obj.ScaleAbsolute(180, 130);
                    iTextSharp.text.pdf.PdfContentByte underContent;
                    underContent = pdfStamper.GetOverContent(1);
                    underContent.AddImage(foto1obj);
                }
    
                if (os.Foto2 != "")
                {
                    iTextSharp.text.Image foto2obj = iTextSharp.text.Image.GetInstance(foto2.Text);
                    foto2obj.SetAbsolutePosition(210, 420);
                    foto2obj.ScaleAbsolute(180, 130);
                    iTextSharp.text.pdf.PdfContentByte underContent;
                    underContent = pdfStamper.GetOverContent(1);
                    underContent.AddImage(foto2obj);
                }
    
                if (os.Foto3 != "")
                {
                    iTextSharp.text.Image foto3obj = iTextSharp.text.Image.GetInstance(foto3.Text);
                    foto3obj.SetAbsolutePosition(400, 420);
                    foto3obj.ScaleAbsolute(180, 130);
                    iTextSharp.text.pdf.PdfContentByte underContent;
                    underContent = pdfStamper.GetOverContent(1);
                    underContent.AddImage(foto3obj);
                }
    
     #endregion
    
    #region grava
                // mensagem de sucesso
                string sTmp = newFile;
    
                MessageBox.Show("PDF gravado com sucesso !\n\n  " + sTmp, "OK");
    
                // flatten the form to remove editting options, set it to false
                // to leave the form open to subsequent manual edits
                pdfStamper.FormFlattening = false;
    
                // close the pdf
                pdfStamper.Close();
    
    
    
    #endregion

    • Marcado como Resposta AndersonDel_CFV terça-feira, 27 de agosto de 2013 04:50
    terça-feira, 27 de agosto de 2013 04:49