2017-08-07 93 views
0

上週我被要求爲一個盲人構建一個應用程序,以編程方式填寫一份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.

The signature box after.

但我現在的問題是,如果當時沒有字段存在,儘管它可能有「在這裏簽名」旁邊的虛線,沒有辦法插入文本到虛線不知道虛線的位置,我的用戶也不能選擇虛線,因爲這會破壞程序的重點。

我已經看過了一些以前的問題和答案,其中包括:

老實說,我堅持,這是我第一次使用PDF文檔。我需要一種方法來檢測簽名行,然後將他的名字插入到簽名行中,而不是在字段名稱中進行註釋。無論是在存在正確標記的字段的情況下,還是在簽名行可能不超過一行表示「在此處簽字」的文本的情況下。

任何幫助將不勝感激,甚至部分解決方案和推動正確的方向。

+1

如果您獲得任何實際字段而不僅僅是掃描圖像。但是表單的來源是什麼?提交ADA申訴並獲得修正表格。 –

+0

他寄給我的一些例子包括TWC替代品W-9和直接存款表格以及其他官方文件,我正在尋找一種程序化的解決方案,它可以用於包含簽名行的任何類型的PDF。我已經考慮了光學字符識別方法,但是我想知道在我走下那條路線之前是否有可用的解決方案。 – Kris

回答

1

的強大的解決方案(又名「努力工作解決方案」)

  1. 實現IEventListener(iText7類)
  2. 使用IEventListener得到通知的文本渲染指令和畫線操作
  3. 呈現指令做並不總是以邏輯(讀取)順序出現。修正了通過根據比較
  4. 使用語言檢測來確定語言實現比較這些對象
  5. 排序(正克的方法很簡單,但應該足夠了)
  6. 字典攻擊。查找所有在文件寫入時以任何語言表示「在此簽字」的詞的出現(因此步驟5)
  7. 如果有多個候選人或沒有候選人,請使用行渲染指令查找可能的臭名昭着的候選人「虛線」

這種方法並不容易,但是對於pdf文件中結構元素的識別有很多研究。特別是,如果您運行Google學者搜索,則會發現大量有用的文章,其中有人試圖檢測表格,列表,段落等。