DEV Community

Cover image for How to Encrypt and Decrypt PDF Files in Flutter
Suresh Mohan for Syncfusion, Inc.

Posted on • Originally published at syncfusion.com on

How to Encrypt and Decrypt PDF Files in Flutter

The Syncfusion Flutter PDF Library now allows users to encrypt and decrypt PDF documents in Flutter applications.

PDF encryption allows users to protect their PDF documents from unauthorized access. These days, data theft has become a real problem. So, we need to secure important files before sending them to recipients to prevent unauthorized access to their content. And then, if a PDF document we receive is encrypted, we have to decrypt it to access its content.

There are two types of passwords that are available to protect PDF files:

  • Document open password: Most PDF documents are encrypted with a user password that is required to open the documents.
  • Permission password: A permission password, also known as an owner password, is used to limit the access permissions to various operations such as printing, editing, and copying content in a PDF document.

With the Syncfusion Flutter PDF Library, you can protect your PDF documents with either of these passwords, or both.

If a PDF is encrypted with both types of passwords, you can use either of the passwords to open it. But to change the restricted features, you need the permission password.

In this blog, I will show you how to encrypt and decrypt PDF files, divided into the following topics:

Encrypt a PDF document

The Syncfusion Flutter PDF Library provides support for basic (RC4) to advanced (AES) encryption standards. The following are the encryption standards supported:

  • RC4 40-bit
  • RC4 128-bit
  • AES 128-bit
  • AES 256-bit
  • AES 256-bit Revision 6

Following are the steps to encrypt a PDF document using Syncfusion Flutter PDF Library.

Step #1: Create a Flutter application

Follow the instructions provided in this Get Started documentation to create a basic project in Flutter.

Step #2: Add Syncfusion Flutter PDF dependency

Include the Syncfusion Flutter PDF package dependency in the pubspec.yaml file in your project.

dependencies:
  syncfusion_flutter_pdf: ^18.4.30-beta
Enter fullscreen mode Exit fullscreen mode

Step #3: Get the packages

Run the following commands to get the required packages.

| $ flutter pub get |

Step #4: Import the package

Import the PDF package into the main.dart file, as shown in the following code example.

import 'package:syncfusion_flutter_pdf/pdf.dart';
Enter fullscreen mode Exit fullscreen mode

Step #5: Encrypt PDF file

  1. Add a Button widget as a child to the container widget.
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          FlatButton(
            child: Text(
              'Encrypt PDF',
              style: TextStyle(color: Colors.white),
            ),
            onPressed: _extractText,
            color: Colors.blue,
          )
        ],
      ),
    ),
  );
}
Enter fullscreen mode Exit fullscreen mode
  1. Include the following code in the button-click event to secure the PDF file.
//Load the existing PDF document.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('credit_card_statement.pdf'));
//Set the document security.
document.security.userPassword = 'Password@123';
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
Enter fullscreen mode Exit fullscreen mode
  1. To access the PDF document, set the input document in the assets section of the pubspec.yaml file, as shown in the following. Here, the documents are placed inside the *assets * folder.
# To add assets to your application, add an assets section, like this:
assets:
  - assets/credit_card_statement.pdf
  - assets/secured.pdf
Enter fullscreen mode Exit fullscreen mode

Include the following code to read the PDF document from the folder where it is saved.

Future<List<int>> _readDocumentData(String name) async {
  final ByteData data = await rootBundle.load('assets/$name');
  return data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
}

Enter fullscreen mode Exit fullscreen mode
  1. Include the following code to launch the secured PDF file.a. Add the following package dependencies in the pubspec.yaml file in your project.
open_file: ^3.0.1
path_provider: ^1.6.5
Enter fullscreen mode Exit fullscreen mode

b. Import the following packages in your main.dart file.

import 'dart:io';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
Enter fullscreen mode Exit fullscreen mode

c. Include the following code to launch the output PDF document.

//Get the external storage directory.
Directory directory = await getExternalStorageDirectory();
//Get the directory path.
String path = directory.path;
//Create an empty file to write the PDF data.
File file = File('$path/secured.pdf');
//Write the PDF data.
await file.writeAsBytes(bytes, flush: true);
//Open the PDF document in mobile.
OpenFile.open('$path/secured.pdf');
Enter fullscreen mode Exit fullscreen mode

