ITextSharp/Pdftk: 将 Web 上的 Base64 图片作为伪签名放在 PDF 上
ITextSharp/Pdftk: place Base64 Image from Web on PDF as Pseude-Signature
我正在尝试概念化一种将 base64 图像获取到已在 iText 中呈现的 PDF 的方法。目标是将 PDF 保存到磁盘,然后重新打开以在正确的位置应用 "signature"。
我没有在网上找到其他示例,所以我问 Stack。
我的应用程序使用 .net c#。
关于如何开始的任何建议?
正如@mkl 提到的,这个问题令人困惑,尤其是标题 - 通常 base64 和 signature do not go together. Guessing you want to place a base64 image from web 在 PDF 上作为伪签名?!?!
一个快速入门的示例:
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
在代码片段中)明确设置绝对位置并根据需要缩放图像。
我正在尝试概念化一种将 base64 图像获取到已在 iText 中呈现的 PDF 的方法。目标是将 PDF 保存到磁盘,然后重新打开以在正确的位置应用 "signature"。
我没有在网上找到其他示例,所以我问 Stack。
我的应用程序使用 .net c#。
关于如何开始的任何建议?
正如@mkl 提到的,这个问题令人困惑,尤其是标题 - 通常 base64 和 signature do not go together. Guessing you want to place a base64 image from web 在 PDF 上作为伪签名?!?!
一个快速入门的示例:
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
在代码片段中)明确设置绝对位置并根据需要缩放图像。