Skip to end of metadata
Go to start of metadata

The Reader Enablement feature in Adobe Acrobat allows a user to set up a PDF document so that another user can open it in Adobe Reader and have rights, in Reader, to edit that PDF document. This process applies the Reader Extension to the PDF document. With a PDF document enabled for use in Adobe Reader, a user can open that PDF in Adobe Reader and add comments, sign the document, and save the document with form fields completed. Adobe Acrobat enables a PDF document by adding a key to the PDF that authorizes the file features for use in Adobe Reader, and this key is treated like an extension from a third party vendor. It is not a part of the PDF Reference for that document.

The Adobe PDF Library cannot be used to Reader enable a PDF document, but you can use another product from Datalogics, PDF Java Toolkit. PDF Java Toolkit provides a Reader Enablement feature, or you can use the Adobe Experience Reader Extension (AERE). AERE is a web-based service provided by Datalogics. It is based on a product called the Adobe LiveCycle, now known as the Adobe Experience Manager, a document management tool. With AERE you can send your PDF form documents to us, and we will apply Reader Enablement to these documents and return them to you. 

The Library also cannot be used to change an existing PDF document so as to alter its existing usage rights. There is no way that PDF Library can update a PDF without breaking the enablement key. The Library can’t find the Reader Extensions for a document, so when the Library applies a full save (Save As) to a PDF document the Reader Extension is not removed.

You can remove the extensions by removing the Reader Extensions signature dictionary at the Cos level and then performing a full save with garbage collection turned on.

//remove Reader Extensions signature dictionary be sure to collect garbage
 /* check for U3D images */
 CosDoc cosDoc = PDDocGetCosDoc (pdDoc);
 CosObj Root   = CosDocGetRoot (cosDoc);
 CosObj Perms  = CosDictGet (Root, ASAtomFromString ("Perms"));
 if (!CosObjEqual  (Perms, CosNewNull())){
       Perms = CosDictGet (Perms, ASAtomFromString ("UR3"));
       if (!CosObjEqual (Perms, CosNewNull())){
             printf("/PERMS /UR3 dictionary found!!!\n");
             // confrim type is sig
             printf("Type is %d\n",CosObjGetType(Perms));
             //DumpUR3Dict (Perms);
             printf("Destroy the Object....\n");
             printf("No /UR3 dictionary found.\n");
     printf("No Perms dictionary. \n");

Be careful if you want to complete an operation that requires a full save (Save As). If the PDF document contains a digital signature the file cannot have a Full Save without invalidating that signature.

For example, if the SigFlags value in the AcroForm dictionary is still set to indicate that the file contains signatures, you also would need to remove the SigFlags value.

  CosObj dAcroForm = CosDictGetKeyString(Root, "AcroForm");
  CosObj dSigFlags = CosDictGetKeyString(dAcroForm, "SigFlags");
  ASInt32 sigFlags = CosIntegerValue(dSigFlags);
  printf("SigFlags: %d\n", sigFlags);
  if ( sigFlags > 0 )
    CosDictRemoveKeyString(dAcroForm, "SigFlags");
    //CosDictPutKeyString(dAcroForm, "SigFlags", CosNewInteger(cosDoc, false, 0));
  • No labels