ITextSharp/Pdftk: поместите изображение Base64 из Интернета в PDF как псевдоподпись
Я пытаюсь осмыслить способ получения изображения base64 в уже отрендеренный PDF в iText. Цель состоит в том, чтобы сохранить PDF на диск, а затем снова открыть, чтобы применить "подпись" в нужном месте.
Мне не удалось найти другие примеры в Интернете, поэтому я спрашиваю Стек.
Мое приложение использует.net C#.
Любой совет, как начать?
1 ответ
Как упомянул @mkl, вопрос запутанный, особенно заголовок - обычно base64 и подпись не сочетаются друг с другом. Предполагается, что вы хотите разместить изображение base64 из Интернета в формате 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
в фрагменте кода) явно установить абсолютную позицию и масштабировать изображение по мере необходимости.