代码之家  ›  专栏  ›  技术社区  ›  Simple Code

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

  •  0
  • Simple Code  · 技术社区  · 7 年前

    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();
    

    我试图在这个文档的末尾添加一行代码,但在代码完成后,它创建了一个文件,当我打开它时,我看不到该文本。当我搜索那个词时,它说它在那里。这样地 the search shows that line is here but i cant see it

    这意味着代码工作了。所有的问题是字体。有人能告诉我如何让它出现在页面的末尾,而不是隐藏起来吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   mkl    7 年前

    代码首先绘制文本

    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。