Вставьте текст в существующий PDF с помощью itextsharp

Я могу добавить текст в существующий PDF, как это объясняется в URL ниже. Но тексты остаются ниже изображений в PDF, когда я их добавляю. Как я могу исправить эту проблему?

ITextSharp вставить текст в существующий PDF

Редактировать:

  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();
    }

введите описание изображения здесь

1 ответ

Решение

Два замечания:

  1. Сначала вы добавляете текст, затем добавляете изображение. Следовательно изображение покрывает текст. Это элементарная логика. Если вы измените порядок и сначала добавите изображение, а затем текст, текст покроет изображение. Это чистый здравый смысл.
  2. Вы управляете существующим PDF, импортируя PdfImportedPage а также PdfWriter, Это доказывает, что вы не читали документацию. Вы должны использовать PdfStamper вместо!

Ваш код слишком сложен. Переключиться на PdfStamper и добавить текст, используя ColumnText объект. Не использовать BeginText() / EndText(), Также: почему вы используете EndLayer()??? Ты хоть представляешь, для чего предназначен этот метод?

Другие вопросы по тегам