This topic contains 7 replies, has 2 voices, and was last updated by  Duo_Liang 2 days ago.

  • Author
    Posts
  • Participant
    divakar-loganathan
    Newbie
    Member since: 10.07.2018
    Number of posts: 8

    Hi,
    I’m trying to increase the text or print that appears after a signature block is signed (Eg: E-SIGNED by FirstName LastName on Date).
    I tried to achieve this using withSize method for the signature, but it didn’t work out(the text appears to be only the standard size).

    I think it’s not working because I’m using the signature block in a field of a form which is generated in the application.
    Is there an alternate way (for withSize) or any other approach to achieve this.

    Thank you very much in advance.

    Best Regards,
    Logan

    Keymaster
    Duo_Liang
    Guru
    Member since: 14.06.2018
    Number of posts: 767
    Approved answer

    Score

    1

    Hi Logan,

    First we could dive into what factor(s) actually affect the size of the signature text.

    Picture above shows that: the size of the signature box is the main factor, although make the signature two lines could enlarge the font size also (but not for very small signatures).

    So we’ll still talk about how to resize your signature objects. From your description “using the signature block in a field of a form which is generated in the application”, are you using Position Extraction (guide here) or Document Extraction (guide here) to locate the signatures? With these either method, it’s true that you can’t directly resize the signature field when package creation, but you do can update the size with another call before sending the package, here’s some sample code to do so ( I used Position Extraction method):

    		EslClient eslClient = new EslClient(API_KEY, API_URL);
    
    		DocumentPackage superDuperPackage = newPackageNamed("Resize Position Extraction Signatures")
    				.withSigner(SignerBuilder.newSignerWithEmail("signer1@mailinator.com")
                            .withFirstName("first name")
                            .withLastName("last name")
                            .withCustomId("signer1"))
    				.withDocument(newDocumentWithName("First Document")
    						.fromFile(FILE_PATH)
    						.withId("document1")
    						.enableExtraction()
    						.withSignature(signatureFor("esignguide1@mailinator.com")
    								.withName("Text1")
    								.withPositionExtracted()
    								.withId(new SignatureId("signature1"))
    								)
    						.withSignature(signatureFor("esignguide1@mailinator.com")
    								.withName("Text2")
    								.withPositionExtracted()
    								)
    						)
    				.build();
    
    		PackageId packageId = eslClient.createPackage(superDuperPackage);
    		
    		DocumentPackage package1 = eslClient.getPackage(packageId);
    		
    		for (Signature signature : package1.getDocument("First Document").getSignatures()) {
    			if(signature.getId().getId().equals("signature1")) {
    				signature.setWidth(300);
    				signature.setHeight(75);
    			}
    		}
    		
    		eslClient.getApprovalService().updateSignatures(package1, "document1", new ArrayList(package1.getDocument("First Document").getSignatures()));
    		
    		eslClient.sendPackage(packageId);
    

    Attachment is the test PDF I was using.

    Hope this could help!
    Duo


    Duo Liang
    OneSpan Junior Technical Evangelist
    Attachments:
    You must be logged in to view attached files.
    Participant
    divakar-loganathan
    Newbie
    Member since: 10.07.2018
    Number of posts: 8

    Score

    0

    Hi Duo,
    Thanks for your quick reply, Yes as you stated I’m using Position Extract for the extraction of the field.

    Also, thanks for your sample code, I’ll try to use similar logic to update the signature, before sending the package.

    Best Regards,
    Logan

    Participant
    divakar-loganathan
    Newbie
    Member since: 10.07.2018
    Number of posts: 8

    Score

    0

    Hi Duo,
    Thanks for your earlier response. I was able to resize successfully.

    I now have another requirement, for a particular form in which I position extract and create a signature block.
    But unfortunately, the signature block is overlapping with another field on the form(which is not a signature field, but still when the intended signature block mentioned in the previous line is signed, it overlaps the value present in this line)

    I have attached an sample screenshot for this, if you see the signature block is overlapping the line(solid line) and the below line (with value inspector).
    Is there a way to move the position of the signature block further upwards.
    I know we can use atPosition, but since I’m using position extract, I thought of using anything relative to the position extracted. (like an offset to the height with the position extracted)
    Kindly let me know if that is possible. Thank you very much in advance.

    Attachments:
    You must be logged in to view attached files.
    Keymaster
    Duo_Liang
    Guru
    Member since: 14.06.2018
    Number of posts: 767

    Score

    0

    Hi Logan,

    Is this the side effect of enlarging the signature field? I see the left-top corner of field was fixed when enlarging the size.

    Below picture shows you how the X/Y coordinates & width/height are calculated in OSS:

    Position extraction only brings you X,Y,Width,Height these four parameters, and there’s no functions to set offsets. So I’m afraid you have to modify the Y field according to its original value. And because there’s no setter for X/Y field, I used reflection mechanism in below sample code:

    		DocumentPackage package1 = eslClient.getPackage(packageId);
    		Document document = package1.getDocument("First Document");
    
    		for (Signature signature : document.getSignatures()) {
    			if (signature.getId().getId().equals("signature1")) {
    				try {
    					//step1: reset size
    					signature.setWidth(300);
    					signature.setHeight(75);
    					
    					//step2: reset y
    					java.lang.reflect.Field variableName = signature.getClass().getDeclaredField("y");
    					variableName.setAccessible(true);
    					variableName.set(signature, signature.getY() - 25);
    				} catch (NoSuchFieldException e) {
    					e.printStackTrace();
    				} catch (SecurityException e) {
    					e.printStackTrace();
    				} catch (IllegalArgumentException e) {
    					e.printStackTrace();
    				} catch (IllegalAccessException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    
    		eslClient.getApprovalService().updateSignatures(package1, "document1", new ArrayList<>(document.getSignatures()));
    

    (If you don’t want to use reflection, you can also rebuilt the signature object by passing in all of its original field values, main task was to loop through all fields under the signature.)

    If you have the control of your PDF generator application, you can also consider directly enlarge and adjust location of form which is more straight-forward than adjusting metadata after position extraction was applied.

    Duo


    Duo Liang
    OneSpan Junior Technical Evangelist
    Participant
    divakar-loganathan
    Newbie
    Member since: 10.07.2018
    Number of posts: 8

    Score

    0

    Duo, Thanks for your quick response.
    I’ll try this out and let you know.

    Cheers,
    Logan

    Participant
    divakar-loganathan
    Newbie
    Member since: 10.07.2018
    Number of posts: 8

    Score

    0

    Hi Duo,
    I tried the reflection method, it worked fine.
    Thank you very much once again.

    Best Regards,
    Logan

    Attachments:
    You must be logged in to view attached files.
    Keymaster
    Duo_Liang
    Guru
    Member since: 14.06.2018
    Number of posts: 767

    Score

    0

    Glad to help! 🙂


    Duo Liang
    OneSpan Junior Technical Evangelist

You must be logged in to reply to this topic.