C# 使用C向word文档添加数字签名#

C# 使用C向word文档添加数字签名#,c#,ms-word,digital-signature,C#,Ms Word,Digital Signature,我正在构建一个用于向word文件添加数字签名的应用程序,为此我使用了以下代码 private void CreateNewPage() { object missing = System.Reflection.Missing.Value; object fileName = @"F:\Doc\test.docx"; object readOnly = false; object isVisible

我正在构建一个用于向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); }
    }
但我在以下位置遇到错误:

线 错误 任何人都可能有任何想法,如何解决这个问题。或有任何其他解决方案添加签名到Word/PDF文件

或有任何其他解决方案添加签名到Word/PDF文件

作为替代解决方案,您可以使用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担任开发人员宣传员。

根据:“当您卸载office 2013安装并返回office 2010时,也可能发生这种情况。”。这是你的案子吗?我还在office 2013上。抱歉,找不到“签名集”类。这是来自外部库还是软件包?它是
Microsoft.Office.Core
名称空间下的
接口。
Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
 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);
 }