¿Como agregar un imagen superior al documento generado por PDF con iTextSharp en C#?

Tengo el siguiente codigo usando iTextSharp:

        Byte[] bytes;          using (var ms = new MemoryStream())         {             using (var doc = new Document())             {                 using (var writer = PdfWriter.GetInstance(doc, ms))                 {                     doc.Open();                      var example_html = @"<p align=""justify"">Junto con saludar, quiero mostrar un ejemplo</p>";                     var example_css = @".headline{font-size:200%}";                      using (var htmlWorker = new iTextSharp.text.html.simpleparser.HTMLWorker(doc))                     {                          using (var sr = new StringReader(example_html))                         {                             htmlWorker.Parse(sr);                         }                     }                     using (var srHtml = new StringReader(example_html))                     {                          //Parse the HTML                         iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);                     }                     using (var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_css)))                     {                         using (var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_html)))                         {                             iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, msCss);                         }                     }                       doc.Close();                 }             }             bytes = ms.ToArray();         }          var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "documento.pdf");         System.IO.File.WriteAllBytes(testFile, bytes); 

Lo que deseo es agregar una imagen en el lado superior izquierdo o derecho que me sirva de logo en el documento pdf. ¿Como se puede hacer? Algún ejemplo o consejo, se lo agradecería mucho.

Saludos

Crear varias etiquetas con iTextSharp en C#

Estoy haciendo un modulo de embarque para un programa, en el que tienen que ingresar un numero de pedido y cuantas cajas y bolsas se van a enviar en dicho pedido, lo que quiero es que despues de que por ejemplo escriba que el pedido tiene tres cajas , al hacer clic en guardar me haga tres etiquetas , todas con la misma informacion solo variando con el clasico “1 de 3” , “2 de 3″ Crear un pdf no es problema , ya lo puedo hacer con Itextsharp, pero no se como ” repetir” las hojas segun lo que se pida, si alguien me pudiera dar una idea de como intentarlo pues estoy algo perdido, no necesito codigo, solo ideas , gracias de antemano

Al firmar pdf borra datos de formulario (itextsharp vb.net)

Al insertar una firma digital con itextsharp a un pdf, me borra los datos de formulario. ¿Sabe alguien porqué? Este es el código que uso:

Sub SignWithCertificate(ByVal src As String, ByVal dest As String)         Dim certificate As X509Certificate2 = New X509Certificate2(rutapfx, passw, X509KeyStorageFlags.MachineKeySet)         Dim cp As Org.BouncyCastle.X509.X509CertificateParser = New Org.BouncyCastle.X509.X509CertificateParser()         Dim chain As Org.BouncyCastle.X509.X509Certificate() = New Org.BouncyCastle.X509.X509Certificate() {cp.ReadCertificate(Certificate.RawData)}         Dim reader As PdfReader = New PdfReader(src)         Dim fs As FileStream = New FileStream(dest, FileMode.Create)         Dim stamper As PdfStamper = PdfStamper.CreateSignature(reader, fs, vbNullChar, Nothing, True)         Dim pks As IExternalSignature = New X509Certificate2Signature(certificate, "SHA-1")         Dim appearance As PdfSignatureAppearance = stamper.SignatureAppearance         appearance.SignDate = DateTime.Now.ToLocalTime         appearance.Reason = razon         appearance.Location = localizacion         appearance.Acro6Layers = True         appearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED         Dim signature As PdfSignature = New PdfSignature(PdfName.ADOBE_PPKMS, PdfName.ADBE_PKCS7_SHA1)         appearance.CryptoDictionary = signature         Dim signatureChain = rutapfx         Dim standard = CryptoStandard.CADES         MakeSignature.SignDetached(appearance, pks, chain, Nothing, Nothing, Nothing, 0, standard)         If reader IsNot Nothing Then reader.Close()         If stamper IsNot Nothing Then stamper.Close()     End Sub 

Gracias

como usar SetAbsolutePosition o equivalente en una tabla creada con ITextSharp PDF C#?

Estoy creando un pdf de un datagridview y otros datos con ITextSharp y quiero poner una tabla chica en la esquina superior derecha , justo como lo hice con la imagen a la izquierda para aprovechar el espacio como lo muestro acontinuacion

introducir la descripción de la imagen aquí

para la imagen ocupeSetAbsolutePosition(pdfDoc.Left, pdfDoc.Top); pero no se cual es el equivalente para usar en tablas, a continuacion dejo el codigo que estoy ocupando

private void BtnExportar_Click(object sender, EventArgs e)     {         progressBar1.Visible = true;         try         {             int filasTotales = dataGridView1.Rows.Count;             var pdfDoc = new Document(PageSize.LETTER, 40f, 40f, 60f, 60f);             string path = $  "C:\PDFs\remision.pdf";             PdfWriter.GetInstance(pdfDoc, new FileStream(path, FileMode.OpenOrCreate));             pdfDoc.Open();              var imagepath = @"C:\Users\Equipo\Documents\Interfaz\Logo\MembreteTop.png";             using (FileStream fs = new FileStream(imagepath, FileMode.Open))             {                 var png = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromStream(fs), System.Drawing.Imaging.ImageFormat.Png);                 png.ScalePercent(3.3f);                 png.SetAbsolutePosition(pdfDoc.Left, pdfDoc.Top);                 pdfDoc.Add(png);              }               var tablacliente = new PdfPTable(new[] { .70f, 1f })             {                 HorizontalAlignment = Left,                 WidthPercentage = 75,                 DefaultCell = { MinimumHeight = 22f }              };              tablacliente.AddCell("CLIENTE: ");             tablacliente.AddCell(IdClienteTxt.Text + " " + NombreClienteTxt.Text + " " + RfcTxt.Text);             tablacliente.AddCell("DOMICILIO: ");             tablacliente.AddCell(DomicilioTxt.Text);            pdfDoc.Add(tablacliente);              var spacer = new Paragraph("")             {                 SpacingBefore = 10f,                 SpacingAfter = 10f,             };             pdfDoc.Add(spacer);              iTextSharp.text.Font fontTable = FontFactory.GetFont("Arial", 9, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);             var headerTable = new PdfPTable(new[] { .70f, 1f})             {                 HorizontalAlignment = Left,                 WidthPercentage = 100,                 DefaultCell = { MinimumHeight = 22f }             };              headerTable.AddCell("REMISION: ");             headerTable.AddCell("FECHA: ");             headerTable.AddCell(NumeroOrdenTxt.Text);             headerTable.AddCell(FechaTxt.Text);             pdfDoc.Add(headerTable);             pdfDoc.Add(spacer);              var columnCount = dataGridView1.ColumnCount;             var columnWidths = new[] { .70f, 1.5f, .50f, .50f, .50f};              var table = new PdfPTable(columnWidths)             {                 HorizontalAlignment = Left,                 WidthPercentage = 100,                 DefaultCell = { MinimumHeight = 22f }             };              var cell = new PdfPCell(new Phrase("ARTICULOS"))             {                 Colspan = columnCount,                 HorizontalAlignment = 1,  //0=Izquierda, 1=Centro, 2=Derecha                 MinimumHeight = 30f             };              table.AddCell(cell);             //Encabezados             dataGridView1.Columns                 .OfType<DataGridViewColumn>()                 .ToList()                 .ForEach(c => table.AddCell(new Phrase(c.Name, fontTable)));             //Filas             int rowIndex = 0;             dataGridView1.Rows                 .OfType<DataGridViewRow>()                 .ToList()                 .ForEach(r =>                 {                     rowIndex++;                     var cells = r.Cells.OfType<DataGridViewCell>().ToList();                     cells.ForEach(c => table.AddCell(new Phrase(c.Value.ToString(), fontTable)));                     progressBar1.Value = (rowIndex * 100) / filasTotales;                 });               pdfDoc.Add(table);              pdfDoc.Close();             MessageBox.Show("Exportación Exitosa", "Exportar", MessageBoxButtons.OK, MessageBoxIcon.Information);             progressBar1.Value = 0;             progressBar1.Visible = false;         }         catch (Exception ex)         {          }      } 

En resumen quisiera que mi tabla “tablacliente” pudiera ponerla en un punto especifico de mi hojas pues como lo estoy haciendo despues de insertar la imagen automaticamente crea un salto hacia la linea de abajo, muchas gracias de antemano

Saving PDF file slow after 10,000 pages in iTextSharp

I am trying to build a application that creates PDF and saves in local file. I am using this through iTextSharp in C#. I need to save at least 1 lac (100,000) PDF files.

After 10,000 files the saving gets slow. The first 10k gets saved in 2 mins, rest of the files take almost 5 hours.

I believe the issue is usage of memory. But I could not find a solution to fix that issue. I have posted the source code.

private void CreatePDF11() {     Queue<String> QTempFileNames;     QTempFileNames = new Queue<string>();     string fileName = string.Empty;      DateTime fileCreationDatetime = DateTime.Now;      fileName = @"D:\StatementMassPrint\tesystw14j414435.PDF";      string DestinationDirectory = @"D:\StatementMassPrint";      string StrTempFilePath = String.Empty;      string pdfPath = fileName;      int TempPdfFileName = 1;     if (DestinationDirectory != string.Empty)     {         StrTempFilePath = DestinationDirectory + "temp" + "(" + DateTime.Now.ToFileTime() + ")";     }      if (!(Directory.Exists(StrTempFilePath)))     {         Directory.CreateDirectory(StrTempFilePath);     }         string reportFileName = StrTempFilePath + "\" + TempPdfFileName.ToString() + ".Pdf";          for (int f = 0; f < 100000; f++)         {             reportFileName = StrTempFilePath + "\" + TempPdfFileName.ToString() + ".Pdf";              using (FileStream msReport = new FileStream(reportFileName, FileMode.Create))     {         //step 1         using (Document pdfDoc = new Document(PageSize.A5.Rotate(), 10f, 10f, 200f,40f))         {             try             {                 // step 2                 PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, msReport);                 pdfWriter.PageEvent = new EpisodePageHeaderAndFooter();                  //open the stream                  pdfDoc.Open();                  DataTable dtEpisodeWise = new DataTable();                 dtEpisodeWise.Columns.Add("INVOICE_NO");                 dtEpisodeWise.Columns.Add("INVOICE_DATE");                 dtEpisodeWise.Columns.Add("CODE");                 dtEpisodeWise.Columns.Add("SERVICE_DESCRIPTION");                 dtEpisodeWise.Columns.Add("QTY",typeof(decimal));                 dtEpisodeWise.Columns.Add("UNIT_PRICE",typeof(decimal));                 dtEpisodeWise.Columns.Add("GROSS",typeof(decimal));                 dtEpisodeWise.Columns.Add("DISCOUNT",typeof(decimal));                 dtEpisodeWise.Columns.Add("NET",typeof(decimal));                 dtEpisodeWise.Columns.Add("DEDUCTION",typeof(decimal));                 dtEpisodeWise.Columns.Add("NET_PAYABLE_WITHOUT_VAT",typeof(decimal));                 dtEpisodeWise.Columns.Add("VAT",typeof(decimal));                 dtEpisodeWise.Columns.Add("NET_PAYABLE_WITH_VAT",typeof(decimal));                  PdfPTable table = new PdfPTable(dtEpisodeWise.Columns.Count);                 table.WidthPercentage = 100;                  Font fontH1 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLDITALIC);                 for (int k = 0; k < dtEpisodeWise.Columns.Count; k++)                 {                      string str = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(dtEpisodeWise.Columns[k].ColumnName.Replace("_", " ").ToLower()); ;                     PdfPCell cell = new PdfPCell(new Phrase(str,fontH1));                     cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;                     cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;                     //    cell.BackgroundColor = new iTextSharp.text.BaseColor(51, 102, 102);                      table.AddCell(cell);                 }               //   for (int i = 0; i < 1000; i++)              //   {                     dtEpisodeWise.Rows.Add("CR100005", "25-05-1989", "CPT004", "SERVICE005", 1, 10, 100, 10, 90, 45, 45, 5, 50);                     dtEpisodeWise.Rows.Add("CR100006", "25-05-1992", "CPT00555", "SERVICE105",6, 60, 600, 60, 450, 45, 45, 5, 500);               //   }                  Font fontH2 = new Font(Font.FontFamily.HELVETICA, 6, Font.ITALIC);                  for (int i = 0; i < dtEpisodeWise.Rows.Count; i++)                 {                     for (int j = 0; j < dtEpisodeWise.Columns.Count; j++)                     {                          PdfPCell cell = new PdfPCell(new Phrase(dtEpisodeWise.Rows[i][j].ToString(),fontH2));                          //Align the cell in the center                          if (dtEpisodeWise.Columns[j].DataType == typeof(decimal))                         {                             cell.HorizontalAlignment = PdfPCell.ALIGN_RIGHT;                             cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;                         }                         else                         {                             cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT;                             cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;                         }                          table.HeaderRows = 1;                          table.AddCell(cell);                     }                 }                     pdfDoc.Add(table);                  pdfDoc.Close();                 TempPdfFileName++;                }              catch (Exception ex)             {                 //handle exception             }              finally             {               }          }      } }   } ```