使用itextsharp在现有的pdf中插入文本

3
我可以像下面链接中所解释的那样,向现有的PDF文档中添加文本。但是,当我添加文本时,文本会出现在图像下面。我该如何解决这个问题? ITextSharp向现有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();
    }

enter image description here


1
请解释问题。"文本留在图像下方"不一定是问题。请解释您的期望,并展示您的代码,而不是参考另一个问题。为什么那个问题提供的答案不能回答您的问题? - Bruno Lowagie
谢谢,我已经添加了代码和截图。 - onder
可能是 ITextSharp insert text to an existing pdf 的重复问题。 - Nitin Sawant
itext7似乎不支持许多这些类。你能给一个更新的例子吗? - Daniel Williams
1个回答

2

两点说明:

  1. 您先添加文本,然后再添加图像。因此,图像覆盖了文本。这是基本逻辑。如果您交换顺序并首先添加图像,然后是文本,则文本将覆盖图像。这是纯粹的常识。
  2. 您通过导入 PdfImportedPagePdfWriter 来操作现有的 PDF。这证明您没有阅读文档。您应该使用 PdfStamper

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接