简体   繁体   English

尝试在docx文件中插入数字签名行

[英]Trying to insert a digital signature line in a docx file

I'm trying to insert a digital signature line in an openxml (docx) version of a word document. 我正在尝试在Word文档的openxml(docx)版本中插入数字签名行。 I don't get any errors but I realize I might be missing a step. 我没有收到任何错误,但我意识到我可能错过了一步。 Here's my code. 这是我的代码。 It's a windows forms application. 这是一个Windows窗体应用程序。 Can some one tell me how to properly append a digital signature line to a Run instance? 有人可以告诉我如何将数字签名行正确附加到Run实例吗? The //S// serves as a marker where we want to insert the digital signature line. // S //用作我们要在其中插入数字签名行的标记。 It's easy to find with a foreach statement. 使用foreach语句很容易找到。

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Vml.Office;
using DocumentFormat.OpenXml.Wordprocessing;

namespace KeywordSearch
{
    public partial class Form1 : Form
    {
        FileInfo[] tempfiles;
        List<FileInfo> files = new List<FileInfo>();

        public Form1()
        {
            InitializeComponent();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            string fileName = txtPath.Text;
            using (WordprocessingDocument doc =
            WordprocessingDocument.Open(fileName, false))
            {
                foreach (Text t in doc.MainDocumentPart.Document.Body.Descendants<Text>())
                {
                    if (t.Text == "//S//")
                    {
                        lbxResults.Items.Add(t.Text);

                        Run r = (Run)t.Parent;

                        SignatureLine signature = new SignatureLine();
                        signature.SuggestedSigner = "Pete Smith";
                        signature.SuggestedSigner2 = "Programmer";
                        signature.SuggestedSignerEmail = "pete.smith@navy.mil";
                        signature.SigningInstructions = "Please sign";
                        signature.ShowSignDate = true;
                        signature.AllowComments = true;



                        r.AppendChild<SignatureLine>(signature);
                    }
                }
            }

            lbxResults.Items.Add("Completed adding digital signature liens.");
        }
    private void btnBrowse_Click(object sender, EventArgs e)
    {
        openFileDialog1.ShowDialog();

        txtPath.Text = openFileDialog1.FileName;
    }
}

} }

