我可以在word文档中添加签名行,但我对自己的方法感觉不太好。我经常搜索我的sitautation但没找到任何。
这是我的代码
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找到这个窗口(单词的子窗口)。
但我很好奇是否还有绕过这个?因为有数千份文件,我也在寻找更快的方法。
添加此签名行后,我们就可以使用DocuSign签署文档。但如果文档中没有任何签名行,DocuSign不会以数字方式签署文档。然后我们必须添加这一行。
答案 0 :(得分:1)
由于似乎无法绕过模式签名设置对话框的显示,我建议您使用以下解决方法,该解决方案基于包含正确配置的签名行的构建块:
在运行时,将模板作为加载项加载
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);
(卸载构建基块模板)
如果您需要修改签名行的属性,可以