我有一个PDF文件,我试图用这样的iTextSharp在其中添加一行。
string Oldfile = @"C:\ThisTest.pdf";
string NewFile = @"C:\NewOne.pdf";
PdfReader reader = new PdfReader(Oldfile);
iTextSharp.text.Rectangle Size = reader.GetPageSizeWithRotation(1);
Document document = new Document(Size);
FileStream fs = new FileStream(NewFile, FileMode.Create, FileAccess.Write);
PdfWriter weiter = PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = weiter.DirectContent;
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
cb.BeginText();
string text = "Haseeb Ahmad";
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
PdfImportedPage page = weiter.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
document.Close();
fs.Close();
weiter.Close();
reader.Close();
我正在尝试在本文档的末尾添加一行,但在它执行该代码后会创建该文件,当我打开它时,我无法看到该文本。当我搜索那个单词时,它会在那里说出来。像这样
这意味着代码工作的所有问题是字体可以任何人告诉我如何使它到达页面的末尾并显示而不是被隐藏?
答案 0 :(得分:2)
您的代码首先绘制文字
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
cb.BeginText();
string text = "Haseeb Ahmad";
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
然后将原始页面复制到此
中PdfImportedPage page = weiter.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
因此,您的原始页面内容(可能包含白色背景填充)将覆盖您的新文本。
请更改订单,先复制页面,然后再写下文字。
如果您的任务确实将一些文本放在现有PDF 的现有页面上,您应该完全使用其他iText类:PdfStamper
仅适用于此类任务PdfWriter
{1}}更适合从头开始创建新的PDF。
您的方法非常有损(它会删除文档级信息和表单字段等交互式部分),而PdfStamper
会尽可能多地保留原始PDF。