Creating PDF Documents
The SBSDKPDFRenderer
class takes an image storage and renders the contained images into a PDF.
For each image a page is generated. The generated pages have sizes that correspond to e.g. DIN A4, US Letter or Custom.
As the images are embedded unscaled the resolution for each page depends on its image.
PDFs can be encrypted using SBSDKAESEncrypter
or your custom written encryption classes.
The PDF's data is encrypted in memory before it is written to disk. To decrypt the PDF you need to run proper decryption in your backend or clients.
NOTE: The Scanbot SDK does not lock the PDF with the password, but rather encrypts the actual file. This provides the best level of protection.
To decrypt the PDF file you can use the key
property of SBSDKAESEncrypter
or generate the key yourself using salt
, password
and iterations
.
See SBSDKPDFRendererPageSize
for further information.
The operations' completion handlers are called in main thread.
Example code for creating a standard PDF from an image storage:
- Swift
- Objective-C
// Create an image storage to save the captured document images to
let imagesURL = SBSDKStorageLocation.applicationDocumentsFolderURL.appendingPathComponent("Images")
let imagesLocation = SBSDKStorageLocation.init(baseURL: imagesURL)
guard let imageStorage = SBSDKIndexedImageStorage(storageLocation: imagesLocation) else { return }
// Define the indices of the images in the image storage you want to render into a PDF, e.g. the first 3.
// To include all images you can simply pass nil for the indexSet. The indexSet is validated internally.
// You don't need to concern yourself with the validity of all the indices.
let indexSet = IndexSet(integersIn: 0...2)
// Specify the file URL where the PDF will be saved to. Nil makes no sense here.
guard let outputPDFURL = URL(string: "outputPDF") else { return }
// In case you want to encrypt your PDF file, create encrypter using a password and an encryption mode.
let encrypter = SBSDKAESEncrypter(password: "password_example#42", mode: .AES256)
// Create the OCR configuration for a searchable PDF (HOCR).
let ocrConfiguration = SBSDKOpticalCharacterRecognizerConfiguration.scanbotOCR()
// Create the default PDF rendering options.
let options = SBSDKPDFRendererOptions()
// Set the OCR Configuration.
options.ocrConfiguration = ocrConfiguration // Comment this line to not generate HOCR
// Create the PDF renderer and pass the PDF options to it.
let renderer = SBSDKPDFRenderer(options: options)
// Start the rendering operation and store the SBSDKProgress to watch the progress or cancel the operation.
let progress = renderer.renderImageStorage(imageStorage,
indexSet: indexSet,
encrypter: encrypter,
output: outputPDFURL) { finished, error in
if finished && error == nil {
// Now you can access the pdf file at outputPDFURL.
}
}
// Create an image storage to save the captured document images to
NSURL *imagesURL = [[SBSDKStorageLocation applicationDocumentsFolderURL]
URLByAppendingPathComponent:@"Images"];
SBSDKStorageLocation *imagesLocation = [[SBSDKStorageLocation alloc] initWithBaseURL:imagesURL];
SBSDKIndexedImageStorage *imageStorage = [[SBSDKIndexedImageStorage alloc] initWithStorageLocation:imagesLocation];
// Define the indices of the images in the image storage you want to render into a PDF, e.g. the first 3.
// To include all images you can simply pass nil for the indexSet. The indexSet is validated internally.
// You don't need to concern yourself with the validity of all the indices.
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
// Specify the file URL where the PDF will be saved to. Nil makes no sense here.
NSURL *outputPDFURL = [NSURL URLWithString:@"outputPDF"];
// In case you want to encrypt your PDF file, create encrypter using a password and an encryption mode.
SBSDKAESEncrypter *encrypter = [[SBSDKAESEncrypter alloc] initWithPassword:@"password_example#42"
mode:SBSDKAESEncrypterModeAES256];
// Create the OCR configuration for a searchable PDF (HOCR).
SBSDKOpticalCharacterRecognizerConfiguration *ocrConfiguration
= [SBSDKOpticalCharacterRecognizerConfiguration scanbotOCR];
// Create the default PDF rendering options.
SBSDKPDFRendererOptions *options = [[SBSDKPDFRendererOptions alloc] init];
// Set the OCR Configuration.
options.ocrConfiguration = ocrConfiguration; // Comment this line to not generate HOCR
// Create the PDF renderer and pass the pdf rendering options.
SBSDKPDFRenderer *renderer = [[SBSDKPDFRenderer alloc] initWithOptions:options];
// Start the rendering operation and store the SBSDKProgress to watch the progress or cancel the operation.
SBSDKProgress *progress = [renderer renderImageStorage:imageStorage
indexSet:indexSet
encrypter:encrypter
output:outputPDFURL
completion:^(BOOL finished, NSError *error) {
if (finished && error == nil) {
// Now you can access the pdf file at outputPDFURL.
}
}];
Want to scan longer than one minute?
Generate your free "no-strings-attached" Trial License and properly test the Scanbot SDK.
Get your free Trial LicenseWhat do you think of this documentation?
What can we do to improve it? Please be as detailed as you like.