PDF iTextSharp 替换徽标

PDF iTextSharp replacing logo

当我尝试将旧徽标 (i3screen) 替换为我的徽标时,我得到以下信息:

i3screen 标志在顶部,我不知道为什么

我的代码:

        PdfReader pdfReader = new PdfReader(model.InputFile);
        Document document = new Document(pdfReader.GetPageSizeWithRotation(1));

        using (MemoryStream ms = new MemoryStream())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, ms);
            document.Open();

            PdfContentByte cb = writer.DirectContent;
            var pic = AddBlank(model.Blank);
            document.Add(pic);

            PdfImportedPage page = writer.GetImportedPage(pdfReader, 1);
            cb.AddTemplate(page, 0, 0);

            document.Close();
            writer.Close();
            return ms.ToArray();
        }


    iTextSharp.text.Image AddBlank(byte[] blank)
    {
        iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(blank);
        using (MemoryStream imgMs = new MemoryStream(blank))
        {
            System.Drawing.Image img = System.Drawing.Image.FromStream(imgMs);
        }

        pic.SetAbsolutePosition(10, 600 + (pic.Height / 2));

        return pic;
    }

可能,我可以为我的徽标设置布局,高于 i3screen 徽标或其他布局的布局?

您通过 Document

添加图像
document.Add(pic);

并且导入的页面直接到DirectContent

PdfContentByte cb = writer.DirectContent;
...
PdfImportedPage page = writer.GetImportedPage(pdfReader, 1);
cb.AddTemplate(page, 0, 0);

这可能导致结果 pdf 中的绘制顺序与您代码中的内容添加顺序不同。

要更改该顺序,请将导入的页面添加到 writer.DirectContentUnder 而不是 writer.DirectContent