We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

Find text and overlaying it with PdfSignatureField produces shifted result

Thread ID:

Created:

Updated:

Platform:

Replies:

145845 Jul 10,2019 02:41 PM UTC Jul 12,2019 06:44 AM UTC WinForms 2
loading
Tags: PDF
Hugo Minoodt
Asked On July 10, 2019 02:41 PM UTC

I would like to replace the text "{signature}" with a PdfSignatureField.

I am trying to do this with PdfLoadedDocument.FindText which returns me the bounds of {signature} (here referenced by bnd)

1/ PdfLoadeDocument.Pages(0).Graphics.DrawRectangle(PdfBrushes.Green, bnd) overlays the textbox with a green rectangle correctly.

2/ Creating a PdfSignatureField and settings the bounds to bnd and adding it to the fields does NOT overlay the textbox correctly. There is a shift that equals the margins of the PDF document. I suspect that the PdfLoadeDocument.Form.Fields.Add function works with the fields offset by the margins.

3/ In PdfDocuments, there is an option for getting the margins (document.PageSettings.Margins) but this option is missing in PdfLoadedDocuments.

e.g.
If I create a document and add the signature with document.Pages(0).Graphics.DrawString("{signature}", font, PdfBrushes.Black, New Drawing.PointF(100, 200))
for testing purposes (normally I would get a file from an external party), then FindText finds it at (140,241) with margins set to 40,40

Is there a way to overlay the text correctly? Or get the margins from PdfLoadeDocument?

Example code below in VB.NET:

Dim font As PdfFont = New PdfStandardFont(Syncfusion.Pdf.Graphics.PdfFontFamily.Helvetica, 10)

        Dim signatureImage As New PdfBitmap("c:\convert\Signature.jpg")

        '* For testing only. Create my own dowument
        Dim document As New PdfDocument()

        document.Pages.Add()

        document.Pages(0).Graphics.DrawString("{signature}", font, PdfBrushes.Black, New Drawing.PointF(100, 200))
        document.Pages(0).Graphics.DrawString("{signature}", font, PdfBrushes.Black, New Drawing.PointF(100, 400))
        'MsgBox(document.PageSettings.Margins.Left & "," & document.PageSettings.Margins.Top)
        document.Save("c:\convert\Output.pdf")
        document.Close()

        '* overlay code
        Dim LoadedDocument As New PdfLoadedDocument("c:\convert\Output.pdf")
        If IsNothing(LoadedDocument.Form) Then
            LoadedDocument.CreateForm()
        End If
        Dim intIndex As Integer = 0
        'LoadedDocument.Pages(0).Size.Width

        Dim matchRect As New Generic.Dictionary(Of Integer, Generic.List(Of Drawing.RectangleF))
        If LoadedDocument.FindText("{signature}", matchRect) Then
            For Each kv As Generic.KeyValuePair(Of Integer, Generic.List(Of Drawing.RectangleF)) In matchRect
                'Dim loadedpage As Syncfusion.Pdf.PdfLoadedPage = TryCast(LoadedDocument.Pages(kv.Key), Syncfusion.Pdf.PdfLoadedPage)
                Dim loadedpage As PdfLoadedPage = LoadedDocument.Pages(kv.Key)
                For Each r As Drawing.RectangleF In kv.Value
                    intIndex = intIndex + 1

                    '* this works:
                    loadedpage.Graphics.DrawRectangle(PdfBrushes.Green, r)
                    Dim signatureField3 As New PdfSignatureField(loadedpage, "SignatureField" & intIndex)

                    Dim loadedForm As PdfLoadedForm = LoadedDocument.Form

                    '* this not, it is shifted:
                    signatureField3.Bounds = New RectangleF(r.Left, r.Top, signatureImage.Width, signatureImage.Height)

                    LoadedDocument.Form.Fields.Add(signatureField3)

                    'Dim loadedField As PdfLoadedStyledField = TryCast(loadedForm.Fields(0), PdfLoadedStyledField)
                    'Dim bounds As RectangleF = loadedField.Bounds
                    'Draw rectangle on the detected bounds
                    'LoadedDocument.Pages(0).Graphics.DrawRectangle(PdfPens.Red, bounds)

                Next
            Next
        End If

        LoadedDocument.Save("c:\convert\Output.pdf")
        LoadedDocument.Close()

Hugo Minoodt
Replied On July 11, 2019 09:51 AM UTC

I don't know how I fixed it, but suddenly it is working now :)

Sowmiya Loganathan [Syncfusion]
Replied On July 12, 2019 06:44 AM UTC

Hi Hugo, 

We glad to know that your issue is resolved. 

Regards, 
Sowmiya L 


CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Please sign in to access our forum

This page will automatically be redirected to the sign-in page in 10 seconds.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon