3

I can add a text to an existing pdf as it is explained in the url below. But the texts stay below the images in the pdf when I add them. How can I fix this problem?

ITextSharp insert text to an existing pdf

Edit :

  public void createFromPDF(string mapPath)
    {
        string oldFile = mapPath.Replace("Home", "") + "Content\\Uploads\\fiyat-listesi.pdf";// "oldFile.pdf";
        string newFile = mapPath.Replace("Home", "") + "Content\\Uploads\\new.pdf";//"newFile.pdf";

        // open the reader
        PdfReader reader = new PdfReader(oldFile);
        Rectangle size = reader.GetPageSizeWithRotation(1);
        Document document = new Document(size);

        // open the writer
        FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
        PdfWriter writer = PdfWriter.GetInstance(document, fs);
        document.Open();

        // the pdf content
        PdfContentByte cb = writer.DirectContent;

        // select the font properties
        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetColorFill(Color.RED);
        cb.SetFontAndSize(bf, 8);

        // write the text in the pdf content
        cb.BeginText();
        string text = "Some random blablablabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(1, text, 520, 640, 0);
        cb.EndText();
        cb.BeginText();
        text = "Other random blabla...";
        // put the alignment and coordinates here
        cb.ShowTextAligned(2, text, 100, 200, 0);
        cb.EndText();

        // create the new page and add it to the pdf
        PdfImportedPage page = writer.GetImportedPage(reader, 1);
        cb.AddTemplate(page, 0, 0);

        document.NewPage();

        Paragraph p = new Paragraph("aaaaaaaaaaaaaaaaaa", new Font(bf));
        document.Add(p);


        PdfImportedPage page2 = writer.GetImportedPage(reader, 2);
        cb.AddTemplate(page2, 0, 0);

        document.NewPage();


        Paragraph pwe = new Paragraph("aaaaaaaaaaaaaaaaaa", new Font(bf));
        document.Add(p);

        cb.EndLayer();

        PdfImportedPage page3 = writer.GetImportedPage(reader, 3);
        cb.AddTemplate(page3, 0, 0);



        // close the streams and voilá the file should be changed :)
        document.Close();
        fs.Close();
        writer.Close();
        reader.Close();
    }

enter image description here

Community
  • 1
  • 1
onder
  • 795
  • 3
  • 14
  • 32
  • 1
    Please explain the problem. "The text stays below the images" is not necessarily a problem. Explain what you expected, and show your code instead of referring to another question. Why doesn't the answer provided for that question answer your question? – Bruno Lowagie Dec 24 '16 at 19:57
  • Thanks, I am added code and screenshot. – onder Dec 24 '16 at 20:13
  • Possible duplicate of [ITextSharp insert text to an existing pdf](https://stackoverflow.com/questions/3992617/itextsharp-insert-text-to-an-existing-pdf) – Nitin Sawant Jul 29 '19 at 06:47
  • itext7 does not seem to support many of these classes. Can you give an updated example please? – Daniel Williams Jul 27 '21 at 15:20

1 Answers1

2

Two remarks:

  1. You add the text first, then you add the image. Hence the image covers the text. That's elementary logic. If you switch the order and add the image first, then the text, the text will cover the image. That's pure common sense.
  2. You manipulate an existing PDF by importing a PdfImportedPage and PdfWriter. That proves thaf you didn't read the documentation. You should use PdfStamper instead!

Your code is too complex. Switch to PdfStamper and add text using the ColumnText object. Don't use BeginText() / EndText(). Also: why are you using EndLayer()??? Do you have any idea what that method is meant for?

Bruno Lowagie
  • 75,994
  • 9
  • 109
  • 165