This code contains a function AddSiganture() which searches for a ContentControl with tag "topsoft", and adds a SignatureLine to it. 该代码包含一个函数AddSiganture() ,该函数搜索带有标签“ topsoft”的ContentControl,并向其添加一个SignatureLine More information about the SignatureLine can be found here http://msdn.microsoft.com/en-us/library/documentformat.openxml.vml.office.signatureline.aspx Actually a signature line is a Picture with a shape and a shape type inside. 有关SignatureLine的更多信息,请参见http://msdn.microsoft.com/zh-cn/library/documentformat.openxml.vml.office.signatureline.aspx实际上,签名线是具有形状和形状类型的图片内。 Also it's very important to add an ImagePart to the document with a corresponding ID. 另外,将具有相应ID的ImagePart添加到文档中也很重要。 The ID of the image part must correspond to the RelationshipId of the image object inside the Picture object. 图像部分的ID必须对应于Picture对象内部的图像对象的RelationshipId

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using DocumentFormat.OpenXml.Packaging;
using Ap = DocumentFormat.OpenXml.ExtendedProperties;
using Vt = DocumentFormat.OpenXml.VariantTypes;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Wordprocessing;
using V = DocumentFormat.OpenXml.Vml;
using Ovml = DocumentFormat.OpenXml.Vml.Office;
using Ds = DocumentFormat.OpenXml.CustomXmlDataProperties;
using A = DocumentFormat.OpenXml.Drawing;
using M = DocumentFormat.OpenXml.Math;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void button1_Click(object sender, EventArgs e)
        {
            using (WordprocessingDocument document = WordprocessingDocument.Open(@"C:\Users\Tigran\Documents\qw.docx", true))
            {
                AddSiganture(document, "Tigran Topchyan", "Head of Development", "tigran.topchyan@gmail.com");
                document.Close();
            } 
        }

        public void AddSiganture(WordprocessingDocument document, string signerName, string signerTitle, string signerEmail)
        {
            MainDocumentPart mainDocumentPart1 = document.MainDocumentPart;

            string imagePartID = "ID_" + Guid.NewGuid().ToString("N");
            string signatureID = Guid.NewGuid().ToString("B");
            Picture picture1 = new Picture();

            V.Shapetype shapetype1 = new V.Shapetype() { Id = "_x0000_t75", CoordinateSize = "21600,21600", Filled = false, Stroked = false, OptionalNumber = 75, PreferRelative = true, EdgePath = "m@4@5l@4@11@9@11@9@5xe" };
            V.Stroke stroke1 = new V.Stroke() { JoinStyle = V.StrokeJoinStyleValues.Miter };

            V.Formulas formulas1 = new V.Formulas();
            V.Formula formula1 = new V.Formula() { Equation = "if lineDrawn pixelLineWidth 0" };
            V.Formula formula2 = new V.Formula() { Equation = "sum @0 1 0" };
            V.Formula formula3 = new V.Formula() { Equation = "sum 0 0 @1" };
            V.Formula formula4 = new V.Formula() { Equation = "prod @2 1 2" };
            V.Formula formula5 = new V.Formula() { Equation = "prod @3 21600 pixelWidth" };
            V.Formula formula6 = new V.Formula() { Equation = "prod @3 21600 pixelHeight" };
            V.Formula formula7 = new V.Formula() { Equation = "sum @0 0 1" };
            V.Formula formula8 = new V.Formula() { Equation = "prod @6 1 2" };
            V.Formula formula9 = new V.Formula() { Equation = "prod @7 21600 pixelWidth" };
            V.Formula formula10 = new V.Formula() { Equation = "sum @8 21600 0" };
            V.Formula formula11 = new V.Formula() { Equation = "prod @7 21600 pixelHeight" };
            V.Formula formula12 = new V.Formula() { Equation = "sum @10 21600 0" };

            formulas1.Append(formula1);
            formulas1.Append(formula2);
            formulas1.Append(formula3);
            formulas1.Append(formula4);
            formulas1.Append(formula5);
            formulas1.Append(formula6);
            formulas1.Append(formula7);
            formulas1.Append(formula8);
            formulas1.Append(formula9);
            formulas1.Append(formula10);
            formulas1.Append(formula11);
            formulas1.Append(formula12);
            V.Path path1 = new V.Path() { AllowGradientShape = true, ConnectionPointType = Ovml.ConnectValues.Rectangle, AllowExtrusion = false };
            Ovml.Lock lock1 = new Ovml.Lock() { Extension = V.ExtensionHandlingBehaviorValues.Edit, AspectRatio = true };

            shapetype1.Append(stroke1);
            shapetype1.Append(formulas1);
            shapetype1.Append(path1);
            shapetype1.Append(lock1);

            V.Shape shape1 = new V.Shape() 
            {
                Id = "_x0000_i1025", 
                Style = "width:192pt;height:96pt", 
                Alternate = "Microsoft Office Signature Line...", 
                Type = "#_x0000_t75" 
            };
            V.ImageData imageData1 = new V.ImageData() { Title = "", RelationshipId = imagePartID };

            Ovml.Lock lock2 = new Ovml.Lock()
            { 
                Extension = V.ExtensionHandlingBehaviorValues.Edit, 
                Grouping = true, Ungrouping = true, Rotation = true, Cropping = true, Verticies = true, TextLock = true 
            };

            Ovml.SignatureLine signatureLine1 = new Ovml.SignatureLine() 
            {
                Extension = V.ExtensionHandlingBehaviorValues.Edit, 
                IsSignatureLine = true, 
                Id = signatureID, 
                ProviderId = "{00000000-0000-0000-0000-000000000000}", 
                SuggestedSigner = signerName, 
                SuggestedSigner2 = signerTitle,
                SuggestedSignerEmail = signerEmail
            };

            shape1.Append(imageData1);
            shape1.Append(lock2);
            shape1.Append(signatureLine1);

            picture1.Append(shapetype1);
            picture1.Append(shape1);

            var contentControls = mainDocumentPart1.Document.Descendants<SdtElement>();
            foreach (SdtElement elem in contentControls)
            {
                if (elem.SdtProperties.GetFirstChild<Tag>().Val == "topsoft")
                {
                    var content = elem.GetFirstChild<SdtContentBlock>();
                    content.RemoveAllChildren();
                    content.Append(picture1);
                }
            }

            ImagePart imagePart1 = mainDocumentPart1.AddNewPart<ImagePart>("image/x-emf", imagePartID);
            GenerateImagePartContent(imagePart1);
        }

        public void GenerateImagePartContent(ImagePart imagePart1)
        {
            System.IO.Stream data = GetBinaryDataStream(imagePart1Data);
            imagePart1.FeedData(data);
            data.Close();
        }

        #region Binary Data
        public string imagePart1Data = "AQAAAGwAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAABQIwAAoBEAACBFTUYAAAEAtBQAAIMAAAAFAAAAAAAAAAAAAAAAAAAAAAUAACADAADEAQAAGgEAAAAAAAAAAAAAAAAAAOPjBgBuTgQACgAAABAAAAAAAAAAAAAAAEsAAAAQAAAAAAAAAAUAAAAeAAAAGAAAAAAAAAAAAAAAAAEAAIAAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAADw8PAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD/AAAAfwAAAAAAAAAAAAAAAAEAAIAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAA8PDwAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAPDw8AAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAADw8PAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD/AAAAfwAAAAAAAAAAAAAAAAEAAIAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAA////AAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAD///8AAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAMAAAD/AAAAEgAAAAAAAAADAAAAAAEAABAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA//////////8AAAAAFgAAAAAAAAA1AAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP//////////AAAAABYAAAAAAQAAAAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD//////////wABAAAWAAAAAAAAADUAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAABLAAAA/wAAAEwAAAAAAAAASwAAAAABAAACAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAFgAAAP8AAABKAAAAAAAAABYAAAAAAQAANQAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAD///8AAAAAACUAAAAMAAAAAQAAAEwAAABkAAAACQAAACcAAAAfAAAASgAAAAkAAAAnAAAAFwAAACQAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAABSAAAAcAEAAAEAAADg////AAAAAAAAAAAAAAAAkAEAAAAAAAEAAAAAYQByAGkAYQBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8eC8AAAAAAAAAAAAAAAAAyPEJ1/4HAADI8QnX/gcAAAjyCdf+BwAASFki1/4HAACAk/YBAAAAAAAAAAAAAAAAQDR3AgAAAADvewDW/gcAALGs24n+BwAAAAAAAAAAAAAAAAAA/gcAABh5LwAAAAAA4P///wAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAADAAAAAAAAACAOUwAAAAAAPHgvAAAAAACLDZ92AAAAAICT9gEAAAAAmFMh1wAAAACgPYUGAAAAAMjxCdf+BwAAPHgvAAAAAAAGAAAA/gcAAAAAAAAAAAAA0LvFdgAAAAADAAAAAAAAAOBq6gFkdgAIAAAAACUAAAAMAAAAAQAAABgAAAAMAAAAAAAAAhIAAAAMAAAAAQAAABYAAAAMAAAACAAAAFQAAABUAAAACgAAACcAAAAeAAAASgAAAAEAAAAAQA1CAAANQgoAAABLAAAAAQAAAEwAAAAEAAAACQAAACcAAAAgAAAASwAAAFAAAABYADsAFQAAABYAAAAMAAAAAAAAAFIAAABwAQAAAgAAABAAAAAHAAAAAAAAAAAAAAC8AgAAAAAAAAECAiJTAHkAcwB0AGUAbQAAAPMBoPj///IBAAAAAAAA/GueBYD4//8IAFh++/b//wAAAAAAAAAA4GueBYD4/////wAAAAAAAGyhLwAAAAAAAAAAAAAAAAD4AwAAAAAAACAOUwAAAAAAAAAAAAAAAABo8gnXAAAAAP7//////////dr71f4HAABw0Q4AAAAAAP3a+9X+BwAAYUbbif4HAAAeJgrS/////wYAAAAAAAAAMKIvAAAAAACAmEsCAAAAADgAigEAAAAAAAAAAAAAAAAHAAAAAAAAAMA4UwAAAAAAIA5TAAAAAABsoS8AAAAAAIsNn3YAAAAAAAAAAAAAAAAAOtUDAAAAAAAAAAAAAAAAAAAAAAAAAABsoS8AAAAAAAcAAAD+BwAAAGjoAwAAAADQu8V2AAAAAAAAAAAAAAAA6MIh12R2AAgAAAAAJQAAAAwAAAACAAAAJwAAABgAAAADAAAAAAAAAP///wAAAAAAJQAAAAwAAAADAAAATAAAAGQAAAApAAAAGQAAAPYAAABKAAAAKQAAABkAAADOAAAAMgAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAwAAACcAAAAYAAAAAwAAAAAAAAD///8AAAAAACUAAAAMAAAAAwAAAEwAAABkAAAAKQAAABkAAAD2AAAARwAAACkAAAAZAAAAzgAAAC8AAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAMAAAAnAAAAGAAAAAMAAAAAAAAA////AAAAAAAlAAAADAAAAAMAAABMAAAAZAAAAAAAAABQAAAA/wAAAHwAAAAAAAAAUAAAAAABAAAtAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAADAAAAJwAAABgAAAADAAAAAAAAAP///wAAAAAAJQAAAAwAAAADAAAATAAAAGQAAAAJAAAAUAAAAPYAAABcAAAACQAAAFAAAADuAAAADQAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAwAAAFIAAABwAQAAAwAAAPX///8AAAAAAAAAAAAAAACQAQAAAAAAAQAAAAB0AGEAaABvAG0AYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyjLwAAAAAAAAAAAAAAAAABg+gDAAAAAAAAAAAAAAAAMInyBAAAAABAq/IEAAAAAKCE6AMAAAAAAQAAAAAAAAABAAAAAAAAAAjzCdf+BwAAoXnbif4HAADar//V/gcAAAQAAAAAAAAACKQvAAAAAAD1////AAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAIA5TAAAAAAAsoy8AAAAAAIsNn3YAAAAACPMJ1/4HAADgfvIEAAAAAFBHEgAAAAAACPMJ1/4HAAAsoy8AAAAAAAcAAAD+BwAAAAAAAAAAAADQu8V2AAAAAAEAAAAAAAAAIGrqAWR2AAgAAAAAJQAAAAwAAAADAAAAGAAAAAwAAAAAAAACEgAAAAwAAAABAAAAHgAAABgAAAAJAAAAUAAAAPcAAABdAAAAJQAAAAwAAAADAAAAVAAAAKgAAAAKAAAAUAAAAFkAAABcAAAAAQAAAABADUIAAA1CCgAAAFAAAAAPAAAATAAAAAAAAAAAAAAAAAAAAP//////////bAAAAFQAaQBnAHIAYQBuACAAVABvAHAAYwBoAHkAYQBuAEMABgAAAAIAAAAGAAAABAAAAAYAAAAGAAAAAwAAAAYAAAAGAAAABgAAAAUAAAAGAAAABgAAAAYAAAAGAAAASwAAAEAAAAAwAAAABQAAACAAAAABAAAAAQAAABAAAAAAAAAAAAAAAAABAACAAAAAAAAAAAAAAAAAAQAAgAAAACUAAAAMAAAAAgAAACcAAAAYAAAABAAAAAAAAAD///8AAAAAACUAAAAMAAAABAAAAEwAAABkAAAACQAAAGAAAAD2AAAAbAAAAAkAAABgAAAA7gAAAA0AAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAQAAAAlAAAADAAAAAMAAAAYAAAADAAAAAAAAAISAAAADAAAAAEAAAAeAAAAGAAAAAkAAABgAAAA9wAAAG0AAAAlAAAADAAAAAMAAABUAAAAwAAAAAoAAABgAAAAcQAAAGwAAAABAAAAAEANQgAADUIKAAAAYAAAABMAAABMAAAAAAAAAAAAAAAAAAAA//////////90AAAASABlAGEAZAAgAG8AZgAgAEQAZQB2AGUAbABvAHAAbQBlAG4AdAA2AAcAAAAGAAAABgAAAAYAAAADAAAABgAAAAQAAAADAAAABwAAAAYAAAAGAAAABgAAAAIAAAAGAAAABgAAAAgAAAAGAAAABgAAAAQAAABLAAAAQAAAADAAAAAFAAAAIAAAAAEAAAABAAAAEAAAAAAAAAAAAAAAAAEAAIAAAAAAAAAAAAAAAAABAACAAAAAJQAAAAwAAAACAAAADgAAABQAAAAAAAAAEAAAABQAAAA=";

        public System.IO.Stream GetBinaryDataStream(string base64String)
        {
            return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String));
        }

        #endregion
    }
}

