2016-12-24 2 views
2

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

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

+1

Пожалуйста, объясните проблему. «Текст остается под изображениями» не обязательно является проблемой. Объясните, что вы ожидали, и покажите свой код вместо обращения к другому вопросу. Почему ответ на этот вопрос не отвечает на ваш вопрос? –

+0

Спасибо, я добавил код и снимок экрана. – onder

ответ

2

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

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

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

+0

Работает с PdfStamper и ColumnText. – onder

Смежные вопросы