Вставьте текст в существующий 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 ответ
Решение
Два замечания:
- Сначала вы добавляете текст, затем добавляете изображение. Следовательно изображение покрывает текст. Это элементарная логика. Если вы измените порядок и сначала добавите изображение, а затем текст, текст покроет изображение. Это чистый здравый смысл.
- Вы управляете существующим PDF, импортируя
PdfImportedPage
а такжеPdfWriter
, Это доказывает, что вы не читали документацию. Вы должны использоватьPdfStamper
вместо!
Ваш код слишком сложен. Переключиться на PdfStamper
и добавить текст, используя ColumnText
объект. Не использовать BeginText()
/ EndText()
, Также: почему вы используете EndLayer()
??? Ты хоть представляешь, для чего предназначен этот метод?