真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PDF加密的實(shí)現(xiàn)方法

本篇內(nèi)容主要講解“PDF加密的實(shí)現(xiàn)方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“PDF加密的實(shí)現(xiàn)方法”吧!

為博羅等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及博羅網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、博羅網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

pdf加密實(shí)現(xiàn)

在工作中碰到需求是給pdf記性權(quán)限加密,區(qū)分打開,編輯、打印的權(quán)限,并且設(shè)置密碼,經(jīng)過調(diào)研有兩種實(shí)現(xiàn)方式,但是這兩種方式均不能很好的兼容市面上大多數(shù)pdf軟件,并且限制了打印功能以后,幾乎很少有軟件能顯式的要求輸入打印密碼,表現(xiàn)均為打印按鈕被置灰,無法打印,只有在輸入ownerPassword(文件所有者權(quán)限)以后,才能夠打印,可以說是很傻了,當(dāng)實(shí)在有這種打印需要輸入密碼界面的需求,請帶著你的刀去和產(chǎn)品重新討論需求

Adobe Acrobat DC

該軟件是市面上比較規(guī)范的pdf工具,該軟件詳細(xì)pdf權(quán)限控制界面如圖所示:

PDF加密的實(shí)現(xiàn)方法

從圖中可以看出:
這款工具有兩個(gè)密碼,分別為,用戶權(quán)限密碼(打開pdf需要)和所有者權(quán)限密碼(編輯等其他所有權(quán)限),經(jīng)測試,所有者權(quán)限密碼可以進(jìn)行查看,例如chrome等其他工具打開時(shí)均有輸入密碼的界面

N多個(gè)權(quán)限
1:允許打印


PDF加密的實(shí)現(xiàn)方法


2:允許更改


PDF加密的實(shí)現(xiàn)方法

以上總共這么多權(quán)限,下面就開始我們的實(shí)現(xiàn)


通過pdfbox實(shí)現(xiàn)

pdfbox加密實(shí)現(xiàn)方式非常簡單,當(dāng)然這個(gè)類的功能不止加密,還有很多實(shí)現(xiàn),具體參考官方demo和api https://pdfbox.apache.org/docs/2.0.13/javadocs/

pom依賴



	org.apache.pdfbox
	pdfbox
	2.0.16



	org.bouncycastle
	bcprov-jdk15on
	1.57

PDFEncryptUtils.java

