使用Novacode用图像替换word文档中的文本标签

时间:2017-01-04 23:15:20

标签: c# image novacode-docx

我有几十种不同类型的文件需要签名。签名应该去的地方有一个[[Signature]]标签。我想找到那个标签并用签名图片替换它。

我目前使用的是Novacode.DocX文档,并在包含[[Signature]]标记的段落后附加图像,但这并不能满足我的需要,因为它将签名放在签名标记的位置下面。我想直接将其插入[[Signature]]标签的位置。这是我目前的代码:

        public static MemoryStream ToSignedPDFStream(this Novacode.DocX document, string signatureImgBase64, string signatureBiometric)
    {
        var bytes = System.Convert.FromBase64String(signatureImgBase64);

        System.Drawing.Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = System.Drawing.Image.FromStream(ms);
        }

        using (MemoryStream imgStream = new MemoryStream())
        {
            image.Save(imgStream, System.Drawing.Imaging.ImageFormat.Bmp);
            imgStream.Seek(0, SeekOrigin.Begin);
            var docxImage = document.AddImage(imgStream);


            var addresses = document.FindAll("[[Signature]]");
            var paragraphs = document.Paragraphs.Where(x => x.Text.Contains("[[Signature]]"));
            foreach (var paragraph in paragraphs)
            {
                paragraph.ReplaceText("[[Signature]]", "");
                paragraph.AppendPicture(docxImage.CreatePicture(50, 150));

            }

            var memoryStream = new MemoryStream();
            document.SaveAs(memoryStream);

        }

        var pdfStream =  document.ToPDFStream();

        var biometricFile = File.WriteAllText();

        return pdfStream;
    }

这在技术上有效,但签名不正确。

2 个答案:

答案 0 :(得分:1)

我几天前必须在这里管理同样的问题:)

答案是将您的标签放入一个单元格中,然后图像可以放入单元格中,正好位于单元格所在的位置。

告诉我您是否需要代码示例来执行此操作

答案 1 :(得分:0)

解决方案:

paragraph.InsertPicture(docxImage.CreatePicture(img.width,img.height),characterPosition);

特征位置是标签在段落中的起始位置。您需要先使用regexp或其他方式收集此职位。