使用 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】:

两个备注:

    首先添加文本,然后添加图像。因此图像覆盖了文本。这是基本逻辑。如果切换顺序,先添加图片,再添加文字,文字会覆盖图片。这是纯粹的常识。 您可以通过导入PdfImportedPagePdfWriter 来操作现有的PDF。这证明你没有阅读文档。你应该改用PdfStamper

您的代码太复杂了。切换到PdfStamper 并使用ColumnText 对象添加文本。不要使用BeginText() / EndText()。另外:你为什么用EndLayer()???你知道那个方法是什么意思吗?

【讨论】:

以上是关于使用 itextsharp 在现有 pdf 中插入文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 iTextSharp 将文本添加到内存流中的现有多页 PDF 文档

iTextSharp 在 pdf 文件中的单词中插入空格

使用 iTextSharp 将多个页面添加到 pdf 表单

itextsharp操作pdf——插入图片二维码等

使用 iTextSharp 突出显示文本减少对 PDF 文件大小的影响

ASP.NET 转自定内容到 PDF - 使用 iTextSharp