Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) PDF Signature Appearance Width and HeightSee more PDF Signatures ExamplesThis example explains how the width and height of the signature appearance rectangle box is determined. Note: This example requires Chilkat v9.5.0.85 or greater.
#import <CkoPdf.h> #import <CkoJsonObject.h> #import <CkoCert.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoPdf *pdf = [[CkoPdf alloc] init]; // Load a PDF to be signed. // The "hello.pdf" is available at https://chilkatsoft.com/hello.pdf BOOL success = [pdf LoadFile: @"qa_data/pdf/hello.pdf"]; if (success == NO) { NSLog(@"%@",pdf.LastErrorText); return; } // Options for signing are specified in JSON. CkoJsonObject *json = [[CkoJsonObject alloc] init]; // In most cases, the signingCertificateV2 and signingTime attributes are required. [json UpdateInt: @"signingCertificateV2" value: [NSNumber numberWithInt: 1]]; [json UpdateInt: @"signingTime" value: [NSNumber numberWithInt: 1]]; // Put the signature on page 1, top left [json UpdateInt: @"page" value: [NSNumber numberWithInt: 1]]; [json UpdateString: @"appearance.y" value: @"top"]; [json UpdateString: @"appearance.x" value: @"left"]; // Add some text. [json UpdateString: @"appearance.text[0]" value: @"Digitally signed by: cert_cn"]; [json UpdateString: @"appearance.text[1]" value: @"current_dt"]; // Add a built-in SVG graphic to the right. [json UpdateString: @"appearance.image" value: @"blue-check-mark"]; [json UpdateString: @"appearance.imagePlacement" value: @"right"]; [json UpdateString: @"appearance.imageOpacity" value: @"100"]; // There are 4 ways the width and height of the signature rectangle can be specified. // 1) The width and height (in points) are both explicitly specified. // User space coordinates use "points" where 72 points equals 1 inch. // For example (3 inches wide and 1 inch high) // The fontScale is automatically chose to fit. In addition, if a graphic (JPG or built-in SVG) is included, // it is automatically scaled such that the text + graphic fit together in the specified rectangle. // Note: When both height and width are explicitly specified, the resultant signature appearance rectangle // will match one of the dimensions, but the other dimension will be equal or smaller. This is because the text // must be proportionally scaled. [json UpdateInt: @"appearance.width" value: [NSNumber numberWithInt: (72 * 3)]]; [json UpdateInt: @"appearance.height" value: [NSNumber numberWithInt: 72]]; // The signature would have this appearance. In this case, the height is actually less than 1 inch because // if Chilkat chose a fontScale to fill the height, the resulting text's width would be too long for the desired width. // 2) The width is explicitly specified, but we use the keyword "auto" for height. // In this case, the fontScale is chosen to achieve the desired width, // and the height will be whatever the result of the chosen font scale. // In this example, the width is 4 inches, and the height is "auto". [json UpdateInt: @"appearance.width" value: [NSNumber numberWithInt: (72 * 4)]]; [json UpdateString: @"appearance.height" value: @"auto"]; // The signature would have this appearance: // 3) The height is explicitly specified, but we use the keyword "auto" for width. // In this case, the fontScale is chosen to achieve the desired height, // and the width will be whatever the result of the chosen font scale. // In this example, the height is 1 inch (72 points) and the width is "auto". [json UpdateString: @"appearance.width" value: @"auto"]; [json UpdateInt: @"appearance.height" value: [NSNumber numberWithInt: 72]]; // The signature would have this appearance. // 4) Finally, we don't need to specify width/height at all. Instead, we can choose a fontScale // and the dimensions of the PDF signature appearance's rectangle will be the result of using the // specified fontScale. CkoJsonObject *jAppearance = [json ObjectOf: @"appearance"]; [jAppearance Delete: @"width"]; [jAppearance Delete: @"height"]; [json UpdateString: @"appearance.fontScale" value: @"10.0"]; // With fontScale = "10.0" // Load the signing certificate. (Use your own certificate.) CkoCert *cert = [[CkoCert alloc] init]; success = [cert LoadPfxFile: @"qa_data/pfx/myPdfSigningCert.pfx" password: @"pfx_password"]; if (success == NO) { NSLog(@"%@",cert.LastErrorText); return; } // Tell the pdf object to use the certificate for signing. success = [pdf SetSigningCert: cert]; if (success == NO) { NSLog(@"%@",pdf.LastErrorText); return; } success = [pdf SignPdf: json outFilePath: @"qa_output/hello_signed.pdf"]; if (success == NO) { NSLog(@"%@",pdf.LastErrorText); return; } NSLog(@"%@",@"The PDF has been successfully cryptographically signed."); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.