GroupDocs.Signature for Java 23.6 Release Notes
There are 25+ features, enhancements, and bug fixes in this release.
Full list of changes in this release
Key | Category | Summary |
---|---|---|
SIGNATURENET-4257 | Feature | Implement support of Succeeded Signature list for Verification Result |
SIGNATURENET-4255 | Feature | Implement new Barcode Type HIBC LIC 39/128 (HIBCCode39LIC, HIBCCode128LIC) |
SIGNATURENET-4254 | Feature | Implement new QR-Code Types HIBC LIC QR |
SIGNATURENET-4223 | Feature | Implement Verification of Certificate documents |
SIGNATURENET-4317 | Fix | Signed PDF Documents saved under .NET Core are not opening with the native Adobe Acrobat Reader |
SIGNATURENET-4316 | Fix | PDF Documents saved under non-licensed mode are unable to be digitally signed |
SIGNATURENET-4315 | Fix | Error on signing PDF Document with Digital signature and specific certificate properties |
SIGNATURENET-4314 | Fix | PDF documents metadata items do not detect data type on loading |
SIGNATURENET-4313 | Fix | Loading of special JPEG images raises the StackOverflowException exception |
SIGNATURENET-4312 | Fix | The exception occurs when signing Spreadsheet documents with specific X509 .pfx certificates |
SIGNATURENET-4311 | Fix | Unexpected response image when rendering .ods file |
SIGNATURENET-4310 | Fix | Exception is thrown when processing image preview with .ods file |
SIGNATURENET-4309 | Fix | GS1CompositeBar barcodes are not recognized with full original text |
SIGNATURENET-4303 | Fix | Processing time may be equal to zero for some cases under Net4.0 framework |
SIGNATURENET-4281 | Fix | Mailmark Barcode type default value throws an exception |
SIGNATURENET-4387 | Feature | Implement support of AZW3 File Type |
SIGNATURENET-4553 | Feature | Added HIBC PAS QR Codes QR, Aztec and DataMatrix |
SIGNATURENET-4551 | Feature | Added HIBC PASCode39 and PASCode128 Barcodes |
SIGNATURENET-4413 | Enhancement | Implement AZW3 as new export save file format for Word Processing documents |
SIGNATURENET-4417 | Enhancement | Migrate product from .NET 40 to NET 462 frameworks |
SIGNATURENET-4428 | Enhancement | Replace DateTime Now values with the Universal format UTC-now |
SIGNATURENET-4428 | Fix | The exception is thrown when .ps document is being opened |
SIGNATURENET-4314 | Fix | Exception with UTC DateTime format with Digital PDF signatures |
SIGNATURENET-4313 | Fix | Implicit using of third party Org.BouncyCastle in referenced libraries |
SIGNATURENET-4312 | Fix | Fixed issue with casting object types on Open Office documents |
SIGNATURENET-4369 | ★ Feature | Implement support of ZIP File Type |
SIGNATURENET-4442 | ★ Feature | Implement support of TAR File Type |
SIGNATURENET-4479 | ★ Feature | Implement Document Info for archives |
SIGNATURENET-4476 | ✜ Enhancement | Support Succeeded and Failed list as result of processing archives |
SIGNATURENET-4374 | 🔧 Fix | Error on signing Wordprocessing documents digitally with Linux generated certificates |
SIGNATURENET-4373 | 🔧 Fix | Exception on processing Spreadsheets file with Digital signatures with non Win-OS certificates |
SIGNATURENET-4203 | 🔧 Fix | Some tests for PDF throw “Invalid provider type specified” exception |
SIGNATURENET-4169 | 🔧 Fix | Some files couldn’t be processed with curent version of the product |
Major Features
This release includes three features and one enhancement:
- Implement support for Succeded list of Verification Result
- Added new Barcode Types HIBC LIC 39 and HIBC LIC 128
- Implemented new QR Code Types HIBC LIC QR, Aztec and DataMatrix
- Implement Verification of Certificate documents
- Implement support of AZW3 File Type
- Added HIBC PAS QR Codes QR, Aztec and DataMatrix
- Added HIBC PASCode39 and PASCode128 Barcodes
- Implement AZW3 as new export save file format for Word Processing documents
- Implement support of ZIP File Type
- Implement support of TAR File Type
- Implement Document Info for archives
- Support Succeeded and Failed list as result of processing archives
Implement support for Succedded list of Verification Result
VerificationResult now supports the list of the getSucceeded() verified signatures.
/**
* Verify document and list Succeded signatures
*/
Signature signature = new Signature("sample.pdf");
{
BarcodeVerifyOptions options = new BarcodeVerifyOptions();
options.setText("12345");
options.setMatchType(TextMatchType.Contains);
// verify document signatures
VerificationResult result = signature.verify(options);
if (result.isValid())
{
System.out.print("\nDocument was verified successfully!");
System.out.print("\nList of Succeded sigantures:");
for(BaseSignature temp : result.getSucceeded())
{
System.out.print(" -#"+temp.getSignatureId()+"-"+temp.getSignatureType()+" at: "+temp.getLeft()+"x"+temp.getTop()+". Size: "+temp.getWidth()+"x"+temp.getHeight());
}
}
else
{
System.out.print("\nDocument failed verification process.");
}
}
Implement Verification of Certificate documents
New CertificateVerifyOptions class contains different properties of the digital certificate file to validate over the verify method.
LoadOptions loadOptions = new LoadOptions();
{
loadOptions.setPassword("1234567890");
};
Signature signature = new Signature("certificate.pfx", loadOptions);
{
CertificateVerifyOptions options = new CertificateVerifyOptions();
{
// do not provide X.509 chain validation
options.setPerformChainValidation(false);
// find exact math
options.setMatchType(TextMatchType.Exact);
// check the serial number
options.setSerialNumber("00AAD0D15C628A13C7");
};
// verify certificate
VerificationResult result = signature.verify(options);
if (result.isValid())
{
System.out.print("\nCertificate was verified successfully!");
}
else
{
System.out.print("\nCertificate failed verification process.");
}
}
Implement support of AZW3 File Type
FileTypes was extended with new AZW3 supported file type.
/**
* Sign azw3 file type
*/
Signature signature = new Signature("sample.azw3");
{
// create sign options
TextSignOptions options = new TextSignOptions("signed!")
{
// set signature position
options.setLeft(100);
options.setTop(100);
};
// sign document to file
SignResult result = signature.sign("output.azw3", options);
}
Added HIBC PAS QR Codes QR, Aztec and DataMatrix
QRCodeTypes static class was updated with new types to support HIBC PAS QR.
/**
* <p>
* HIBC PAS QR-Code Type object.
* </p>
*/
public static final QrCodeType HIBCPASQR;
/**
* <p>
* HIBC PAS Data Matrix QR-Code Type object.
* </p>
*/
public static final QrCodeType HIBCPASDataMatrix;
/**
* <p>
* HIBC PAS Aztec QR-Code Type object.
* </p>
*/
public static final QrCodeType HIBCPASAztec;
Signature signature = new Signature("sample.pdf"");
{
// create barcode option with predefined QR-Code text that follow HIBC LIC standard
QrCodeSignOptions options = new QrCodeSignOptions("A123PROD30917/75#422011907#GP293");
{
// setup Barcode encoding type
options.setEncodeType(QrCodeTypes.HIBCPASQR);
// set signature position
options.setLeft(100);
options.setTop(100);
};
// sign document to file
SignResult result = signature.sign("output.pdf", options);
}
Added HIBC PASCode39 and PASCode128 Barcodes
BarcodeTypes static class was updated with new types to support HIBC PAS Barcodes.
/**
* <p>
* HIBC PAS 39 Barcode Type object.
* </p>
*/
public static final BarcodeType HIBCCode39PAS;
/**
* <p>
* HIBC PAS 128 Barcode Type object.
* </p>
*/
public static final BarcodeType HIBCCode128PAS;
Signature signature = new Signature("sample.pdf"");
{
// create barcode option with predefined barcode text that follow HIBC PAS standard
BarcodeSignOptions options = new BarcodeSignOptions("+A99912345/$$52001510X3");
{
// setup Barcode encoding type
options.setEncodeType(BarcodeTypes.HIBCCode39PAS);
// set signature position
options.setLeft(100);
options.setTop(100);
};
// sign document to file
SignResult result = signature.sign(outputFilePath, options);
}
Implement AZW3 as new export save file format for Word Processing documents
WordProcessingSaveOptions was updated with new types to support AZW3 save file format File Format.
Signature signature = new Signature("sample.docx");
{
// create QRCode option with predefined QRCode text
TextSignOptions signOptions = new TextSignOptions("JohnSmith")
{
// set signature position
signOptions.setLeft(100);
signOptions.setTop(100);
};
WordProcessingSaveOptions saveOptions = new WordProcessingSaveOptions()
{
saveOptions.setFileFormat(WordProcessingSaveFileFormat.Azw3);
saveOptions.setOverwriteExistingFiles(true);
};
// sign document to file
SignResult result = signature.sign("output.azw3", signOptions, saveOptions);
}
Implement support of ZIP File Type
🌐 New class DocumentResultSignature was added to describe the processed document within the archive file. This class extends BaseSignature and implements IResult interface as container of the process (sign, verify, search) over this particular document. See example below. 🌐 FileTypes was extended with new ZIP supported file type.
/**
* <p>
Get ZIP file and sign all documents within the archive
* </p>
*/
Signature signature = new Signature("sample.zip");
{
// create sign options
TextSignOptions options = new TextSignOptions("signed!");
{
// set signature position
options.setLeft(100);
options.setTop(100);
};
// sign archive to new zip file
SignResult result = signature.sign("output.zip", options);
// analyze signed documents
int number = 1;
for (BaseSignature o : signResult.getSucceeded())
{
DocumentResultSignature document = (DocumentResultSignature)o;
System.out.print("Document #"+ number++ +": "+document.getFileName()+". Processed: "+document.getProcessingTime()+", mls");
}
}
Implement support of TAR File Type
🌐 FileTypes was extended with new TAR supported file type.
/**
* <p>
* Get TAR file and sign all documents within the archive
* </p>
*/
Signature signature = new Signature("sample.tar");
{
// create list of signature options
BarcodeSignOptions bcOptions1 = new BarcodeSignOptions("12345678", BarcodeTypes.Code128);
bcOptions1.setLeft(100);
bcOptions1.setTop(100);
QrCodeSignOptions qrOptions2 = new QrCodeSignOptions("12345678", QrCodeTypes.QR);
qrOptions2.setLeft(400);
qrOptions2.setTop(400);
List<SignOptions> listOptions = new ArrayList<SignOptions>();
listOptions.add(bcOptions1);
listOptions.add(qrOptions2);
// sign document to file
SignResult signResult = signature.sign(outputFilePath, listOptions);
// analyze signed documents
System.out.print("\nList of successfully signed documents:");
int number = 1;
for (BaseSignature o : signResult.getSucceeded())
{
DocumentResultSignature document = (DocumentResultSignature)o;
System.out.print("Document #"+number++ +": "+document.getFileName()+". Processed: "+document.getProcessingTime()+", mls");
}
}
Implement Document Info for archives
🌐 Class DocumentInfo was extended with the new property getDocuments() to represent the list of the document info with the archives.
/**
* <p>
* Get zip file and obtain documents information with the archive
* </p>
*/
Signature signature = new Signature("sample.zip");
{
IDocumentInfo documentInfo = signature.getDocumentInfo();
System.out.print("Archive properties "+ Path.getFileName(archivePath)+":");
System.out.print(" - format : "+documentInfo.getFileType().getFileFormat());
System.out.print(" - extension : "+documentInfo.getFileType().getExtension());
System.out.print(" - size : "+documentInfo.getSize());
System.out.print(" - documents count : "+documentInfo.getPageCount());
// display each document information
System.out.print("Documents information:");
for (DocumentResultSignature document : documentInfo.getDocuments())
{
System.out.print(" - Document: "+document.getFileName()+" Size: "+document.getSourceDocumentSize()+" archive-size: "+document.getDestinDocumentSize());
}
}
Support Succeeded and Failed list as result of processing archives
🌐 The SignResult will keep the list of succeeded and failed DocumentResultSignature elements in the result of the Sign method.
/**
* Support Succeeded and Failed list as result of processing archives
*/
Signature signature = new Signature("sample.zip");
{
// create sign options
TextSignOptions options = new TextSignOptions("signed!");
{
// set signature position
options.setLeft(100);
options.setTop(100);
};
// sign archive to new zip file
SignResult result = signature.sign("output.zip", options);
// analyze signed documents
int number = 1;
for (BaseSignature o : signResult.getSucceeded())
{
DocumentResultSignature document = (DocumentResultSignature)o;
System.out.print("Document #"+ number++ +": "+document.getFileName()+". Processed: "+document.getProcessingTime()+", mls");
}
if (signResult.getFailed().size() > 0)
{
System.out.print("\nList of failed documents:");
number = 1;
for (BaseSignature o : signResult.getFailed())
{
DocumentResultSignature document = (DocumentResultSignature)o;
System.out.print("Document #"+number++ +": "+document.getFileName()+". Processed: "+document.getProcessingTime()+", mls");
}
}
}