ITextSharp/Pdftk:将来自Web的Base64图像放在PDF上作为伪签名

本文关键字:PDF 图像 Pdftk 将来 Base64 Web ITextSharp | 更新日期: 2023-09-27 17:49:17

我正试图概念化一种方法来获得base64图像到一个已经呈现的PDF在ittext。目标是将PDF保存到磁盘,然后重新打开以在正确的位置应用"签名"。

我没有在网上找到任何成功的例子,所以我问Stack。

我的应用程序使用。net c#。

对于如何开始有什么建议吗?

ITextSharp/Pdftk:将来自Web的Base64图像放在PDF上作为伪签名

正如@mkl提到的这个问题令人困惑,尤其是标题——通常base64签名不能放在一起。我猜你想在PDF上放一个base64的图片作为伪签名?

快速入门示例:

static void Main(string[] args)
{
    string currentDir = AppDomain.CurrentDomain.BaseDirectory;
    // 'INPUT' => already rendered pdf in iText
    PdfReader reader = new PdfReader(INPUT);
    string outputFile = Path.Combine(currentDir, OUTPUT);
    using (var stream = new FileStream(outputFile, FileMode.Create)) 
    {
        using (PdfStamper stamper = new PdfStamper(reader, stream))
        {
            AcroFields form = stamper.AcroFields;
            var fldPosition = form.GetFieldPositions("lname")[0];
            Rectangle rectangle = fldPosition.position;
            string base64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
            Regex regex = new Regex(@"^data:image/(?<mediaType>[^;]+);base64,(?<data>.*)");
            Match match = regex.Match(base64Image);
            Image image = Image.GetInstance(
                Convert.FromBase64String(match.Groups["data"].Value)
            );
            // best fit if image bigger than form field
            if (image.Height > rectangle.Height || image.Width > rectangle.Width)
            {
                image.ScaleAbsolute(rectangle);
            }
            // form field top left - change parameters as needed to set different position 
            image.SetAbsolutePosition(rectangle.Left + 2, rectangle.Top - 2);
            stamper.GetOverContent(fldPosition.page).AddImage(image);
        }
    }
}

如果您不使用PDF表单模板,(代码片段中的AcroFields)显式设置绝对位置并根据需要缩放图像