1

我有几十种不同类型的文件需要签名。签名应该去哪里,有一个 [[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;
    }

从技术上讲,这可行,但签名位置不正确。

4

2 回答 2

1

几天前我不得不在这里处理同样的问题:)

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

告诉我你是否想要一个代码示例来做到这一点

于 2017-10-04T09:41:12.013 回答
0

解决方案:

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

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

于 2018-11-16T09:00:12.980 回答