itextsharp 获取文本_使用itextsharp从签名图像中获取Layer2文本(签名描述)
雖然Bruno以包含"第2層"的PDF開頭解決了這個問題,但請允許我先說明使用這些"簽名層"在PDF簽名外觀是不 PDF規范,規范實際上根本不知道這些層!因此,如果您嘗試解析特定圖層,則可能找不到這樣的圖層"或者更糟糕的是,找到一個看起來像那個包含錯誤數據的圖層(一個名為n2的XObject)的東西。
盡管如此,無論您是從第2層查找文本還是從簽名外觀中查找文本,都可以使用iTextSharp文本提取功能。我使用Bruno的代碼作為檢索n2圖層的基礎。
public static void ExtractSignatureTextFromFile(FileInfo file)
{
try
{
Console.Out.Write("File: {0}\n", file);
using (var pdfReader = new PdfReader(file.FullName))
{
AcroFields fields = pdfReader.AcroFields;
foreach (string name in fields.GetSignatureNames())
{
Console.Out.Write(" Signature: {0}\n", name);
iTextSharp.text.pdf.AcroFields.Item item = fields.GetFieldItem(name);
PdfDictionary widget = item.GetWidget(0);
PdfDictionary ap = widget.GetAsDict(PdfName.AP);
if (ap == null)
continue;
PdfStream normal = ap.GetAsStream(PdfName.N);
if (normal == null)
continue;
Console.Out.Write(" Content of normal appearance: {0}\n", extractText(normal));
PdfDictionary resources = normal.GetAsDict(PdfName.RESOURCES);
if (resources == null)
continue;
PdfDictionary xobject = resources.GetAsDict(PdfName.XOBJECT);
if (xobject == null)
continue;
PdfStream frm = xobject.GetAsStream(PdfName.FRM);
if (frm == null)
continue;
PdfDictionary res = frm.GetAsDict(PdfName.RESOURCES);
if (res == null)
continue;
PdfDictionary xobj = res.GetAsDict(PdfName.XOBJECT);
if (xobj == null)
continue;
PRStream n2 = (PRStream) xobj.GetAsStream(PdfName.N2);
if (n2 == null)
continue;
Console.Out.Write(" Content of normal appearance, layer 2: {0}\n", extractText(n2));
}
}
}
catch (Exception ex)
{
Console.Error.Write("Error... " + ex.StackTrace);
}
}
public static String extractText(PdfStream xObject)
{
PdfDictionary resources = xObject.GetAsDict(PdfName.RESOURCES);
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(strategy);
processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(xObject), resources);
return strategy.GetResultantText();
}
File: ...\signature_n2.pdf
Signature: Signature1
Content of normal appearance: This document was signed by Bruno
Specimen.
Content of normal appearance, layer 2: This document was signed by Bruno
Specimen.
由于此示例使用OP期望的第2層,因此它已包含相關文本。
總結
以上是生活随笔為你收集整理的itextsharp 获取文本_使用itextsharp从签名图像中获取Layer2文本(签名描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文带你搞懂C#多线程的5种写法
- 下一篇: CAN通信机制