I've added an upgrade to the answer posted by Tigran Topchyan. 我已经对Tigran Topchyan发布的答案进行了升级。

Which enables me to generate the signatureline image at runtime. 这使我能够在运行时生成签名行图像。 instead of having the imagePart1Data hardcoded into the docx file. 而不是将imagePart1Data硬编码到docx文件中。 which will show when you open the word document with another program such as notepad or in protected mode. 当您使用记事本等其他程序或在保护模式下打开Word文档时,该文件将显示。

I've added the following to my resources: an empty signatureline image 我在资源中添加了以下内容:空的签名线图像 在此处输入图片说明

Then I've added the reference to system.drawing Then add the following to your class where you have his code (using System.Drawing). 然后,我添加了对system.drawing的引用,然后将以下内容添加到您有他的代码的类中(使用System.Drawing)。

Then you need to replace the following code in the region binary data: 然后,您需要在区域二进制数据中替换以下代码:

    public string imagePart1Data = "AQAAAGwAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAABQIwAAoBEAACBFTUYAAAEAtBQAAIMAAAAFAAAAAAAAAAAAAAAAAAAAAAUAACADAADEAQAAGgEAAAAAAAAAAAAAAAAAAOPjBgBuTgQACgAAABAAAAAAAAAAAAAAAEsAAAAQAAAAAAAAAAUAAAAeAAAAGAAAAAAAAAAAAAAAAAEAAIAAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAADw8PAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD/AAAAfwAAAAAAAAAAAAAAAAEAAIAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAA8PDwAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAPDw8AAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAADw8PAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD/AAAAfwAAAAAAAAAAAAAAAAEAAIAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAA////AAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA/wAAAH8AAAAAAAAAAAAAAAABAACAAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP8AAAB/AAAAAAAAAAAAAAAAAQAAgAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAD///8AAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAMAAAD/AAAAEgAAAAAAAAADAAAAAAEAABAAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAAAAAAAA//////////8AAAAAFgAAAAAAAAA1AAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAAAAAAP//////////AAAAABYAAAAAAQAAAAAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAQAAAEwAAABkAAAAAAAAAAAAAAD//////////wABAAAWAAAAAAAAADUAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAAAnAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAEAAABMAAAAZAAAAAAAAABLAAAA/wAAAEwAAAAAAAAASwAAAAABAAACAAAAIQDwAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAwAAAAAAACAKAAAAAwAAAABAAAAJwAAABgAAAABAAAAAAAAAP///wAAAAAAJQAAAAwAAAABAAAATAAAAGQAAAAAAAAAFgAAAP8AAABKAAAAAAAAABYAAAAAAQAANQAAACEA8AAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAAMAAAAAAAAgCgAAAAMAAAAAQAAACcAAAAYAAAAAQAAAAAAAAD///8AAAAAACUAAAAMAAAAAQAAAEwAAABkAAAACQAAACcAAAAfAAAASgAAAAkAAAAnAAAAFwAAACQAAAAhAPAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAADAAAAAAAAIAoAAAADAAAAAEAAABSAAAAcAEAAAEAAADg////AAAAAAAAAAAAAAAAkAEAAAAAAAEAAAAAYQByAGkAYQBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8eC8AAAAAAAAAAAAAAAAAyPEJ1/4HAADI8QnX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";

    public System.IO.Stream GetBinaryDataStream(string base64String)
    {
        return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String));
    }

with this: 有了这个:

    private System.IO.Stream GetBinaryDataStream(string nameToPrint, string functionToPrint)
    {
        return new System.IO.MemoryStream(CreateImageForSignatureLine(nameToPrint, functionToPrint));
    }


    private byte[] CreateImageForSignatureLine(string nameToPrint, string functionToPrint)
    {
        using (Image img = new Bitmap(My.Resources.SignatureLineEmpty))
        {
            if (!string.IsNullOrEmpty(nameToPrint))
            {
                DrawNameOnImage(img, nameToPrint);
            }
            if (!string.IsNullOrEmpty(functionToPrint))
            {
                DrawFunctionOnImage(img, functionToPrint);
            }
            DrawFunctionOnImage(img, functionToPrint);
            using (MemoryStream ms = new MemoryStream())
            {
                img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                return ms.ToArray();
            }
        }
    }


    private void DrawNameOnImage(Image img, string nameToPrint)
    {
        DrawOnSignature(img, nameToPrint, 7, 80);
    }
    private void DrawFunctionOnImage(Image img, string functionToPrint)
    {
        DrawOnSignature(img, functionToPrint, 7, 96);
    }

    private void DrawOnSignature(Image img, string text, int x, int y)
    {
        using (System.Drawing.Font font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSansSerif, 8))
        {
            using (Graphics drawing = Graphics.FromImage(img))
            {
                Brush textBrush = new SolidBrush(System.Drawing.Color.Black);
                drawing.DrawString(text, font, textBrush, x, y);
                drawing.Save();
            }
        }
    }

I hope this helps someone. 我希望这可以帮助别人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM