C# 添加签名行Word Excel
我可以在word文档中添加签名行,但我觉得我的方法不太好。我找了很多来处理我的情况,但没有找到 这是我的密码C# 添加签名行Word Excel,c#,excel,ms-word,signature,C#,Excel,Ms Word,Signature,我可以在word文档中添加签名行,但我觉得我的方法不太好。我找了很多来处理我的情况,但没有找到 这是我的密码 private void CreateNewPage() { object missing = System.Reflection.Missing.Value; object fileName = @"C:\docs\mydoc.docx"; object readOnly = fal
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 = "abc@xyz.com";
objSignature.Setup.ShowSignDate = true;
// dynamic shape = objSignature.SignatureLineShape;
}
catch (Exception ex){}
oWord.Documents.Save();
oWord.Quit();
try
{
Marshal.ReleaseComObject(oWord);
}
catch (Exception){}
}
正如你在下面看到的,当我调用AddSignatureLine函数时,这个窗口会打开模态(比如showdialog),直到关闭它,代码才流动
我用sendkey绕过了这个问题,但我们知道这不是一个好方法。但是,如果我找不到任何其他解决方案,那么我将尝试使用Win32 API查找此窗口(word的子窗口)
但我很好奇,是否有任何方法可以绕过这个问题?因为有上千个文档,我也在寻找一种更快的方法
添加此签名行后,我们可以使用DocuSign对文档进行签名。但是,如果文档中没有任何签名行,DocuSign不会对文档进行数字签名。然后我们必须添加这一行。由于似乎无法绕过模式签名设置对话框的显示,我建议您采用以下解决方法,该方法基于包含正确配置的签名行的构建块:
Application.AddIns.Add(fullPathToDotx);
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);
var-template=Application.Templates
第()类
.FirstOrDefault(t=>t.Name==addInFileName);
var buildingBlock=template.BuildingBlockEntries.Item(“签名行”);
buildingBlock.Insert(范围,真);
- 准备相应配置的多个签名行构建块,或
- 动态修补构建块模板(例如,通过在运行时创建副本,使用open XML SDK打开和操作文件,并临时加载修改后的版本)
应用程序将其加载到Word中。AddIns.Add
。嘿,谢谢,我现在解决了。如您所见,我在“保存在”中选择了我的模板然后我得到了一个构建块条目,在它运行良好之后:)再次非常感谢。但我们会给这个应用程序,我必须安装这个模板?没有办法自动完成吗?@unbalanced:显然,模板必须出现在应用程序运行的机器上。如果这是您的意思,那么您不必在Word中安装/注册模板。您可以使用步骤4中的代码仅在需要时加载它。我建议您将模板与可执行文件放在同一文件夹中,然后使用var path=path.GetDirectoryName(Assembly.getexecutinggassembly().Location)加载加载项;var addinFileName=Path.Combine(路径,“SignatureTemplate.dotx”);Application.AddIns.Add(addinFileName)代码>