Попытка вставить строку цифровой подписи в файл DOCX - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь вставить строку цифровой подписи в текстовую версию документа openxml (docx). Я не получаю никаких ошибок, но понимаю, что могу пропустить шаг. Вот мой код Это приложение Windows Forms. Может кто-нибудь сказать мне, как правильно добавить строку цифровой подписи в экземпляр Run? // S // служит маркером, куда мы хотим вставить строку цифровой подписи. Это легко найти с помощью оператора 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;
    }
}

}

Ответы [ 2 ]

5 голосов
/ 13 июля 2012

Этот код содержит функцию AddSiganture(), которая ищет ContentControl с тегом "topsoft" и добавляет к нему SignatureLine. Более подробную информацию о SignatureLine можно найти здесь http://msdn.microsoft.com/en-us/library/documentformat.openxml.vml.office.signatureline.aspx На самом деле линия подписи - это изображение с формой и типом формы внутри. Также очень важно добавить ImagePart к документу с соответствующим идентификатором. Идентификатор части изображения должен соответствовать RelationshipId объекта изображения внутри объекта Picture.

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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";

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

        #endregion
    }
}
0 голосов
/ 24 июня 2015

Я добавил обновление к ответу Тиграна Топчяна.

Что позволяет мне генерировать изображение линии подписи во время выполнения. вместо жесткого изображения imagePart1Data в файл docx. который будет отображаться при открытии документа word с помощью другой программы, например, блокнота или в защищенном режиме.

Я добавил следующее к своим ресурсам: пустое изображение подписи enter image description here

Затем я добавил ссылку на system.drawing. Затем добавьте следующее в ваш класс, где у вас есть его код (с помощью System.Drawing).

Затем необходимо заменить следующий код в двоичных данных региона:

    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));
    }

с этим:

    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();
            }
        }
    }

Надеюсь, это кому-нибудь поможет.

...