簡體   English   中英

使用C#為word文檔添加數字簽名

[英]Add digital signature to word document using C#

我正在構建一個將數字簽名添加到 word 文件的應用程序,為此我使用了下面的代碼。

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

        //Start Word and open a document.  
        Microsoft.Office.Interop.Word._Application oWord;
        Microsoft.Office.Interop.Word._Document oDoc;
        oWord = new Microsoft.Office.Interop.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 = Microsoft.Office.Interop.Word.WdBreakType.wdSectionBreakNextPage;

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


        object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
        object originalFormat = Microsoft.Office.Interop.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}";
      

        try
        {
            oWord.Activate();

            SignatureSet signatureSet = oWord.ActiveDocument.Signatures;
            // signatureSet.ShowSignaturesPane = false;
            Signature objSignature = signatureSet.AddSignatureLine(sigID);
            objSignature.Setup.SuggestedSigner = "docSigner";
            objSignature.Setup.SuggestedSignerEmail = "abc@xyz.com";
            objSignature.Setup.ShowSignDate = true;
            //  dynamic shape = objSignature.SignatureLineShape;
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); }

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

        try
        {
            Marshal.ReleaseComObject(oWord);
        }
        catch (Exception e) { MessageBox.Show(e.Message); }
    }

但我在以下位置遇到錯誤:

SignatureSet signatureSet = oWord.ActiveDocument.Signatures;

錯誤

Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

任何人都可以有任何想法,如何解決這個問題。 或者有任何其他解決方案將簽名添加到 Word/PDF 文件中。

或者有任何其他解決方案將簽名添加到 Word/PDF 文件中。

作為替代解決方案,您可以使用GroupDocs.Signature for .NET API 將數字簽名添加到 Word 或 PDF 文檔。

 using (Signature signature = new Signature("sample.docx"))
 {    
     // initialize digital option with certificate file path
     DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
     {
         // optional: setup image file path
         ImageFilePath = "sample.jpg",
         // set signature position
         Left = 100,
         Top = 100,   
         // set password
         Password = "1234567890"
     };
     signature.Sign("sampleSigned.docx", options);
 }

有關更多詳細信息,請參閱此文章

披露:我在 GroupDocs 擔任開發人員布道者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM