DocInfo Object

Document Properties are handled by the DocInfo object that is part of the Document object. All the Document Properties can be set or retrieved using the DocInfo object.

 

DocInfo object attributes:

 

Attribute

Description

Type

Values

Default Value

Author

Document author

String

 

NULL

Creator

Document creator

String

 

Amyuni PDF Creator

Keywords

Document keywords

String

 

NULL

Producer

*ReadOnly

Document producer

String

 

Amyuni PDF Creator 6.5

Subject

Document subject

String

 

NULL

Title

Document title

String

 

NULL

CustomPropertiesList

List of Custom Properties

String Array

 

NULL

 

 

Remarks

The AddAddtribute method allows to create a new custom property for the DocInfo Object using IacAttributeType.String type.

 

To delete an existing custom document info property, we simply set its text value to an empty string "".

 

 

Example

Sub Sample()
 
    ' Constants for Activation codes
    Const strLicenseTo As String = "Amyuni PDF Creator Evaluation"
    Const strActivationCode As String =
              "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC"
 
    ' Initializing PDFCreativeX Object
    Dim pdf As ACPDFCREACTIVEX.PDFCreactiveX = New ACPDFCREACTIVEX.PDFCreactiveX()
 
    ' Set license key
    pdf.SetLicenseKey(strLicenseTo, strActivationCode)
 
    ' Open an existent PDF file
    Dim fileName As String = "c:\temp\PDFdocument.pdf"
    Dim password As String = ""
    pdf.Open(fileName, password)
 
    ' Set CurrentPage
    pdf.CurrentPage = 1
 
    ' Getting DocInfo object
    Dim docInfo = pdf.GetObjectByName("DocInfo")
 
    ' enumerate any current custom properties that might be in the document
    For Each customPropName As String in docInfo.Attribute("CustomPropertiesList")
        if customPropName Is Nothing Then
            Console.WriteLine("{0} = {1}", customPropName, docInfo.Attribute(customPropName))
        End if
    Next
 
    ' get and then change value of an existing document info standard property that is not read-only
    Console.WriteLine("Title = {0}", docInfo.Attribute("Title")) ' show current value
    docInfo.Attribute("Title") = "New Doc Title" ' set new value
    Console.WriteLine("Title = {0}", docInfo.Attribute("Title")) ' show new value
 
    ' Add a new custom document info property CustomPropABC
    docInfo.AddAttribute("CustomPropABC", 14) ' create the new property entry
 
    docInfo.Attribute("CustomPropABC") = "Some text ABC..." ' set the new property text value
    Console.WriteLine("CustomPropABC = {0}", docInfo.Attribute("CustomPropABC")) ' show new value
 
    ' Add a new custom document info property CustomPropDEF
    docInfo.AddAttribute("CustomPropDEF", 14) ' create the new property entry
    docInfo.Attribute("CustomPropDEF") = "Some text DEF..." ' set the new property text value
    Console.WriteLine("CustomPropDEF = {0}", docInfo.Attribute("CustomPropDEF")) ' show new value
 
    ' To delete an existing custom document info property, we simply set its text value to an empty string ""
    docInfo.Attribute("CustomPropABC") = ""
    ' at this point the custom property is still present, we can still change its value to something other than an empty string
    ' but at the time of saving the document, if it has an empty string it will not be written to the PDF file
 
    ' Save PDF
    pdf.Save("c:\temp\CreatePDFDocument_resulting.pdf", ACPDFCREACTIVEX.FileSaveOptionConstants.acFileSaveView)
End Sub
static void Sample()
{
 
    // Constants for Activation codes
    const string strLicenseTo = "Amyuni PDF Creator Evaluation";
    const string strActivationCode = "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC";
 
    // Initializing PDFCreativeX Object
    ACPDFCREACTIVEX.PDFCreactiveX pdf = new ACPDFCREACTIVEX.PDFCreactiveX();
 
    // Set license key
    pdf.SetLicenseKey(strLicenseTo, strActivationCode);
 
    // Open an existent PDF file
    string fileName = @"c:\temp\PDFdocument.pdf";
    string password = "";
    pdf.Open(fileName, password);
 
    // Getting DocInfo object
    ACPDFCREACTIVEX.IacObject docInfo = pdf.GetObjectByName("DocInfo");
 
    // enumerate any current custom properties that might be in the document
    foreach (string customPropName in (object[]) docInfo["CustomPropertiesList"])
    {
        if (customPropName != null)
        {
            Console.WriteLine("{0} = {1}", customPropName, docInfo[customPropName]);
        }
    }
 
    // get and then change value of an existing document info standard property that is not read-only
    Console.WriteLine("Title = {0}", docInfo["Title"]); // show current value
    docInfo["Title"] = "New Doc Title"; // set new value
    Console.WriteLine("Title = {0}", docInfo["Title"]); // show new value
 
    // Add a new custom document info property CustomPropABC
    docInfo.AddAttribute("CustomPropABC",14); // create the new property entry
 
    docInfo["CustomPropABC"] = "Some text ABC..."; // set the new property text value
    Console.WriteLine("CustomPropABC = {0}", docInfo["CustomPropABC"]); // show new value
 
    // Add a new custom document info property CustomPropDEF
    docInfo.AddAttribute("CustomPropDEF", 14); // create the new property entry
    docInfo["CustomPropDEF"] = "Some text DEF..."; // set the new property text value
    Console.WriteLine("CustomPropDEF = {0}", docInfo["CustomPropDEF"]); // show new value
 
    // To delete an existing custom document info property, we simply set its text value to an empty string ""
    docInfo["CustomPropABC"] = "";
    // at this point the custom property is still present, we can still change its value to something other than an empty string
    // but at the time of saving the document, if it has an empty string it will not be written to the PDF file
 
    // Save PDF
    pdf.Save(@"c:\temp\CreatePDFDocument_resulting.pdf", ACPDFCREACTIVEX.FileSaveOptionConstants.acFileSaveView);
 
}
#include <iostream>
#import "c:\users\amyuni\pdfcreactivex.dll" no_namespace
 
