The Encrypt and DocEncrypt methods can be used to password protect a PDF document and restrict users to viewing, modifying or even printing the document. This function requires a call to Document.SetLicenseKey before it can be used. The Encrypt and DocEncrypt methods use 40 bits encryption compatible with Adobe® Acrobat® 5 and higher.
System.Boolean Encrypt(System.String OwnerPassword, System.String UserPassword, System.Int32 Permissions)
int DocEncrypt(EXTDOCHANDLE edhDocument, LPCWSTR szOwnerPassword, LPCWSTR szUserPassword, DWORD dwPermissions)
OwnerPassword, szOwnerPassword
Owner password.
UserPassword, szUserPassword
User password.
Permissions, dwPermissions
Options to restrict users opening the document using the User password.
Permission Type |
Value (Hex) |
Value (Dec)* |
---|---|---|
No permission. |
0xFFFFFFC0 |
-64 |
Enable Printing (high resolution). |
0xFFFFFFC0 | 0x000004 |
-64 + 4 |
Enable document modification, including document assembly and fill-in existing interactive form fields (including signature fields). |
0xFFFFFFC0 | 0x000008 |
-64 + 8 |
Enable copying text and graphics, and support of accessibility to users with disabilities or for other purposes. |
0xFFFFFFC0 | 0x000010 |
-64 + 16 |
Enable adding and changing notes, and fill-in existing interactive form fields (including signature fields). |
0xFFFFFFC0 | 0x000020 |
-64 + 32 |
(*) NOTE: Converting from HEX DWORD, unsigned and 32-bit unit of data
edhDocument
Handle Returned by DocOpen.
The return value is True if the Encrypt method succeed. Otherwise, False If the Encrypt method fails. his method launches an exception if the encryption feature is not available.
The return value is zero if the DocEncrypt method succeed. If the DocEncrypt method fails, a negative value will returned.
In the case of the evaluation version, the passwords are always set to "aaaaaa" (Owner Password) and "bbbbbb" (User Password) and cannot be changed.
To combine multiple options, use hexadecimal 0xFFFFF0C0 or decimal -64 plus the values 4, 8, 16 or 32.
E.g. to enable both printing and adding notes, use hexadecimal 0xFFFFFFC0 | 0x000004 | 0x000020, or decimal -64 + 4 + 32 = -28. To disable all 4 options, use hexadecimal 0xFFFFFFC0 or decimal -64.
Member of CDIntfEx.Document.
Two passwords are associated to an encrypted PDF document. The owner password is for the author of the document, and the user password for the destination or user of the document.
The owner password is optional and allows the author having this password to do any operation he/she wishes on this document, including modifying its security settings.
It can be blank, but the PDF document won' t be fully protected.
The user password is optional and can be one of the following:
User Password Option |
Description |
---|---|
A blank password |
The user is not prompted for a password when opening a document, but is restricted to the operations allowed by the author. |
The same password as the owner |
The user is prompted for a password and the author of the document will not be able to open this document as an owner to change its security settings. |
A password different from the owner |
The user will not be able to open the document unless he/she enters a valid password. When a valid password is entered, the document can be viewed but its usage is `restricted to the operations allowed by the author. |
The password dialog can be forced to appear if the SHIFT key is pressed while pressing the open bottom of the "File Open" dialog. This way, the application user can enter the owner password even if the user password is blank.
Enable changing the document content. When this option is checked, the user is allowed to change the contents of the PDF document.
Enable printing of document. The user cannot print the PDF document to any printer unless this option is checked.
Enable copying text and graphics from the document. When this option is checked, the user can copy parts of the text of graphics from the PDF document.
Enable adding notes or modifying form fields. The main body of the document cannot be changed but the user can add annotation or enter data in the form fields if there are any.
These options are managed by the tool used to view the document and not by the PDF Converter. Once a valid password is entered, it is up to the viewer or editor to make sure that these security settings are respected.
<Flags()>
Public Enum PERMISSIONS As Integer
NO_PERMISSION = &HFFFFFFC0
ENABLE_PRINTING = &H4
ENABLE_DOCUMENT_MODIFICATION = &H8
ENABLE_COPYING_TEXT_GRAPHICS = &H10
ENABLE_ADDING_CHANGING_NOTES = &H20
End Enum
Public Sub Sample()
' Constants for Activation codes
Const strLicenseTo As String = "Amyuni PDF Converter Evaluation"
Const strActivationCode As String = "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA"
' Declare a new cdintfex document if it does not exist in the form.
Dim pdfDoc As New CDIntfEx.Document
' The SetLicenseKey method should be called after creating an object of type
' CDIntfEx.Document to activate the advanced methods that require the object
' activation code to work properly
pdfDoc.SetLicenseKey(strLicenseTo, strActivationCode)
' Open the document
pdfDoc.Open("c:\temp\test.pdf")
' Set Encryption
pdfDoc.Encrypt("owner123", "user123", PERMISSIONS.NO_PERMISSION Or PERMISSIONS.ENABLE_PRINTING)
' Save the document
pdfDoc.Save("c:\temp\Encrypted.pdf")
End Sub
[Flags]
public enum PERMISSIONS
{
NO_PERMISSION = unchecked((int)0xFFFFFFC0),
ENABLE_PRINTING = 0x4,
ENABLE_DOCUMENT_MODIFICATION = 0x8,
ENABLE_COPYING_TEXT_GRAPHICS = 0x10,
ENABLE_ADDING_CHANGING_NOTES = 0x20
}
public void Sample()
{
// Constants for Activation codes
const string strLicenseTo = "Amyuni PDF Converter Evaluation";
const string strActivationCode = "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA";
// Declare a new cdintfex document if it does not exist in the form.
CDIntfEx.Document pdfDoc = new CDIntfEx.Document();
// The SetLicenseKey method should be called after creating an object of type
// CDIntfEx.Document to activate the advanced methods that require the object
// activation code to work properly
pdfDoc.SetLicenseKey(strLicenseTo, strActivationCode);
// Open the document
pdfDoc.Open(@"c:\temp\test.pdf");
// Set Encryption
pdfDoc.Encrypt("owner123", "user123", (int)(PERMISSIONS.NO_PERMISSION | PERMISSIONS.ENABLE_PRINTING));
// Save the document
pdfDoc.Save("c:\temp\Encrypted.pdf");
}
// PDF Converter Cpp.cpp : Defines the entry point for the console application.
//
#include <Windows.h>
#include <string>
#include <iostream>
#include "CdIntf.h"
#pragma comment (lib, "CDIntf.lib")
using namespace std;
enum PERMISSIONS
{
NO_PERMISSION = 0xFFFFFFC0,
ENABLE_PRINTING = 0x4,
ENABLE_DOCUMENT_MODIFICATION = 0x8,
ENABLE_COPYING_TEXT_GRAPHICS = 0x10,
ENABLE_ADDING_CHANGING_NOTES = 0x20
};
int main()
{
// Constants for Activation codes
#define strLicenseTo "Amyuni PDF Converter Evaluation"
#define strActivationCode "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA"
// Declare a new cdintfex document if it does not exist in the form.
EXTDOCHANDLE pdfDoc;
// The SetLicenseKey method should be called after creating an object of type
// CDIntfEx.Document to activate the advanced methods that require the object
// activation code to work properly
SetLicenseKeyA(strLicenseTo, strActivationCode);
// Open the document
LPBYTE passWord = nullptr;
DocOpenA(&pdfDoc, "c:\\temp\\test.pdf", passWord);
// Set Encryption
DocEncryptA(pdfDoc, "owner123", "user123", PERMISSIONS::NO_PERMISSION | PERMISSIONS::ENABLE_PRINTING);
// Save the document
DocSaveA(pdfDoc, "c:\\temp\\Encrypted.pdf");
// Destroy pdfDoc object
DocClose(pdfDoc);
pdfDoc = nullptr;
return 0;
}
package Example;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class Sample {
public enum PERMISSIONS
{
NO_PERMISSION (0xFFFFFFC0),
ENABLE_PRINTING (0x4),
ENABLE_DOCUMENT_MODIFICATION (0x8),
ENABLE_COPYING_TEXT_GRAPHICS (0x10),
ENABLE_ADDING_CHANGING_NOTES (0x20);
public int value;
public PERMISSIONS(int value)
{
this.value = value;
}
public Object value(){
return value;
}
}
public static void main(String[] args)
{
// Constants for Activation codes
String strLicenseTo = "Amyuni PDF Converter Evaluation";
String strActivationCode = "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA";
// Declare a new cdintfex document if it does not exist in the form.
ActiveXComponent pdfDoc = new ActiveXComponent("CDIntfEx.Document.6.5");
// The SetLicenseKey method should be called after creating an object of type
// CDIntfEx.Document to activate the advanced methods that require the object
// activation code to work properly
Dispatch.call(pdfDoc, "SetLicenseKey", strLicenseTo, strActivationCode);
// Open the document
Dispatch.call(pdfDoc, "Open", "c:\\temp\\test.pdf");
// Set Encryption
Dispatch.call(pdfDoc, "Encrypt", "owner123", "user123", PERMISSIONS.NO_PERMISSION.value + PERMISSIONS.ENABLE_PRINTING.value);
// Save the document
Dispatch.call(pdfDoc, "Save", "c:\\temp\\Encrypted.pdf");
// Destroy pdfDoc object
pdfDoc = null;
}
}
$PERMISSIONS = @{
NO_PERMISSION = 0xFFFFFFC0
ENABLE_PRINTING = 0x4
ENABLE_DOCUMENT_MODIFICATION = 0x8
ENABLE_COPYING_TEXT_GRAPHICS = 0x10
ENABLE_ADDING_CHANGING_NOTES = 0x20
}
# Constants for Activation codes
$strLicenseTo = "Amyuni PDF Converter Evaluation"
$strActivationCode = "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA"
#Declare a new cdintfex document if it does not exist in the form.
$pdfDoc = New-Object -ComObject CDIntfEx.Document.6.5
#The SetLicenseKey method should be called after creating an object of type
#CDIntfEx.Document to activate the advanced methods that require the object
#activation code to work properly
[System.__ComObject].InvokeMember('SetLicenseKey', [System.Reflection.BindingFlags]::InvokeMethod,$null,$pdfDoc, @($strLicenseTo, $strActivationCode))
#Open the document
[System.__ComObject].InvokeMember('Open', [System.Reflection.BindingFlags]::InvokeMethod,$null,$pdfDoc,"c:\temp\test.pdf")
#Set Encryption
[System.__ComObject].InvokeMember('Encrypt', [System.Reflection.BindingFlags]::InvokeMethod,$null,$pdfDoc,
@("owner123", "user123", $PERMISSIONS::NO_PERMISSION -bOr $PERMISSIONS::ENABLE_PRINTING))
#Save the document
[System.__ComObject].InvokeMember('Save', [System.Reflection.BindingFlags]::InvokeMethod,$null,$pdfDoc,"c:\temp\Encrypted.pdf")
#Destroy pdfDoc object
$pdfDoc = $null
' Permissions
Const NO_PERMISSION = -64
Const ENABLE_PRINTING = 4
Const ENABLE_DOCUMENT_MODIFICATION = 8
Const ENABLE_COPYING_TEXT_GRAPHICS = 16
Const ENABLE_ADDING_CHANGING_NOTES = 32
' Constants for Activation codes
Const strLicenseTo = "Amyuni PDF Converter Evaluation"
Const strActivationCode = "07EFCDAB0100010025AFF1801CB9441306C5739F7D452154D8833B9CECBA2ADE79E3762A69FFC354528A5F4A5811BE3204A0A439F5BA"
' Declare a new Document object
Dim pdfDoc
Set pdfDoc = CreateObject("CDIntfEx.Document.6.5")
' The SetLicenseKey method should be called after creating an object of type
' CDIntfEx.Document to activate the advanced methods that require the object
' activation code to work properly
pdfDoc.SetLicenseKey strLicenseTo, strActivationCode
' Open the document
pdfDoc.Open "c:\temp\test.pdf"
' Set Encryption
pdfDoc.Encrypt "owner123", "user123", NO_PERMISSION + ENABLE_PRINTING
' Save the document
pdfDoc.Save "c:\temp\Encrypted.pdf"
' Destroy pdfDoc object
Set pdfDoc = Nothing