PDFsharp & MigraDoc Foundation
http://forum.pdfsharp.de/

Is it possible to use private TrueType fonts in AcroForms?
http://forum.pdfsharp.de/viewtopic.php?f=2&t=4106
Page 1 of 1

Author:  jnickoloff [ Thu Mar 05, 2020 8:51 pm ]
Post subject:  Is it possible to use private TrueType fonts in AcroForms?

Recently, I've been trying to utilize PdfSharp to add a signature to a fillable form. I was hoping to utilize Kaushan Script (https://fonts.google.com/specimen/Kaushan+Script) for the signature, as that is what I'm utilizing on the front end as well as for when the signature is added by box coordinates. When I go to set the font on a PdfTextField, the font stays the same as the font was before even though the text is added.

Here is how I am adding it:
Code:
      public void AddSignatureToFillableForm(IPdfEncryptedStreamProvider streamProvider, string signature)
      {
         using (var pdfDoc = PdfReader.Open(streamProvider.GetDecryptedReadStream(), PdfDocumentOpenMode.Modify))
         {
            if (!pdfDoc.AcroForm.Elements.ContainsKey("/NeedAppearances"))
            {
               pdfDoc.AcroForm.Elements.Add("/NeedAppearances", new PdfBoolean(true));
            }
            else
            {               
               pdfDoc.AcroForm.Elements["/NeedAppearances"] = new PdfBoolean(true);
            }
            for (int i = 0; i < pdfDoc.AcroForm.Fields.Count; i++)
            {
               var field = pdfDoc.AcroForm.Fields[i];

               if (field.Name.Equals("Signature"))
               {
                  (field as PdfTextField).Font = new XFont(SignatureConstants.SupportedFonts.KaushanScriptRegular, 12);
                  field.Value = new PdfString(signature);
               }
               else if (field.Name.Equals("Initials"))
               {
                  (field as PdfTextField).Font = new XFont(SignatureConstants.SupportedFonts.KaushanScriptRegular, 12);
                  field.Value = new PdfString(createInitials(signature));
               }
            }
            pdfDoc.Save(streamProvider.GetEncryptedWriteStream());
         }
      }


I've tried changing the Default Appearance value as well, and that ends up creating an empty string when set to Kaushan-Script Regular.

This is the working snippet for using KaushanScript when drawing the string just to show that it isn't necessarily with the Font Resolver.

Code:
public void AddSignatureToCoordinateBox(IPdfEncryptedStreamProvider streamProvider, long x, long y, long height, long width, string signature, long fontSize)
      {
         var adjustedFontSize = GetAdjustedFontSize(width, height, fontSize, signature, streamProvider);
         var adjustedTop = y - (adjustedFontSize - fontSize);

         using (var pdfDoc = PdfReader.Open(streamProvider.GetDecryptedReadStream(), PdfDocumentOpenMode.Modify))
         {
            var pdfPage = pdfDoc.Pages[0];

            var sigRectangle = new XRect(x, adjustedTop, width, height);

            var gfx = XGraphics.FromPdfPage(pdfPage);

            var font = new XFont(SignatureConstants.SupportedFonts.KaushanScriptRegular, adjustedFontSize);
            var textFormatter = new XTextFormatter(gfx);
            textFormatter.Alignment = XParagraphAlignment.Center;
            textFormatter.DrawString(signature, font, XBrushes.Black, sigRectangle);
            Logger.LogInformation($"Adding signature {signature} to document.");
            pdfDoc.Save(streamProvider.GetEncryptedWriteStream());
         }
      }


Just wasn't sure if this was supported and before I asked more questions wanted to double check. Thanks for the help.

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/