【问题标题】:PDF iTextSharp replacing logoPDF iTextSharp 替换徽标
【发布时间】:2020-10-23 08:18:52
【问题描述】:

当我尝试将旧徽标 (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 徽标的布局或其他什么?

【问题讨论】:

  • 您是否尝试过先添加导入的页面,然后再添加图像?
  • 这是完整的代码。
  • 那是否意味着你没有尝试过?那么请做!
  • @mkl 同样的结果
  • 啊,我现在才意识到你是通过Document添加图片和直接将导入页面添加到DirectContent。这可能导致生成的绘图顺序与内容添加顺序不同。请尝试将导入的页面添加到writer.DirectContentUnder而不是writer.DirectContent

标签: c# itext


【解决方案1】:

你通过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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多