2016-10-21 6 views
1

단어 문서에 서명란을 추가 할 수는 있지만 접근 방법이 좋지 않습니다. 나는 내 견해를 다루기 위해 많은 수색을했지만 어떤 것도 발견하지 못했습니다.서명 라인 추가 Word-Excel

는 자, 여기 당신이 내가 AddSignatureLine의 funciton를 호출 할 때,이 창은 (ShowDialog를 같은) 모달을 열고 아래를 참조 닫이 때까지 코드가 흐르지 않는 글쎄 내 코드

 private void CreateNewPage() 
     { 
      object missing = System.Reflection.Missing.Value; 
      object fileName = @"C:\docs\mydoc.docx"; 
      object readOnly = false; 
      object isVisible = true; 

      //Start Word and open a document. 
      Word._Application oWord; 
      Word._Document oDoc; 
      oWord = new Word.Application(); 
      oWord.Visible = true; 

      oDoc = oWord.Documents.Open(ref fileName, ref missing, ref readOnly, 
       ref missing, ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref isVisible, ref missing, 
       ref missing, ref missing, ref missing); 


      // var numberOfPages = oDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false); 



      object oEndOfDoc = "\\endofdoc"; 
      object paramNextPage = Word.WdBreakType.wdSectionBreakNextPage; 

      oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertBreak(ref paramNextPage); 
      //Insert a page break 
      object breakPage = Word.WdBreakType.wdPageBreak; 


      object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges; 
      object originalFormat = Word.WdOriginalFormat.wdOriginalDocumentFormat; 
      object routeDocument = false; 

      object what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage; 
      object which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToLast; 
      object count = 3; 

      oWord.Selection.GoTo(ref what, ref which, ref count, ref missing);  

      object sigID = "{00000000-0000-0000-0000-000000000000}"; 
      Timer t = new Timer(); 
      t.Elapsed += (sender, args) => 
      { 


       SendKeys.SendWait("{TAB}"); 
       SendKeys.SendWait("~");     
       t.Stop(); 

      }; 

      t.Interval = 2000; 
      t.Start(); 
      try 
      { 

       oWord.Activate(); 

       SignatureSet signatureSet = oWord.ActiveDocument.Signatures; 
       // signatureSet.ShowSignaturesPane = false; 
       Signature objSignature = signatureSet.AddSignatureLine(sigID); 
       objSignature.Setup.SuggestedSigner = "docSigner"; 
       objSignature.Setup.SuggestedSignerEmail = "[email protected]"; 
       objSignature.Setup.ShowSignDate = true;   

       // dynamic shape = objSignature.SignatureLineShape; 

      } 
      catch (Exception ex){} 

      oWord.Documents.Save(); 
      oWord.Quit(); 

      try 
      { 
       Marshal.ReleaseComObject(oWord); 
      } 
      catch (Exception){} 

     } 

입니다 ..

나는 이것을 sendkey를 사용하지 않고 무시하지만 좋은 방법은 아닙니다. 그러나, 다른 해결책을 찾지 못하면 Win32 API를 사용하여이 창 (단어의 하위 창)을 찾으려고 할 것입니다.

어쨌든 이것을 우회하려면 궁금합니다. 수천 개의 문서가 있기 때문에 빠른 방법을 찾고 있습니다.

이 서명란을 추가하면 DocuSign을 사용하여 문서에 서명 할 수 있습니다. 그러나 문서에 서명란이 없으면 DocuSign은 문서에 디지털 서명을하지 않습니다. 그런 다음이 줄을 추가해야합니다.

답변

1

모달 서명 설정 대화 상자의 표시를 우회의 방법이 보이지 않는다, 나는 당신에게 제대로 구성 서명란이 포함 된 빌딩 블록을 기반으로 다음 해결 방법 제안 :

  1. 만들기를 새로운 빈 .dotx 템플릿 이 템플릿은 빌딩 블록 항목을 저장하는 데 사용됩니다.
  2. 서명 줄이 포함 된 샘플 문서를 만들고이 서명 줄을 삽입> 빠른 부품> 빠른 부품 갤러리에 선택 저장을 사용하여 이전 단계에서 작성한 템플릿에.
  3. 프로젝트에 템플릿을 포함하고 실행 파일 또는 추가 기능으로 템플릿을 배포하십시오. 런타임시
  4. var template = Application.Templates 
        .OfType<Microsoft.Office.Interop.Word.Template>() 
        .FirstOrDefault(t => t.Name == addInFileName); 
    var buildingBlock = template.BuildingBlockEntries.Item("Signature Line"); 
    buildingBlock.Insert(range, true); 
    
  5. (빌딩 블록 템플릿을 언로드) 이제 템플릿에서 빌딩 블록을 삽입 할 수있는 추가 기능

    Application.AddIns.Add(fullPathToDotx); 
    
  6. 으로 템플릿을로드

서명란의 속성을 수정해야하는 경우

  • 따라서 구성된 복수 서명란 빌딩 블록을 준비하거나
  • 동적 빌딩 블록을 템플릿 패치 (예를 들어 런타임에 복사본을 만들고 Open XML SDK를 사용하여 파일을 열고 조작 한 다음 수정 된 버전을 임시로로드합니다.
+0

재미있는 것 같습니다. 감사합니다. 나는 그것을하려고 노력하고있다. 그러나 나는 제 3의 단계에서 붙이게된다. 이 템플릿을 C# 프로젝트에 설치하는 방법은 무엇입니까? 추가 기능을 만들지 않습니다. Office Interop을 사용하는 정상적인 exe입니다. – unbalanced

+0

설치 방법을 알았습니다.그러나 exceptipn이 있습니다. 처리되지 않은 'System.Runtime.InteropServices.COMException'예외가 WindowsFormsApplication1.exe에서 발생했습니다. 추가 정보 : 요청한 컬렉션 구성원이 존재하지 않습니다. 여기 var buildingBlock = template.BuildingBlockEntries.Item ("TestSignature"); template.BuildingBlockEntries.Count가 0이므로 입니다. – unbalanced

+0

@unbalanced : 혼란을 가져 주어서 죄송합니다. 내가 말한 의미는'Application.AddIns.Add'를 사용하여 Word에로드 할 수 있도록 런타임에 해당 템플릿을 사용할 수 있도록해야한다는 것입니다. –