/**
 * 

對pdf進(jìn)行權(quán)限控制

 * @author Calvin  * @date 2019/07/17  * @since v1.0  */ public class PDFEncryptUtils { /**  * 加密  * @param fileName  文件名  * @param fileAuth 文件權(quán)限  * @throws Exception  */ public static void encrypt(String fileName, FileAuth fileAuth) throws Exception { File file = new File(fileName); PDDocument document = PDDocument.load(file); AccessPermission permissions = new AccessPermission(); //此處簡單進(jìn)行實(shí)現(xiàn),具體還有很多個(gè)權(quán)限,此處只實(shí)現(xiàn)最常用的,打開,編輯,打印 //權(quán)限中默認(rèn)都可以操作 permissions.setCanExtractContent(fileAuth.getOpen() != 1); permissions.setCanModify(fileAuth.getEdit() != 1); permissions.setCanPrint(fileAuth.getPrint() != 1); StandardProtectionPolicy policy = new StandardProtectionPolicy(fileAuth.getOwnerPassword(),         fileAuth.getUserPassword(), permissions); SecurityHandler handler = new StandardSecurityHandler(policy); handler.prepareDocumentForEncryption(document); PDEncryption encryption = new PDEncryption(); encryption.setSecurityHandler(handler); document.setEncryptionDictionary(encryption); //保存原路徑 document.save(file.getPath()); } }

FileAuth.java

/**
 * 

 用戶權(quán)限

 *  * @author Calvin  * @date 2019/07/15  * @since v1.0  */ public class FileAuth { /**  * 是否可以打開  */ private int open; /**  * 是否可以編輯  */ private int edit; /**  * 是否可以打印  */ private int print; /**  * 所有者權(quán)限密碼  */ private String ownerPassword; /**  * 用戶權(quán)限密碼  */ private String userPassword; public int getOpen() {     return open; } public void setOpen(int open) {     this.open = open; } public int getEdit() {     return edit; } public void setEdit(int edit) {     this.edit = edit; } public int getPrint() {     return print; } public void setPrint(int print) {     this.print = print; } public String getOwnerPassword() {     return ownerPassword; } public void setOwnerPassword(String ownerPassword) {     this.ownerPassword = ownerPassword; } public String getUserPassword() {     return userPassword; } public void setUserPassword(String userPassword) {     this.userPassword = userPassword; } }

利用itext-pdf給pdf加密

	com.itextpdf
	itextpdf
	5.5.11
	

PDFEncryptUtils.java

/**
 * 給pdf設(shè)置權(quán)限
 * @param pdfStamper pdf文件
 * @param fileAuth 文件權(quán)限密碼
 * @throws IOException 文件異常
 * @throws DocumentException
 */
public static void encrypt(PdfStamper pdfStamper, FileAuth fileAuth) throws DocumentException, IOException {
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_COPY, true);
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_DEGRADED_PRINTING, true);
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_FILL_IN, true);
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_MODIFY_ANNOTATIONS, true);
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_MODIFY_CONTENTS, true);
        pdfStamper.setEncryption(null, null, PdfWriter.ALLOW_PRINTING, true);
        byte[] userpassword = fileAuth.getUserPassword().getBytes();
        byte[] owenerpassword = fileAuth.getOwnerPassword().getBytes();
           if(fileAuth.getOpen() == 1){
               pdfStamper.setEncryption(userpassword, userpassword, PdfWriter.ALLOW_SCREENREADERS, false);
           }
           if(fileAuth.getEdit() == 1){
               pdfStamper.setEncryption(userpassword, owenerpassword, PdfWriter.ALLOW_PRINTING, false);
               pdfStamper.setEncryption(userpassword, owenerpassword, PdfWriter.ALLOW_DEGRADED_PRINTING,
                       false);
           }
           if(fileAuth.getPrint() == 1){
               pdfStamper.setEncryption(userpassword, owenerpassword, PdfWriter.ALLOW_MODIFY_ANNOTATIONS,
                       false);
               pdfStamper.setEncryption(userpassword, owenerpassword, PdfWriter.ALLOW_MODIFY_CONTENTS, false);
               pdfStamper.setEncryption(userpassword, owenerpassword, PdfWriter.ALLOW_FILL_IN, false);
           }
           pdfStamper.close();
    }

Client調(diào)用

public static void main(String[] args) throws IOException, DocumentException, NoSuchFieldException, IllegalAccessException {
        PdfReader reader = new PdfReader("D:\\4028832b6c4af5e2016c4af694310044.pdf");
        java.lang.reflect.Field f = reader.getClass().getDeclaredField("encrypted");
        f.setAccessible(true);
        f.set(reader, false);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("D:\\test1.pdf"));
        FileAuth fileAuth = new FileAuth();
        fileAuth.setEdit(1);
        fileAuth.setOpen(1);
        fileAuth.setPrint(1);
        fileAuth.setUserPassword("123456");
        fileAuth.setOwnerPassword("654321");
        encrypt(stamper, fileAuth);
    }

缺點(diǎn)

1:這兩種做法并不能兼容市面上所有的軟件,并且由一些pdf密碼破解工具,即可進(jìn)行解密操作,安全的密碼,還是建議使用證書 2:如果限制了打印的權(quán)限,那么除非主動(dòng)去獲取pdf的owner權(quán)限,不然打印的按鈕都是disabled,無法進(jìn)行打印,并且沒有輸入打印密碼的地方

到此,相信大家對“PDF加密的實(shí)現(xiàn)方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站題目:PDF加密的實(shí)現(xiàn)方法
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ipihid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部