ITextSharp insert text to an existing pdf ITextSharp insert text to an existing pdf asp.net asp.net

ITextSharp insert text to an existing pdf


I found a way to do it (dont know if it is the best but it works)

string oldFile = "oldFile.pdf";string newFile = "newFile.pdf";// open the readerPdfReader reader = new PdfReader(oldFile);Rectangle size = reader.GetPageSizeWithRotation(1);Document document = new Document(size);// open the writerFileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);PdfWriter writer = PdfWriter.GetInstance(document, fs);document.Open();// the pdf contentPdfContentByte cb = writer.DirectContent;// select the font propertiesBaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252,BaseFont.NOT_EMBEDDED);cb.SetColorFill(BaseColor.DARK_GRAY);cb.SetFontAndSize(bf, 8);// write the text in the pdf contentcb.BeginText();string text = "Some random blablablabla...";// put the alignment and coordinates herecb.ShowTextAligned(1, text, 520, 640, 0);cb.EndText();cb.BeginText();text = "Other random blabla...";// put the alignment and coordinates herecb.ShowTextAligned(2, text, 100, 200, 0);cb.EndText();// create the new page and add it to the pdfPdfImportedPage page = writer.GetImportedPage(reader, 1);cb.AddTemplate(page, 0, 0);// close the streams and voilá the file should be changed :)document.Close();fs.Close();writer.Close();reader.Close();

I hope this can be usefull for someone =) (and post here any errors)


In addition to the excellent answers above, the following shows how to add text to each page of a multi-page document:

 using (var reader = new PdfReader(@"C:\Input.pdf")) {    using (var fileStream = new FileStream(@"C:\Output.pdf", FileMode.Create, FileAccess.Write))    {       var document = new Document(reader.GetPageSizeWithRotation(1));       var writer = PdfWriter.GetInstance(document, fileStream);       document.Open();       for (var i = 1; i <= reader.NumberOfPages; i++)       {          document.NewPage();          var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);          var importedPage = writer.GetImportedPage(reader, i);          var contentByte = writer.DirectContent;          contentByte.BeginText();          contentByte.SetFontAndSize(baseFont, 12);          var multiLineString = "Hello,\r\nWorld!".Split('\n');          foreach (var line in multiLineString)          {             contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, line, 200, 200, 0);          }          contentByte.EndText();          contentByte.AddTemplate(importedPage, 0, 0);       }       document.Close();       writer.Close();    } }


Here is a method that uses stamper and absolute coordinates showed in the different PDF clients (Adobe, FoxIt and etc. )

public static void AddTextToPdf(string inputPdfPath, string outputPdfPath, string textToAdd, System.Drawing.Point point)    {        //variables        string pathin = inputPdfPath;        string pathout = outputPdfPath;        //create PdfReader object to read from the existing document        using (PdfReader reader = new PdfReader(pathin))        //create PdfStamper object to write to get the pages from reader         using (PdfStamper stamper = new PdfStamper(reader, new FileStream(pathout, FileMode.Create)))        {            //select two pages from the original document            reader.SelectPages("1-2");            //gettins the page size in order to substract from the iTextSharp coordinates            var pageSize = reader.GetPageSize(1);            // PdfContentByte from stamper to add content to the pages over the original content            PdfContentByte pbover = stamper.GetOverContent(1);            //add content to the page using ColumnText            Font font = new Font();            font.Size = 45;            //setting up the X and Y coordinates of the document            int x = point.X;            int y = point.Y;            y = (int) (pageSize.Height - y);            ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(textToAdd, font), x, y, 0);        }    }