【问题标题】:Issue with iTextSharp pdf renderingiTextSharp pdf 渲染问题
【发布时间】:2018-08-21 09:06:42
【问题描述】:

我有一个启用了签名的 pdf,当我尝试使用 iTextSharp 渲染它时,签名消失了。我在许多平台上研究过这个问题,但找不到任何解决方案。

这是我的代码

private void BuildPDF(ref Document doc, ref PdfWriter writer)
    {
        int numberOfPages = 0;
        int currentPageNumber = 0;
        PdfImportedPage page;
        int rotation;
        PdfContentByte cb = writer.DirectContent;
        ReportExecutionService rs = new ReportExecutionService(ReportServiceUrl, ReportServiceTimeout);
        try
        {
            PdfReader reader2 = new PdfReader(ReportName);
            currentPageNumber = 0;
            numberOfPages = reader2.NumberOfPages;
            while (currentPageNumber < numberOfPages)
            {
                currentPageNumber += 1;
                doc.SetPageSize(PageSize.LETTER);
                doc.NewPage();
                page = writer.GetImportedPage(reader2, currentPageNumber);
                rotation = reader2.GetPageRotation(currentPageNumber);
                if ((rotation == 90) || (rotation == 270))
                {
                    cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader2.GetPageSizeWithRotation(currentPageNumber).Height);
                }
                else
                {
                    cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0);
                }
            }
        }
        catch
        {
        }

    }

请帮帮我,在此先感谢

【问题讨论】:

    标签: c# asp.net pdf itext


    【解决方案1】:

    你所谓的“渲染”似乎是“将每个页面的内容添加到某个目标文档的新页面”。

    如果“启用签名的 pdf” 您还指的是带有可视化集成数字签名的 pdf,很明显签名将在您的“渲染”中消失:签名可视化不是页面内容的一部分,它是您的“渲染”未复制的小部件注释!

    但是即使它被复制了,情况也不会更好:签名将位于它肯定没有签名的文档中,因此签名在那里无效,我怀疑您是否想要一个带有无效签名。

    如果您只对可视化感兴趣,您应该在将内容添加到目标文档之前尝试将签名的 pdf 展平。


    话虽如此,如果您的总体任务是在单个 pdf 中收集多个报告的内容,那么您的代码无论如何都不会使用适当的 iText 类:对于这样的任务,可以使用 PdfCopy 代替通用PdfWriter,参见。 this answer.

    【讨论】:

    • 我只对可视化感兴趣,但我找不到正确的路径,您建议的解决方案效果很好。谢谢,很有帮助。
    【解决方案2】:

    使用PdfCopy 复制内容以外的对象。

    请注意,如果您碰巧保留了签名外观,它将显示为无效。

    【讨论】:

    • 可以分享一下sn-p的代码吗?我所看到的只是 pdfCopy 是一个类,如果我正在执行 writer = new PdfCopy(doc,memstream),则 pdf 中不会加载任何内容。
    • @Mussadiq 你会在我答案末尾的链接后面找到一个PdfCopy 示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2018-04-20
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多