iTextSharp pdf渲染问题

时间:2018-03-13 07:33:41

标签: c# asp.net pdf itext

我有一个启用了签名的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
        {
        }

    }

请提前帮助我,

2 个答案:

答案 0 :(得分:1)

您所说的“呈现”似乎是“将每个页面的内容添加到某个目标文档的新页面”。

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

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

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

话虽如此,如果您的案例中的整体任务是在单个pdf中收集多个报告的内容,那么您的代码仍然不会使用相应的iText类:对于这样的任务,可以使用{{1}而不是通用的PdfCopy,参见this answer

答案 1 :(得分:0)

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

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