Java >> Tutoriel Java >  >> Tag >> protected

PDF protégé par mot de passe utilisant iText en Java

Dans cet article, nous verrons comment créer un PDF protégé par mot de passe en Java à l'aide de la bibliothèque iText et comment protéger un PDF déjà existant avec un mot de passe.

PDF protégé par mot de passe utilisant iText

Afin de créer un PDF crypté, les étapes suivantes sont nécessaires.

  1. À l'aide de la méthode setStandardEncryption() de la classe WriterProperties, vous pouvez définir les options de chiffrement du document.
  2. Les constantes de chiffrement sont fournies dans la classe EncryptionConstants. Autorisations et algorithmes de chiffrement fournis dans la classe EncryptionConstants.
    • ALLOW_ASSEMBLY
    • ALLOW_COPY
    • ALLOW_DEGRADED_PRINTING
    • ALLOW_FILL_IN
    • ALLOW_MODIFY_ANNOTATIONS
    • ALLOW_MODIFY_CONTENTS
    • ALLOW_PRINTING
    • ALLOW_SCREENREADERS
    • ENCRYPTION_AES_128
    • ENCRYPTION_AES_256
    • STANDARD_ENCRYPTION_128
    • STANDARD_ENCRYPTION_40
  3. Pour crypter le PDF, vous aurez également besoin du fournisseur Bouncy Castle. Le package Bouncy Castle Crypto est une implémentation Java d'algorithmes cryptographiques. Dépendance Maven pour le même is-
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>1.61</version>
    </dependency>

PDF protégé par mot de passe à l'aide du programme iText Java

import java.io.IOException;
import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

public class ReadPDF {
  public static final String CREATED_PDF = "F://knpcode//result//PP.pdf";
  final static String USER_PASSWORD = "user";
  final static String OWNER_PASSWORD = "owner";
  public static void main(String[] args) {
    try {
      PdfWriter writer = new PdfWriter(CREATED_PDF, new WriterProperties()
                    .setStandardEncryption(USER_PASSWORD.getBytes(), 
                    OWNER_PASSWORD.getBytes(), 
                    EncryptionConstants.ALLOW_PRINTING, 
                    EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA));
      PdfDocument pdf = new PdfDocument(writer);	
      Document document = new Document(pdf); 
      document.add(new Paragraph("Password protected PDF where only content printing is permitted content can't be copied."));
      document.close();		
    }catch (IOException e) {
      System.out.println("Exception occurred " + e.getMessage());
    }
  }
}

Comme vous pouvez le voir, un mot de passe est requis pour ouvrir le PDF. Une fois le PDF ouvert, vous pouvez vérifier que le contenu du PDF ne peut pas être copié.

Mot de passe protégeant un PDF déjà existant

import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;

public class ReadPDF {
  public static final String SOURCE_PDF = "F://knpcode//result//List.pdf";
  public static final String RESULT_PDF = "F://knpcode//result//ListEncrypted.pdf";
  static final String USER_PASSWORD = "user";
  static final String OWNER_PASSWORD = "owner";
  public static void main(String[] args) {
    try {
      // Read existing PDF
      PdfReader reader = new PdfReader(SOURCE_PDF);
      WriterProperties props = new WriterProperties().setStandardEncryption(USER_PASSWORD.getBytes(), 
                          OWNER_PASSWORD.getBytes(), 
                          EncryptionConstants.ALLOW_PRINTING,
                          EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA);
      // Write to PDF along with encryption properties
      PdfWriter writer = new PdfWriter(new FileOutputStream(RESULT_PDF), props);
      PdfDocument pdfDoc = new PdfDocument(reader, writer);
      pdfDoc.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

C'est tout pour le sujet PDF protégé par mot de passe utilisant iText en Java . S'il manque quelque chose ou si vous avez quelque chose à partager sur le sujet, veuillez écrire un commentaire.


Balise Java