我有一个启用了签名的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
{
}
}
请提前帮助我,
答案 0 :(得分:1)
您所说的“呈现”似乎是“将每个页面的内容添加到某个目标文档的新页面”。
如果通过“启用了签名的pdf”,您还意味着带有可视化的集成数字签名的pdf,很明显签名将在“渲染”中消失:签名可视化不是页面内容的一部分,它是一个不会被“渲染”复制的小部件注释!
但是即使它被复制了,情况也不会更好:签名将位于一个肯定没有签名的文档中,因此签名在那里无效,我怀疑你想要一个文件无效的签名。
如果您只对可视化感兴趣,则应在将内容添加到目标文档之前尝试展平已签名的pdf。
话虽如此,如果您的案例中的整体任务是在单个pdf中收集多个报告的内容,那么您的代码仍然不会使用相应的iText类:对于这样的任务,可以使用{{1}而不是通用的PdfCopy
,参见this answer
答案 1 :(得分:0)
使用PdfCopy
复制内容以外的对象。
请注意,如果您碰巧保留签名外观,则会显示为无效。