Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

PDF Get Encryption and Permissions Information

See more PDF Signatures Examples

Determine if a PDF is encrypted, and the associated user permissions.

Note: Some PDFs are encrypted but not password-protected. In such cases, encryption is used primarily for preventing unauthorized modifications to the document, but it doesn't restrict access. Therefore, you can open and read the document without a password.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Pdf,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  pdf: TPdf;
  ljd: TJsonObject;
  pdfVersion: string;
  Filter: string;
  KeyLength: Integer;
  V: Integer;
  R: Integer;
  P: Integer;
  PrintLowResolution: string;
  PrintHighResolution: string;
  ModifyOther: string;
  ModifyAnnotations: string;
  ModifyForms: string;
  FillInForms: string;
  AssembleDoc: string;
  ExtractAnyPurpose: string;
  ExtractAccessibility: string;
  Method: string;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  pdf := TPdf.Create;

  //  Load a PDF.
  success := pdf.LoadFile('c:/someDir/sample.pdf');
  if (success = False) then
    begin
      WriteLn(pdf.LastErrorText);
      Exit;
    end;

  //  Get information about the PDF that was collected in the call to LoadFile.
  ljd := TJsonObject.Create;
  pdf.GetLastJsonData(ljd);

  ljd.EmitCompact := False;

  WriteLn(ljd.Emit());

  //  Sample output:

  //  {
  //    "pdfVersion": "1.6",
  //    "encrypt": {
  //      "filter": "/Standard",
  //      "keyLength": 128,
  //      "V": 4,
  //      "R": 4,
  //      "P": -1340,
  //      "perm": {
  //        "printLowResolution": "allowed",
  //        "printHighResolution": "allowed",
  //        "modifyOther": "not allowed",
  //        "modifyAnnotations": "allowed",
  //        "modifyForms": "not allowed",
  //        "fillInForms": "allowed",
  //        "assembleDoc": "allowed",
  //        "extractAnyPurpose": "not allowed",
  //        "extractAccessibility": "not allowed"
  //      },
  //      "method": "AESV2"
  //    }
  //  }

  //  Use this online tool to generate parsing code from sample JSON: 
  //  Generate Parsing Code from JSON

  pdfVersion := ljd.StringOf('pdfVersion');
  Filter := ljd.StringOf('encrypt.filter');
  KeyLength := ljd.IntOf('encrypt.keyLength');
  V := ljd.IntOf('encrypt.V');
  R := ljd.IntOf('encrypt.R');
  P := ljd.IntOf('encrypt.P');
  PrintLowResolution := ljd.StringOf('encrypt.perm.printLowResolution');
  PrintHighResolution := ljd.StringOf('encrypt.perm.printHighResolution');
  ModifyOther := ljd.StringOf('encrypt.perm.modifyOther');
  ModifyAnnotations := ljd.StringOf('encrypt.perm.modifyAnnotations');
  ModifyForms := ljd.StringOf('encrypt.perm.modifyForms');
  FillInForms := ljd.StringOf('encrypt.perm.fillInForms');
  AssembleDoc := ljd.StringOf('encrypt.perm.assembleDoc');
  ExtractAnyPurpose := ljd.StringOf('encrypt.perm.extractAnyPurpose');
  ExtractAccessibility := ljd.StringOf('encrypt.perm.extractAccessibility');
  Method := ljd.StringOf('encrypt.method');


  pdf.Free;
  ljd.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.