751 lines
39 KiB
C++
751 lines
39 KiB
C++
// CkPdf.h: interface for the CkPdf class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// This header is generated for Chilkat 11.3.0
|
|
|
|
#define _CkVersion 11.3.0
|
|
|
|
#ifndef _CkPdf_H
|
|
#define _CkPdf_H
|
|
|
|
#include "chilkatDefs.h"
|
|
#include "CkString.h"
|
|
#include "CkClassWithCallbacks.h"
|
|
|
|
class CkJsonObject;
|
|
class CkBinData;
|
|
class CkCert;
|
|
class CkTask;
|
|
class CkStringBuilder;
|
|
class CkHttp;
|
|
class CkPrivateKey;
|
|
class CkBaseProgress;
|
|
|
|
|
|
|
|
#if !defined(__sun__) && !defined(__sun)
|
|
#pragma pack (push, 8)
|
|
#endif
|
|
|
|
|
|
#undef Copy
|
|
|
|
// CLASS: CkPdf
|
|
class CK_VISIBLE_PUBLIC CkPdf : public CkClassWithCallbacks
|
|
{
|
|
private:
|
|
|
|
// Don't allow assignment or copying these objects.
|
|
CkPdf(const CkPdf &);
|
|
CkPdf &operator=(const CkPdf &);
|
|
|
|
public:
|
|
CkPdf(void);
|
|
virtual ~CkPdf(void);
|
|
|
|
static CkPdf *createNew(void);
|
|
static CkPdf *createNew2(int progLang);
|
|
void CK_VISIBLE_PRIVATE inject(void *impl);
|
|
|
|
// May be called when finished with the object to free/dispose of any
|
|
// internal resources held by the object.
|
|
void dispose(void);
|
|
|
|
|
|
|
|
CkBaseProgress *get_EventCallbackObject(void) const;
|
|
void put_EventCallbackObject(CkBaseProgress *progress);
|
|
|
|
|
|
// BEGIN PUBLIC INTERFACE
|
|
|
|
// ----------------------
|
|
// Properties
|
|
// ----------------------
|
|
// Returns true if the currently open PDF has a certification signature.
|
|
//
|
|
// PDF defines two types of signatures: approval and certification.
|
|
//
|
|
// The differences are as follows:
|
|
// * Approval: There can be any number of approval signatures in a document.
|
|
// * Certification: There can be only one certification signature and it must
|
|
// be the first one in a document.
|
|
//
|
|
bool get_HasCertificationSig(void);
|
|
|
|
// The number of embedded files present in the currently open PDF.
|
|
int get_NumEmbeddedFiles(void);
|
|
|
|
// The number of pages in the currently open PDF.
|
|
int get_NumPages(void);
|
|
|
|
// The number of digital signatures present in the currently open PDF.
|
|
int get_NumSignatures(void);
|
|
|
|
// The PDF owner password, if required.
|
|
void get_OwnerPassword(CkString &str);
|
|
// The PDF owner password, if required.
|
|
const char *ownerPassword(void);
|
|
// The PDF owner password, if required.
|
|
void put_OwnerPassword(const char *newVal);
|
|
|
|
// Defaults to 15000. This property should generally be left unchanged. If signing
|
|
// fails and the following message is in the LastErrorText: Did not allocate enough
|
|
// space for the PDF signature. , then you should increase this value. The actual
|
|
// signature size will be noted in the LastErrorText, and you can use that value to
|
|
// set an allocation size that is somewhat larger.
|
|
int get_SigAllocateSize(void);
|
|
// Defaults to 15000. This property should generally be left unchanged. If signing
|
|
// fails and the following message is in the LastErrorText: Did not allocate enough
|
|
// space for the PDF signature. , then you should increase this value. The actual
|
|
// signature size will be noted in the LastErrorText, and you can use that value to
|
|
// set an allocation size that is somewhat larger.
|
|
void put_SigAllocateSize(int newVal);
|
|
|
|
// This is a catch-all property to be used for uncommon needs. This property
|
|
// defaults to the empty string. It can be set to a list of one or more of the
|
|
// following comma separated keywords:
|
|
// * WriteStandardXref - When writing the PDF, write the cross reference
|
|
// section in standard format if possible. (The standard format is the older
|
|
// non-compressed format.)
|
|
// * NO_VERIFY_CERT_SIGNATURES - When countersigning a PDF (i.e. adding a new
|
|
// signature to a PDF that already contains one or more signatures), Chilkat will
|
|
// automatically validate the existing signatures and their certificates. (The
|
|
// signing certificates are typically embedded within a signature.) If any of these
|
|
// validations fail, the new signature is not added. Sometimes, an existing
|
|
// signature is validated, but the certs in the chain of authentication, such as
|
|
// issuer certs or root CA certs, are not included and not available to check. In
|
|
// this case, you can add the NO_VERIFY_CERT_SIGNATURES to skip the existing
|
|
// signature certificate validations.
|
|
void get_UncommonOptions(CkString &str);
|
|
// This is a catch-all property to be used for uncommon needs. This property
|
|
// defaults to the empty string. It can be set to a list of one or more of the
|
|
// following comma separated keywords:
|
|
// * WriteStandardXref - When writing the PDF, write the cross reference
|
|
// section in standard format if possible. (The standard format is the older
|
|
// non-compressed format.)
|
|
// * NO_VERIFY_CERT_SIGNATURES - When countersigning a PDF (i.e. adding a new
|
|
// signature to a PDF that already contains one or more signatures), Chilkat will
|
|
// automatically validate the existing signatures and their certificates. (The
|
|
// signing certificates are typically embedded within a signature.) If any of these
|
|
// validations fail, the new signature is not added. Sometimes, an existing
|
|
// signature is validated, but the certs in the chain of authentication, such as
|
|
// issuer certs or root CA certs, are not included and not available to check. In
|
|
// this case, you can add the NO_VERIFY_CERT_SIGNATURES to skip the existing
|
|
// signature certificate validations.
|
|
const char *uncommonOptions(void);
|
|
// This is a catch-all property to be used for uncommon needs. This property
|
|
// defaults to the empty string. It can be set to a list of one or more of the
|
|
// following comma separated keywords:
|
|
// * WriteStandardXref - When writing the PDF, write the cross reference
|
|
// section in standard format if possible. (The standard format is the older
|
|
// non-compressed format.)
|
|
// * NO_VERIFY_CERT_SIGNATURES - When countersigning a PDF (i.e. adding a new
|
|
// signature to a PDF that already contains one or more signatures), Chilkat will
|
|
// automatically validate the existing signatures and their certificates. (The
|
|
// signing certificates are typically embedded within a signature.) If any of these
|
|
// validations fail, the new signature is not added. Sometimes, an existing
|
|
// signature is validated, but the certs in the chain of authentication, such as
|
|
// issuer certs or root CA certs, are not included and not available to check. In
|
|
// this case, you can add the NO_VERIFY_CERT_SIGNATURES to skip the existing
|
|
// signature certificate validations.
|
|
void put_UncommonOptions(const char *newVal);
|
|
|
|
// The PDF user password, if required.
|
|
void get_UserPassword(CkString &str);
|
|
// The PDF user password, if required.
|
|
const char *userPassword(void);
|
|
// The PDF user password, if required.
|
|
void put_UserPassword(const char *newVal);
|
|
|
|
|
|
|
|
// ----------------------
|
|
// Methods
|
|
// ----------------------
|
|
// Embeds one or more files in a PDF.
|
|
//
|
|
// The json specifies the files to be attached to the PDF. See the linked example
|
|
// below.
|
|
//
|
|
// The json is a JSON object containing an array of JSON objects, where each object
|
|
// can contain the following members.
|
|
// * localFilePath: (required) The local file to be embedded in the PDF.
|
|
// * description: (required) It is a short description of the embedded file.
|
|
// * subType: (optional) Specifies the file type, such as application/xml,
|
|
// text/plain, etc. If not specified, then Chilkat will automatically choose a
|
|
// subType based on the file extension.
|
|
// * embeddedFilename: (optional) Specifies the name of the file to be used
|
|
// within the PDF in the desire is for it to be different than the filename in the
|
|
// local filesystem. If not present, then the filename part of the localFilePath.
|
|
// * AFRelationship: (optional starting in v11.1.0) Specifies specify the
|
|
// nature of the relationship of the embedded file. Possible values are Source
|
|
// , Data , Alternative , Supplement , and Unspecified . If unset, the default
|
|
// is Alternative .
|
|
//
|
|
// If successful, the updated PDF with embedded files is written to outFilePath.
|
|
//
|
|
bool AddEmbeddedFiles(CkJsonObject &json, const char *outFilePath);
|
|
|
|
|
|
// The same as AddEmbeddedFiles, but writes the resultant PDF to the bd.
|
|
bool AddEmbeddedFilesBd(CkJsonObject &json, CkBinData &bd);
|
|
|
|
|
|
// Adds a certificate to be used for PDF signing. To sign with more than one
|
|
// certificate, call AddSigningCert once per certificate.
|
|
//
|
|
// Note: This method is used to provide the ability to sign once with multiple
|
|
// certificates. This is different than signing with one certificate, and then
|
|
// signing again with a different certificate.
|
|
//
|
|
bool AddSigningCert(CkCert &cert);
|
|
|
|
|
|
// Adds LTV verification information to the PDF, and saves the updated PDF to outFilePath.
|
|
// This create or update a DSS (Document Security Store) in the PDF with the needed
|
|
// certificates, OCSP responses, and CRL information.
|
|
//
|
|
// Pass an empty jsonOptions. The jsonOptions exists as a placeholder for adding options if
|
|
// needed.
|
|
//
|
|
bool AddVerificationInfo(CkJsonObject &jsonOptions, const char *outFilePath);
|
|
|
|
// Adds LTV verification information to the PDF, and saves the updated PDF to outFilePath.
|
|
// This create or update a DSS (Document Security Store) in the PDF with the needed
|
|
// certificates, OCSP responses, and CRL information.
|
|
//
|
|
// Pass an empty jsonOptions. The jsonOptions exists as a placeholder for adding options if
|
|
// needed.
|
|
//
|
|
CkTask *AddVerificationInfoAsync(CkJsonObject &jsonOptions, const char *outFilePath);
|
|
|
|
|
|
// Gets the contents of the PDF's Document Security Store (/DSS) if it exists.
|
|
// Returns the information in JSON format (in json). If there is no /DSS then an
|
|
// empty JSON document {} is returned in json.
|
|
bool GetDss(CkJsonObject &json);
|
|
|
|
|
|
// Loads the bd with the contents of the Nth embedded file contained in the
|
|
// currently open PDF. The index specifies the index of the embedded file. The 1st
|
|
// embedded file is at index 0. See the example linked below.
|
|
bool GetEmbeddedFileBd(int index, CkBinData &bd);
|
|
|
|
|
|
// Gets information about the Nth embedded file contained in the currently open
|
|
// PDF. The index specifies the index of the embedded file. The 1st embedded file is
|
|
// at index 0. The json is filled with information about the embedded file. See the
|
|
// example linked below.
|
|
bool GetEmbeddedFileInfo(int index, CkJsonObject &json);
|
|
|
|
|
|
// Provides information about what transpired in the last method called. For many
|
|
// methods, there is no information. For some methods, details about what
|
|
// transpired can be obtained via LastJsonData. For example, after calling a method
|
|
// to verify a signature, the LastJsonData will return JSON with details about the
|
|
// algorithms used for signature verification.
|
|
void GetLastJsonData(CkJsonObject &json);
|
|
|
|
|
|
// If the PDF contains Metadata, then loads the Metadata XML into sb and returns
|
|
// true. If the PDF does not contain Metadata, then clears sb and returns
|
|
// false.
|
|
bool GetMetadata(CkStringBuilder &sb);
|
|
|
|
|
|
// Returns the CMS signature for the Nth signature contained in the PDF. The 1st
|
|
// signature is at index 0.
|
|
bool GetSignatureContent(int index, CkBinData &bd);
|
|
|
|
|
|
// This method retrieves the signer certificate after calling VerifySignature . Use
|
|
// the same index for index as the one passed to VerifySignature. If successful and
|
|
// the signer certificate is fully available, cert will contain the certificate.
|
|
bool GetSignerCert(int index, CkCert &cert);
|
|
|
|
|
|
// Returns JSON containing the name of each unsigned signature field found in the
|
|
// PDF.
|
|
bool GetUnsignedSigFields(CkJsonObject &json);
|
|
|
|
|
|
// This method is deprecated. Call GetLastJsonData instead.
|
|
//
|
|
// Provides information about what transpired in the last method called. For many
|
|
// methods, there is no information. For some methods, details about what
|
|
// transpired can be obtained via LastJsonData. For example, after calling a method
|
|
// to verify a signature, the LastJsonData will return JSON with details about the
|
|
// algorithms used for signature verification.
|
|
//
|
|
// The caller is responsible for deleting the object returned by this method.
|
|
CkJsonObject *LastJsonData(void);
|
|
|
|
|
|
// Loads the PDF file contained in pdfData.
|
|
bool LoadBd(CkBinData &pdfData);
|
|
|
|
|
|
// Load a PDF file into this object in memory.
|
|
bool LoadFile(const char *filePath);
|
|
|
|
|
|
// Sets the HTTP object to be used to communicate with the timestamp authority
|
|
// (TSA) server for cases where long term validation (LTV) of signatures is
|
|
// desired. The http is used to send the requests, and it allows for connection
|
|
// related settings and timeouts to be set. For example, if HTTP or SOCKS proxies
|
|
// are required, these features can be specified on the http.
|
|
//
|
|
// The http is also used to send OCSP requests to store OCSP responses in the PDF's
|
|
// document security store (DSS).
|
|
//
|
|
void SetHttpObj(CkHttp &http);
|
|
|
|
|
|
// Provides an optional JPG image to be included in the signature appearance. The
|
|
// JPG data is passed in jpgData.
|
|
//
|
|
// Note: JPG images must use the BaseLine format and not the Progressive format.
|
|
// (Programs typically save JPEG's using the BaseLine format as default.)
|
|
//
|
|
bool SetSignatureJpeg(CkBinData &jpgData);
|
|
|
|
|
|
// Specifies a certificate to be used when signing the PDF. Signing requires both a
|
|
// certificate and private key. In this case, the private key is implicitly
|
|
// specified if the certificate originated from a PFX that contains the
|
|
// corresponding private key, or if on a Windows-based computer where the
|
|
// certificate and corresponding private key are pre-installed.
|
|
bool SetSigningCert(CkCert &cert);
|
|
|
|
|
|
// Specifies a digital certificate and private key to be used for signing the PDF.
|
|
bool SetSigningCert2(CkCert &cert, CkPrivateKey &privateKey);
|
|
|
|
|
|
// Signs the open PDF and if successful writes the signed PDF to the ARG3. The jsonOptions
|
|
// contains information and instructions about the signature. See the examples
|
|
// below for more detailed information about the JSON options listed here.
|
|
//
|
|
// Summary of PDF Signing Options
|
|
// * appearance.fillUnsignedSignatureField - Can be set to true) to tell
|
|
// Chilkat to sign an existing unsigned signature field. Chilkat will automatically
|
|
// scale the visual appearance (text + graphics) to fit the pre-existing signature
|
|
// field. When fillUnsignedSignatureField is specified, it is not necessary to set
|
|
// appearance.x, appearance.y, appearance.fontScale, etc.
|
|
//
|
|
// Starting in v9.5.0.90, the unsignedSignatureField option (see below) can be
|
|
// used to specify the unsigned signature field to be used. Otherwise, the 1st
|
|
// available unsigned field is used.
|
|
//
|
|
// See PDF Unsigned Signature Fields for more information.
|
|
//
|
|
// * appearance.fontScale - The font scale (in pts) to be used, such as 10.0 .
|
|
// * appearance.height - Optional to specify the exact height of the visible
|
|
// signature rectangle in points, where 72 points equals 1 inch. If the
|
|
// appearance.height is set, then appearance.width should be set to auto (or
|
|
// left unset). Chilkat will compute the font scale to achieve the desired
|
|
// rectangle height, and the resulting width will depend on the text.
|
|
// * appearance.image - Indicates an image will be included in the signature.
|
|
// Set to the keyword custom-jpg to use an image set by calling the
|
|
// SetSignatureJpeg method. Otherwise can be set to one of the following keywords
|
|
// to indicate a built-in SVG graphic. (These are graphics embedded within the
|
|
// Chilkat library itself.)
|
|
// * green-check-grey-circle
|
|
// * green-check-green-circle
|
|
// * application-approved
|
|
// * application-rejected
|
|
// * document-accepted
|
|
// * approved
|
|
// * blue-check-mark
|
|
// * green-check-mark
|
|
// * green-check-grey-circle
|
|
// * red-x-red-circle
|
|
// * rejected
|
|
// * result-failure
|
|
// * result-pass
|
|
// * signature
|
|
// * document-check
|
|
// * document-x
|
|
// * red-x-grey-circle
|
|
// * appearance.imageOpacity - Sets the image opacity. Can be an integer from 1
|
|
// to 100.
|
|
// * appearance.imagePlacement - Sets the image placment within the signature
|
|
// rectangle. Can be left , right , or center . Images placed in the center
|
|
// typically have opacity 50% or less because the text is displayed over the image
|
|
// (i.e. it is a background image). Images placed left or right are not background
|
|
// images. The signature rectangle is divided into two sub-rectangles, one for the
|
|
// image, and one for the text.
|
|
// * appearance.margin_x - If the appearance.x is set to left , then this can
|
|
// optionally be use to specify the position from the left edge. The default margin
|
|
// is 10.0 (10 points, where 72 points equals 1 inch).
|
|
// * appearance.margin_y - If the appearance.y is set to top , then this can
|
|
// optionally be use to specify the position from the top. The default margin for y
|
|
// is 20.0 (20 points, where 72 points equals 1 inch).
|
|
// * appearance.text[i] - The text that should appear in the signature box.
|
|
// Each line is specified in a JSON array item, where i is an integer starting
|
|
// with 0 as the 1st line. The text can contain the following keywords which
|
|
// are replaced with actual values:
|
|
// * cert_country - The signing certificate's subject country (C).
|
|
// * cert_cn - The signing certificate's subject common name (CN).
|
|
// * cert_dn - The signing certificate's DN (distinguished name).
|
|
// * cert_email - The signing certificate's subject email address (E).
|
|
// * cert_issuer_cn - The signing certificate's issuer's common name (CN).
|
|
// * cert_locality - The signing certificate's subject locality (L).
|
|
// * cert_organization - The signing certificate's subject organization
|
|
// (O).
|
|
// * cert_org_id - The signing certificate's organization ID.
|
|
// * cert_ou - The signing certificate's subject organizational unit (OU).
|
|
// * cert_san_rfc822name - The signing certificate's RFC822 subject
|
|
// alternative name.
|
|
// * cert_serial_dec - The signing certificate's serial number in decimal
|
|
// format.
|
|
// * cert_serial_hex - The signing certificate's serial number in hex
|
|
// format.
|
|
// * cert_state - The signing certificate's subject state (S).
|
|
// * cert_thumbprint - The signing certificate's thumbprint (The SHA1 hash
|
|
// of the binary DER representation in hex format).
|
|
// * current_datetime - Current local date/time in the format such as Sep
|
|
// 11 2020 16:30:54 .
|
|
// * current_dt - Current local date/time in PDF date/time string format,
|
|
// such as YYYY.MM.DD hh:mm:ss -05'00'.
|
|
// * current_rfc822_dt_gmt - Current GMT date/time in RFC822 format, such
|
|
// as Mon, 22 Nov 2021 15:58:41 GMT .
|
|
// * current_rfc822_dt_local - Current local date/time in RFC822 format,
|
|
// such as Mon, 22 Nov 2021 09:56:16 -0600 .
|
|
// * current_timestamp_gmt - Current GMT date/time in timestamp format,
|
|
// such as 1990-12-31T23:59:60Z .
|
|
// * current_timestamp_local - Current local date/time in timestamp format,
|
|
// such as 2019-10-12T03:20:50.52-04:00 .
|
|
// * appearance.width - Optional to specify the exact width of the visible
|
|
// signature rectangle in points, where 72 points equals 1 inch. If the
|
|
// appearance.width is set, then appearance.height should be set to auto (or
|
|
// left unset). Chilkat will compute the font scale to achieve the desired
|
|
// rectangle width, and the resulting height will depend on the text and number of
|
|
// lines of text.
|
|
// * appearance.x - The horizontal position on the page of the left edge of the
|
|
// signature box. Can be a keyword such as left , right , or middle to specify
|
|
// a typical placement with default margins. Otherwise can be a floating point
|
|
// number where 0.0 is the leftmost coordinate of a page, and 612.0 is the right
|
|
// most. Can also be the keyword after to place the signature just to the right
|
|
// of the rightmost signature on the page.
|
|
// * appearance.y - The vertical position on the page of the top edge of the
|
|
// signature box. Can be one of the keywords top or bottom to specify a typical
|
|
// placement with default margins. Otherwise can be a floating point number where
|
|
// 0.0 is the bottom coordinate of a page, and 792.0 is the top. Can also be the
|
|
// keyword under to place the signature just under the bottommost signature on
|
|
// the page.
|
|
// * contactInfo - Optional to provide free-form text with contact information
|
|
// about the signer.
|
|
// * docMDP.add - Set this boolean value to true to include the Document MDP
|
|
// Permissions with a certifying signature. When a certifying signature is desired,
|
|
// both lockAfterSigning and docMDP.add should be specified. The default Doc
|
|
// MDP permission level is 2.
|
|
// * docMDP.accessPermissions - Include this if the docMDP.add is specified,
|
|
// and a permission level different from the default value of 2 is desired.
|
|
// Possible values are:
|
|
// * 1: No changes to the document are permitted and any changes invalidate
|
|
// the signature.
|
|
// * 2: Permitted changes include filling in forms, instantiating page
|
|
// templates and signing.
|
|
// * 3: Same as 2, but also allow annotation creation, deletion, and
|
|
// modification.
|
|
// * embedCertChain - Boolean to control whether the certificate chain is
|
|
// included in the signature. The default is to include the certificates in the
|
|
// chain of authentication. Set this to false to only include the signing
|
|
// certificate (this is not common).
|
|
// * hashAlgorithm - If the signing certificate is RSA-based, and the signing
|
|
// scheme (padding scheme) is RSA-PSS, then this specifies the PSS hash algorithm.
|
|
// Can be sha1 , sha256 , sha384 , or sha512 . ( sha256 is what should be
|
|
// commonly chosen.)
|
|
// * includeRootCert - Boolean to control whether the root CA certificate is
|
|
// included in the certificate chain (assuming the certificate chain is included).
|
|
// The default is to include the root CA certificate. Set this to false to exclude
|
|
// the root CA certificate from being included (this is not common).
|
|
// * info.* - (added in Chilkat v9.5.0.90) Provides the ability to add or
|
|
// update the PDF document's /Info , such as Creator , Producer , Title , etc.
|
|
// Any number of arbitrary member names can be specified and these will be added to
|
|
// the document's /Info dictionary. However, Chilkat will ignore ModDate and
|
|
// CreationDate because ModDate is automatically set to the current system
|
|
// date/time and the CreationDate should not change.
|
|
// * invisibleSignature - Set this boolean to true to create an invisible
|
|
// signature with no appearance.
|
|
// * legalAttestation - Set to provide a free-form text legal attestation.
|
|
// * location - Optional to provide free-form text with a description of the
|
|
// geographic location where the PDF was signed.
|
|
// * lockAfterSigning - Set this boolean to true to certify and lock a PDF as
|
|
// opposed to adding an approval signature (the default) which allows for
|
|
// additional countersignatures.
|
|
// * ltvOcsp - Set this boolean to true to create an LTV-enabled signature.
|
|
// * noDss - Set this boolean to true to prevent adding a /DSS (Document
|
|
// Security Store).
|
|
// * page - The page number where the signature will be placed. Page 1 is the
|
|
// 1st page.
|
|
// * reason - Optional to provide text indicating the reason for the signature.
|
|
// * signingAlgorithm - If the signing certificate is RSA-based, then chooses
|
|
// the RSA padding scheme. Possible values are pkcs for PKCS-v1_5 or pss for
|
|
// RSASSA-PSS.
|
|
// * signingCertificateV2 - Set to 1 to include the SigningCertificateV2
|
|
// authenticated attribute. This is desired in most cases.
|
|
// * signingTime - Set to 1 to include the SigningTime authenticated attribute.
|
|
// This is desired in most cases. Note: This is not the same as time-stamping. This
|
|
// is a fundamental authenticated attribute that should be included with or without
|
|
// the addition of time-stamping.
|
|
// * sigTextLabel - Set to provide free-form text for the signatures annotation
|
|
// text label.
|
|
// * subFilter - Set to /ETSI.CAdES.detached , /adbe.pkcs7.detached , or
|
|
// something else.
|
|
// * timestampToken.enabled - Set to true to tell Chilkat to request a
|
|
// timestamp from a TSA server and include the timestamp token in the signature's
|
|
// authentication attributes
|
|
// * timestampToken.tsaUrl - The timestamp server's URL.
|
|
// * timestampToken.tsaUsername, timestampToken.tsaPassword - If the timestamp
|
|
// server requires a login and password.
|
|
// * timestampToken.bearerToken - Use this if the timestamp server requires a
|
|
// bearer token instead of a password. This feature was added in Chilkat
|
|
// v11.2.0 .
|
|
// * timestampToken.requestTsaCert - Set to true to ask the timestamp server to
|
|
// include its certificate in the timestamp token.
|
|
// * unsignedSignatureField - (added in Chilkat v9.5.0.90) Can be set to
|
|
// specify the name of the unsigned signature field that is to be signed.
|
|
//
|
|
//
|
|
// References:
|
|
// 1: https://cknotes.com/pdf-unsigned-signature-fields/
|
|
bool SignPdf(CkJsonObject &jsonOptions, const char *outFilePath);
|
|
|
|
// Signs the open PDF and if successful writes the signed PDF to the ARG3. The jsonOptions
|
|
// contains information and instructions about the signature. See the examples
|
|
// below for more detailed information about the JSON options listed here.
|
|
//
|
|
// Summary of PDF Signing Options
|
|
// * appearance.fillUnsignedSignatureField - Can be set to true) to tell
|
|
// Chilkat to sign an existing unsigned signature field. Chilkat will automatically
|
|
// scale the visual appearance (text + graphics) to fit the pre-existing signature
|
|
// field. When fillUnsignedSignatureField is specified, it is not necessary to set
|
|
// appearance.x, appearance.y, appearance.fontScale, etc.
|
|
//
|
|
// Starting in v9.5.0.90, the unsignedSignatureField option (see below) can be
|
|
// used to specify the unsigned signature field to be used. Otherwise, the 1st
|
|
// available unsigned field is used.
|
|
//
|
|
// See PDF Unsigned Signature Fields for more information.
|
|
//
|
|
// * appearance.fontScale - The font scale (in pts) to be used, such as 10.0 .
|
|
// * appearance.height - Optional to specify the exact height of the visible
|
|
// signature rectangle in points, where 72 points equals 1 inch. If the
|
|
// appearance.height is set, then appearance.width should be set to auto (or
|
|
// left unset). Chilkat will compute the font scale to achieve the desired
|
|
// rectangle height, and the resulting width will depend on the text.
|
|
// * appearance.image - Indicates an image will be included in the signature.
|
|
// Set to the keyword custom-jpg to use an image set by calling the
|
|
// SetSignatureJpeg method. Otherwise can be set to one of the following keywords
|
|
// to indicate a built-in SVG graphic. (These are graphics embedded within the
|
|
// Chilkat library itself.)
|
|
// * green-check-grey-circle
|
|
// * green-check-green-circle
|
|
// * application-approved
|
|
// * application-rejected
|
|
// * document-accepted
|
|
// * approved
|
|
// * blue-check-mark
|
|
// * green-check-mark
|
|
// * green-check-grey-circle
|
|
// * red-x-red-circle
|
|
// * rejected
|
|
// * result-failure
|
|
// * result-pass
|
|
// * signature
|
|
// * document-check
|
|
// * document-x
|
|
// * red-x-grey-circle
|
|
// * appearance.imageOpacity - Sets the image opacity. Can be an integer from 1
|
|
// to 100.
|
|
// * appearance.imagePlacement - Sets the image placment within the signature
|
|
// rectangle. Can be left , right , or center . Images placed in the center
|
|
// typically have opacity 50% or less because the text is displayed over the image
|
|
// (i.e. it is a background image). Images placed left or right are not background
|
|
// images. The signature rectangle is divided into two sub-rectangles, one for the
|
|
// image, and one for the text.
|
|
// * appearance.margin_x - If the appearance.x is set to left , then this can
|
|
// optionally be use to specify the position from the left edge. The default margin
|
|
// is 10.0 (10 points, where 72 points equals 1 inch).
|
|
// * appearance.margin_y - If the appearance.y is set to top , then this can
|
|
// optionally be use to specify the position from the top. The default margin for y
|
|
// is 20.0 (20 points, where 72 points equals 1 inch).
|
|
// * appearance.text[i] - The text that should appear in the signature box.
|
|
// Each line is specified in a JSON array item, where i is an integer starting
|
|
// with 0 as the 1st line. The text can contain the following keywords which
|
|
// are replaced with actual values:
|
|
// * cert_country - The signing certificate's subject country (C).
|
|
// * cert_cn - The signing certificate's subject common name (CN).
|
|
// * cert_dn - The signing certificate's DN (distinguished name).
|
|
// * cert_email - The signing certificate's subject email address (E).
|
|
// * cert_issuer_cn - The signing certificate's issuer's common name (CN).
|
|
// * cert_locality - The signing certificate's subject locality (L).
|
|
// * cert_organization - The signing certificate's subject organization
|
|
// (O).
|
|
// * cert_org_id - The signing certificate's organization ID.
|
|
// * cert_ou - The signing certificate's subject organizational unit (OU).
|
|
// * cert_san_rfc822name - The signing certificate's RFC822 subject
|
|
// alternative name.
|
|
// * cert_serial_dec - The signing certificate's serial number in decimal
|
|
// format.
|
|
// * cert_serial_hex - The signing certificate's serial number in hex
|
|
// format.
|
|
// * cert_state - The signing certificate's subject state (S).
|
|
// * cert_thumbprint - The signing certificate's thumbprint (The SHA1 hash
|
|
// of the binary DER representation in hex format).
|
|
// * current_datetime - Current local date/time in the format such as Sep
|
|
// 11 2020 16:30:54 .
|
|
// * current_dt - Current local date/time in PDF date/time string format,
|
|
// such as YYYY.MM.DD hh:mm:ss -05'00'.
|
|
// * current_rfc822_dt_gmt - Current GMT date/time in RFC822 format, such
|
|
// as Mon, 22 Nov 2021 15:58:41 GMT .
|
|
// * current_rfc822_dt_local - Current local date/time in RFC822 format,
|
|
// such as Mon, 22 Nov 2021 09:56:16 -0600 .
|
|
// * current_timestamp_gmt - Current GMT date/time in timestamp format,
|
|
// such as 1990-12-31T23:59:60Z .
|
|
// * current_timestamp_local - Current local date/time in timestamp format,
|
|
// such as 2019-10-12T03:20:50.52-04:00 .
|
|
// * appearance.width - Optional to specify the exact width of the visible
|
|
// signature rectangle in points, where 72 points equals 1 inch. If the
|
|
// appearance.width is set, then appearance.height should be set to auto (or
|
|
// left unset). Chilkat will compute the font scale to achieve the desired
|
|
// rectangle width, and the resulting height will depend on the text and number of
|
|
// lines of text.
|
|
// * appearance.x - The horizontal position on the page of the left edge of the
|
|
// signature box. Can be a keyword such as left , right , or middle to specify
|
|
// a typical placement with default margins. Otherwise can be a floating point
|
|
// number where 0.0 is the leftmost coordinate of a page, and 612.0 is the right
|
|
// most. Can also be the keyword after to place the signature just to the right
|
|
// of the rightmost signature on the page.
|
|
// * appearance.y - The vertical position on the page of the top edge of the
|
|
// signature box. Can be one of the keywords top or bottom to specify a typical
|
|
// placement with default margins. Otherwise can be a floating point number where
|
|
// 0.0 is the bottom coordinate of a page, and 792.0 is the top. Can also be the
|
|
// keyword under to place the signature just under the bottommost signature on
|
|
// the page.
|
|
// * contactInfo - Optional to provide free-form text with contact information
|
|
// about the signer.
|
|
// * docMDP.add - Set this boolean value to true to include the Document MDP
|
|
// Permissions with a certifying signature. When a certifying signature is desired,
|
|
// both lockAfterSigning and docMDP.add should be specified. The default Doc
|
|
// MDP permission level is 2.
|
|
// * docMDP.accessPermissions - Include this if the docMDP.add is specified,
|
|
// and a permission level different from the default value of 2 is desired.
|
|
// Possible values are:
|
|
// * 1: No changes to the document are permitted and any changes invalidate
|
|
// the signature.
|
|
// * 2: Permitted changes include filling in forms, instantiating page
|
|
// templates and signing.
|
|
// * 3: Same as 2, but also allow annotation creation, deletion, and
|
|
// modification.
|
|
// * embedCertChain - Boolean to control whether the certificate chain is
|
|
// included in the signature. The default is to include the certificates in the
|
|
// chain of authentication. Set this to false to only include the signing
|
|
// certificate (this is not common).
|
|
// * hashAlgorithm - If the signing certificate is RSA-based, and the signing
|
|
// scheme (padding scheme) is RSA-PSS, then this specifies the PSS hash algorithm.
|
|
// Can be sha1 , sha256 , sha384 , or sha512 . ( sha256 is what should be
|
|
// commonly chosen.)
|
|
// * includeRootCert - Boolean to control whether the root CA certificate is
|
|
// included in the certificate chain (assuming the certificate chain is included).
|
|
// The default is to include the root CA certificate. Set this to false to exclude
|
|
// the root CA certificate from being included (this is not common).
|
|
// * info.* - (added in Chilkat v9.5.0.90) Provides the ability to add or
|
|
// update the PDF document's /Info , such as Creator , Producer , Title , etc.
|
|
// Any number of arbitrary member names can be specified and these will be added to
|
|
// the document's /Info dictionary. However, Chilkat will ignore ModDate and
|
|
// CreationDate because ModDate is automatically set to the current system
|
|
// date/time and the CreationDate should not change.
|
|
// * invisibleSignature - Set this boolean to true to create an invisible
|
|
// signature with no appearance.
|
|
// * legalAttestation - Set to provide a free-form text legal attestation.
|
|
// * location - Optional to provide free-form text with a description of the
|
|
// geographic location where the PDF was signed.
|
|
// * lockAfterSigning - Set this boolean to true to certify and lock a PDF as
|
|
// opposed to adding an approval signature (the default) which allows for
|
|
// additional countersignatures.
|
|
// * ltvOcsp - Set this boolean to true to create an LTV-enabled signature.
|
|
// * noDss - Set this boolean to true to prevent adding a /DSS (Document
|
|
// Security Store).
|
|
// * page - The page number where the signature will be placed. Page 1 is the
|
|
// 1st page.
|
|
// * reason - Optional to provide text indicating the reason for the signature.
|
|
// * signingAlgorithm - If the signing certificate is RSA-based, then chooses
|
|
// the RSA padding scheme. Possible values are pkcs for PKCS-v1_5 or pss for
|
|
// RSASSA-PSS.
|
|
// * signingCertificateV2 - Set to 1 to include the SigningCertificateV2
|
|
// authenticated attribute. This is desired in most cases.
|
|
// * signingTime - Set to 1 to include the SigningTime authenticated attribute.
|
|
// This is desired in most cases. Note: This is not the same as time-stamping. This
|
|
// is a fundamental authenticated attribute that should be included with or without
|
|
// the addition of time-stamping.
|
|
// * sigTextLabel - Set to provide free-form text for the signatures annotation
|
|
// text label.
|
|
// * subFilter - Set to /ETSI.CAdES.detached , /adbe.pkcs7.detached , or
|
|
// something else.
|
|
// * timestampToken.enabled - Set to true to tell Chilkat to request a
|
|
// timestamp from a TSA server and include the timestamp token in the signature's
|
|
// authentication attributes
|
|
// * timestampToken.tsaUrl - The timestamp server's URL.
|
|
// * timestampToken.tsaUsername, timestampToken.tsaPassword - If the timestamp
|
|
// server requires a login and password.
|
|
// * timestampToken.bearerToken - Use this if the timestamp server requires a
|
|
// bearer token instead of a password. This feature was added in Chilkat
|
|
// v11.2.0 .
|
|
// * timestampToken.requestTsaCert - Set to true to ask the timestamp server to
|
|
// include its certificate in the timestamp token.
|
|
// * unsignedSignatureField - (added in Chilkat v9.5.0.90) Can be set to
|
|
// specify the name of the unsigned signature field that is to be signed.
|
|
//
|
|
//
|
|
// References:
|
|
// 1: https://cknotes.com/pdf-unsigned-signature-fields/
|
|
CkTask *SignPdfAsync(CkJsonObject &jsonOptions, const char *outFilePath);
|
|
|
|
|
|
// Signs the open PDF and if successful writes the signed PDF to the bd. The jsonOptions
|
|
// contains information and instructions about the signature. See the reference
|
|
// documentation for the SignPdf method for details about jsonOptions.
|
|
bool SignPdfBd(CkJsonObject &jsonOptions, CkBinData &bd);
|
|
|
|
// Signs the open PDF and if successful writes the signed PDF to the bd. The jsonOptions
|
|
// contains information and instructions about the signature. See the reference
|
|
// documentation for the SignPdf method for details about jsonOptions.
|
|
CkTask *SignPdfBdAsync(CkJsonObject &jsonOptions, CkBinData &bd);
|
|
|
|
|
|
// Updates or adds XMP metdata to a PDF. The metadata is passed in sb. If
|
|
// successful, the PDF with updated or inserted metadata is written to outFilePath.
|
|
bool UpdateMetadata(CkStringBuilder &sb, const char *outFilePath);
|
|
|
|
|
|
// Updates or adds XMP metdata to a PDF. The metadata is passed in sb. If
|
|
// successful, the PDF with updated or inserted metadata is written to bd.
|
|
bool UpdateMetadataBd(CkStringBuilder &sb, CkBinData &bd);
|
|
|
|
|
|
// Verifies the Nth signature contained in the PDF, where the 1st signature is
|
|
// indicated by an index of 0. Returns true if the signature valid, otherwise
|
|
// returns false. The sigInfo is an output argument and is populated with
|
|
// information about the validated or unvalidated signature.
|
|
bool VerifySignature(int index, CkJsonObject &sigInfo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// END PUBLIC INTERFACE
|
|
|
|
|
|
};
|
|
#if !defined(__sun__) && !defined(__sun)
|
|
#pragma pack (pop)
|
|
#endif
|
|
|
|
#endif
|