Как @mkl упомянутый вопрос является запутанным, особенно заголовок - обычно base64 и signature не идут вместе. Угадав, что вы хотите разместить 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 - это всего лишь способ представления двоичных данных, таких как ASCII, UTF8, ZIP и т. Д., Поэтому это не так уж важно. Будет вашей задачей превратить эти данные в образ на основе файлов или объект .Net 'Image'. В противном случае у вас есть два шага, создайте PDF и подпишите PDF, не так ли? Для начала, хорошо ли вы с шагом создания PDF или вам нужна помощь в этом? –
Я могу сохранить PDF в файл ... но как штамповать это то, что вводит в заблуждение. Используя MemoryStream, он сохраняет исходную папку с сервером без проблем (response.BinaryWrite (содержимое)), однако - повторное открытие, а затем штампование с изображением в itextsharp - там, где я потерял. – MizAkita
Я действительно не понимаю, что вы хотите сделать. Хорошо, у вас есть PDF-файл и вы хотите что-то штамповать. Пока что так хорошо, ничего сложного пока. Но в каком отношении это * base64 * и * signature * к этой задаче? Вы хотите штамповать подпись? Какая подпись? Изображение рукописного? Или продвинутый или квалифицированный? И почему * base64 *? – mkl