上週我被要求爲一個盲人構建一個應用程序,以編程方式填寫一份PDF文檔。他遇到的問題是,如果文檔中的字段沒有正確標記,那麼他無法將他的簽名和其他信息放在正確位置的文檔中。如何檢測PDF文檔中的簽名行,然後插入簽名?
我的第一種方法是嘗試使用iTextSharp的閱讀文檔,然後將他的簽名改成這是最有可能是簽名框中的字段:
public string[] MassFieldEdit(IDictionary<string, string> userData, string originalDocument, string edittedDocument, bool flatten)
{
PdfReader reader = new PdfReader(originalDocument);
reader.SelectPages("1-" + reader.NumberOfPages.ToString());
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(edittedDocument, FileMode.Create)))
{
AcroFields form = stamper.AcroFields;
ICollection<string> fieldKeys = form.Fields.Keys;
List<string> leftover = new List<string>(fieldKeys);
foreach (string fieldKey in fieldKeys)
{
foreach (KeyValuePair<string, string> s in user)
{
//Replace Form field with my custom data
if (fieldKey.ToLower().Contains(s.Key.ToLower()))
{
form.SetField(fieldKey, s.Value);
leftover.Remove(fieldKey);
}
}
}
//The below will make sure the fields are not editable in
//the output PDF.
stamper.FormFlattening = flatten;
return leftover.ToArray();
}
}
這個工程通過採取字典集,鍵是單詞或短語,根據PDF字段進行檢查,如果字段與鍵中的單詞或短語相匹配,則將值插入字段中。
The signature box before my program edits it.
但我現在的問題是,如果當時沒有字段存在,儘管它可能有「在這裏簽名」旁邊的虛線,沒有辦法插入文本到虛線不知道虛線的位置,我的用戶也不能選擇虛線,因爲這會破壞程序的重點。
我已經看過了一些以前的問題和答案,其中包括:
- How do I get a TextField from AcroFields using iText/Sharp?
- How to convert PDF to WORD in c#
- Insert text in existing pdf with itextsharp
- ITextSharp insert text to an existing pdf
老實說,我堅持,這是我第一次使用PDF文檔。我需要一種方法來檢測簽名行,然後將他的名字插入到簽名行中,而不是在字段名稱中進行註釋。無論是在存在正確標記的字段的情況下,還是在簽名行可能不超過一行表示「在此處簽字」的文本的情況下。
任何幫助將不勝感激,甚至部分解決方案和推動正確的方向。
如果您獲得任何實際字段而不僅僅是掃描圖像。但是表單的來源是什麼?提交ADA申訴並獲得修正表格。 –
他寄給我的一些例子包括TWC替代品W-9和直接存款表格以及其他官方文件,我正在尋找一種程序化的解決方案,它可以用於包含簽名行的任何類型的PDF。我已經考慮了光學字符識別方法,但是我想知道在我走下那條路線之前是否有可用的解決方案。 – Kris