using namespace std;
 
int main()
{
// OptimizeDocument level Values
const int NO_OPTIMIZATION = 0;
const int LINE_OPTIMIZATION = 1;
const int PARAGRAPH_OPTIMIZATION = 2;
const int TABLE_OPTIMIZATION = 3;
 
// Constants for Activation codes
bstr_t strLicenseTo = "Amyuni PDF Creator Evaluation";
bstr_t strActivationCode =
    "07EFCDAB010001004282943F2AF19A88F332D9E781E40460727DF8A42847A1BDE06DB61C71E94E2D90424BF8762385335F9D6884E9FC";
 
// Initialize the COM subsystem
CoInitialize(0);
 
// IPDFCreactiveXPtr is a smart pointer type defined in pdfcreactivex.tlh,
// the type library header file generated by the #import instruction above
IPDFCreactiveXPtr pdf;
 
// Create the PDFCreactiveX instance
pdf.CreateInstance(__uuidof(PDFCreactiveX));
 
// set license key
pdf->SetLicenseKey(_bstr_t(strLicenseTo), _bstr_t(strActivationCode));
 
// Open an existent PDF file
_bstr_t fileName = "c:\\temp\\PDFdocument.pdf";
_bstr_t password = "";
pdf->Open(fileName, password);
 
// Using Document Object
IacObjectPtr docInfo = pdf->GetObjectByName("DocInfo");
 
// DocInfo Object
auto customPropertiesList = docInfo->GetAttribute("CustomPropertiesList");
SAFEARRAY* psa = customPropertiesList.parray;
long lowerBound, upperBound;
SafeArrayGetLBound(psa, 1, &lowerBound);
SafeArrayGetUBound(psa, 1, &upperBound);
long cnt_elements = upperBound - lowerBound + 1;
for (long i = 0; i < cnt_elements; i++)
{
    BSTR customPropName;
    SafeArrayGetElement(psa, &i, &customPropName);
    if (customPropName != nullptr)
    {
        cout << _bstr_t(customPropName) << endl;
        cout << _bstr_t(docInfo->GetAttribute(customPropName)) << endl;
    }
}
SafeArrayUnlock(psa);
 
// get and then change value of an existing document info standard property that is not read-only
cout << _bstr_t("Title = ") << _bstr_t(docInfo->GetAttribute("Title")) << endl; // show current value
docInfo->put_Attribute(_bstr_t("Title"), _variant_t("New Doc Title"));
cout << _bstr_t("Title = ") << _bstr_t(docInfo->GetAttribute("Title")) << endl; // show new value
 
 // Add a new custom document info property CustomPropABC
docInfo->AddAttribute("CustomPropABC",14); // create the new property entry
docInfo->put_Attribute(_bstr_t("CustomPropABC"), _variant_t("Some text ABC..."));  // set the new property text value
cout << _bstr_t("CustomPropABC = ") << _bstr_t(docInfo->GetAttribute("CustomPropABC")) << endl; // show new value
 
 // Add a new custom document info property CustomPropDEF
docInfo->AddAttribute("CustomPropDEF",14); // create the new property entry
docInfo->put_Attribute(_bstr_t("CustomPropDEF"), _variant_t("Some text DEF..."));  // set the new property text value
cout << _bstr_t("CustomPropDEF = ") << _bstr_t(docInfo->GetAttribute("CustomPropDEF")) << endl; // show new value
 
  // To delete an existing custom document info property, we simply set its text value to an empty string ""
docInfo->put_Attribute(_bstr_t("CustomPropABC"), _variant_t(""));
// at this point the custom property is still present, we can still change its value to something other than an empty string
// but at the time of saving the document, if it has an empty string it will not be written to the PDF file
 
// Save PDF
pdf->Save("c:\\temp\\CreatePDFDocument_resulting.pdf", acFileSaveView);
 
// destroy Objects
pdf = nullptr;
docInfo = nullptr;
 
return 0;
}