[英]How to hide Validity unknown symbol after signing the PDF in iTextSharp
我在 C#.Net 中使用 iTextSharp 創建了一個簽名的 PDF。 在簽名的 PDF 中,我想要一個有效符號,這樣當用戶在 Adobe Reader 中打開它時,它會顯示一個綠色的勾號及其簽名。
但是在我的 web 應用程序(帶有畫布的 html 頁面)中,我想從 PDF 中刪除該問號,使其不會像此屏幕中那樣顯示:
所以我想保留 PDF 的原始字節,其中signatureappearance.Acro6Layers = false;
在代碼中添加以獲取此符號。 但是在我的查看器(帶有畫布的html頁面)中顯示它之前,我想修改字節並刪除這個黃色標記,這樣它就不會顯示“簽名未驗證”。
我沒有使用 Aspose PDF 到圖像渲染的經驗,但看起來它可能只是像在 PDF 中那樣渲染簽名外觀。 順便說一句,這將是正確的做法。
由於 Acrobat 6 之前的額外圖層都在已保存文件的簽名外觀中繪制,因此您必須清除它們。 你可以這樣做:
using (PdfReader pdfReader = new PdfReader(source))
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(dest, FileMode.Create, FileAccess.Write), '\0', true))
{
AcroFields fields = pdfStamper.AcroFields;
List<string> names = fields.GetSignatureNames();
foreach (string name in names)
{
PdfDictionary normal = PdfReader.GetPdfObject(fields.GetNormalAppearance(name)) as PdfDictionary;
PdfDictionary frm = normal?.GetAsDict(PdfName.RESOURCES)?.GetAsDict(PdfName.XOBJECT)?.GetAsStream(PdfName.FRM);
PdfDictionary frmResources = frm?.GetAsDict(PdfName.RESOURCES);
PdfDictionary frmXobjectResources = frmResources?.GetAsDict(PdfName.XOBJECT);
if (frmXobjectResources != null)
{
Console.WriteLine("Found XObject resources of FRM XObject");
clearLayer(pdfStamper.Writer, frmXobjectResources, PdfName.N1);
clearLayer(pdfStamper.Writer, frmXobjectResources, PdfName.N3);
clearLayer(pdfStamper.Writer, frmXobjectResources, PdfName.N4);
pdfStamper.MarkUsed(frmXobjectResources);
pdfStamper.MarkUsed(frmResources);
pdfStamper.MarkUsed(frm);
}
}
}
使用此輔助方法:
void clearLayer(PdfWriter writer, PdfDictionary frmXobjectResources, PdfName layerName)
{
PdfStream existingLayer = frmXobjectResources.GetAsStream(layerName);
if (existingLayer != null)
{
PdfArray bBox = existingLayer.GetAsArray(PdfName.BBOX);
PdfTemplate newLayer = PdfTemplate.CreateTemplate(writer, 0, 0);
newLayer.BoundingBox = PdfReader.GetNormalizedRectangle(bBox);
frmXobjectResources.Put(layerName, newLayer.IndirectReference);
}
}
在不同的渲染器中,原始示例文檔的簽名外觀和由上述代碼生成的文檔如下所示:
但是,請注意:如果文檔帶有認證簽名,而不僅僅是批准簽名,尤其是不允許更改的認證簽名,Acrobat 很可能不會喜歡結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.