使用 itextsharp 在现有 pdf 中插入文本
Posted
技术标签:
【中文标题】使用 itextsharp 在现有 pdf 中插入文本【英文标题】:Insert text in existing pdf with itextsharp 【发布时间】:2017-05-10 00:04:32 【问题描述】:我可以在现有的 pdf 中添加文本,如下面的 url 中所述。 但是当我添加它们时,文本会停留在 pdf 中的图像下方。我该如何解决这个问题?
ITextSharp insert text to an existing 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();
【问题讨论】:
请说明问题。 “文字位于图像下方”不一定是问题。解释您的期望,并显示您的代码,而不是参考另一个问题。为什么为该问题提供的答案没有回答您的问题? 谢谢,我添加了代码和截图。 ITextSharp insert text to an existing pdf的可能重复 itext7 似乎不支持其中许多类。你能给出一个更新的例子吗? 【参考方案1】:两个备注:
-
首先添加文本,然后添加图像。因此图像覆盖了文本。这是基本逻辑。如果切换顺序,先添加图片,再添加文字,文字会覆盖图片。这是纯粹的常识。
您可以通过导入
PdfImportedPage
和PdfWriter
来操作现有的PDF。这证明你没有阅读文档。你应该改用PdfStamper
!
您的代码太复杂了。切换到PdfStamper
并使用ColumnText
对象添加文本。不要使用BeginText()
/ EndText()
。另外:你为什么用EndLayer()
???你知道那个方法是什么意思吗?
【讨论】:
以上是关于使用 itextsharp 在现有 pdf 中插入文本的主要内容,如果未能解决你的问题,请参考以下文章
使用 iTextSharp 将文本添加到内存流中的现有多页 PDF 文档