By executing the program, you will get output like the following.

Encrypt PDF file

You can also set both the user and owner passwords by using the following code.

//Create document security.
PdfSecurity security = document.security;
//Set the owner password for the document.
security.ownerPassword = 'Owner@123';
//Set the user password for the document.
security.userPassword = 'password@123';
Enter fullscreen mode Exit fullscreen mode

Restrict PDF permissions

You can customize the permissions to allow or restrict certain actions on PDFs, such as:

  • Copying content
  • Printing
  • Editing the document
  • Filling form fields

The following table lists the permission flags supported by Syncfusion Flutter PDF Library.

PDF permission flags

Note: Only access to the included flags will be enabled and all other permissions will be disabled.

There are also permissions that are interrelated, so enabling one will affect another:

  • Enabling copyContent will enable accessibilityCopyContent, as well.
  • Enabling editContent will enable assembleDocument, as well.
  • Enabling editAnnotation will enable fillFields, as well.
  • fullQualityPrint will not work without enabling print.

To restrict PDF permissions, you must set the permission password (owner password) for the PDF document. You can set the owner password by using the ownerPassword property available in the PdfSecurity class.

You can set various permissions for the PDF document using the Permissions property available in the PdfSecurity class.

Include the following code to restrict the PDF document permissions.

//Load the existing PDF document.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('credit_card_statement.pdf'));
//Create document security.
PdfSecurity security = document.security;
//Set the owner password for the document.
security.ownerPassword = 'Owner@123';
//Set various permissions.
security.permissions.addAll(<PdfPermissionsFlags>[
  PdfPermissionsFlags.fullQualityPrint,
  PdfPermissionsFlags.print,
  PdfPermissionsFlags.fillFields,
  PdfPermissionsFlags.copyContent
]);
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
//Open the PDF file.
_launchPdf(bytes);
Enter fullscreen mode Exit fullscreen mode

By executing the program, you will get an output document like the following.

Customize PDF permissions

Decrypt or removing security from PDF

You can remove the security from the PDF document by using Syncfusion Flutter PDF Library, making it available for editing. It requires the password to decrypt the PDF document.

  1. Removing the user password from a PDF document: You can remove the document open password by using the userPassword property available in the PdfSecurity class.
//Load the PDF document with user or permission password.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty.
security.userPassword = '';
Enter fullscreen mode Exit fullscreen mode
  1. Removing the owner password from the PDF document: You can remove the permission password by using the ownerPassword property available in the PdfSecurity class. The following code illustrates this.
//Load the PDF document with permission password (since the user password cannot be used to alter the security permissions).
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty.
security.ownerPassword = '';
Enter fullscreen mode Exit fullscreen mode
  1. Remove both the user and owner passwords from the PDF document: a. Load the PDF document using the owner (permission) password (since the user password cannot be used to alter the security permissions). b. Set the owner and user password properties to empty string. c. Clear the security permissions by using the clear method available in the PdfPermissions class. d. Save the document.
  2. The following code example illustrates this.
//Load the PDF document with permission password.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty string.
security.userPassword = '';
security.ownerPassword = '';
//Clear the security permissions.
security.permissions.clear();
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
//Open the PDF file.
_launchPdf(bytes, 'unsecured.pdf');
Enter fullscreen mode Exit fullscreen mode

By executing this code, you will get an output document like the following screenshot.

Decrypt PDF document

Resource

You can check out the sample from the following GitHub repository on encrypting and decrypting PDF documents.

https://github.com/SyncfusionExamples/encrypt_and_decrypt_PDF_in_flutter

Conclusion

In this blog post, we have learned the steps to encrypt and decrypt PDF documents using the Syncfusion Flutter PDF Library in a Flutter application.

Take a moment to peruse our documentation, where you’ll find other options and features, all with accompanying code examples.

If you have any questions about these features, please let us know in the comments below. You can also contact us through our support forum, Direct-Trac, or feedback portal. We are happy to assist you!

If you liked this article, we think you would also like the following articles about PDF Library:

Top comments (0)