在Java中使用iText进行密码保护的PDF
时间:2020-01-09 10:35:35 来源:igfitidea点击:
在本文中,我们将介绍如何使用iText库在Java中创建受密码保护的PDF,以及如何使用密码保护已经存在的PDF。
使用iText的受密码保护的PDF
为了创建加密的PDF,需要执行以下步骤。
- 使用WriterProperties类的setStandardEncryption()方法,可以设置文档的加密选项。
- EncryptionConstants类中提供了加密常数。 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
- 为了加密PDF,我们还需要Bouncy Castle Provider。 Bouncy Castle Crypto软件包是密码算法的Java实现。 Maven依赖对于相同的是
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.61</version> </dependency>
使用iText Java程序进行密码保护的PDF
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://theitroad//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()); } } }
如我们所见,打开PDF需要密码。打开PDF后,我们可以检查是否无法复制PDF的内容。
密码保护已经存在的PDF
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://theitroad//result//List.pdf"; public static final String RESULT_PDF = "F://theitroad//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(); } } }