使用 iTextsharp 错误向 pdf 添加一行看不到该行

Adding a Line to a pdf using iTextsharp Error cant see the Line

我有一个 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();

我正在尝试在此文档的末尾添加一行,但在执行该代码后,它创建了文件,当我打开它时,我看不到该文本。当我搜索那个词时,它说它就在那里。像这样

这意味着代码可以正常工作,所有的问题都是字体,谁能告诉我如何让它到达页面末尾并显示而不是隐藏?

您的代码首先绘制文本

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 更适合从头开始创建新的 PDF。

您的方法非常有损(它删除了文档级信息和表单字段等交互部分),而 PdfStamper 尽可能多地保留了原始 PDF。