Java實現(xiàn)PDF文件的分割與加密功能
由于``某些不可抗力原因,公司不允許使用itext系列的jar包,因此系統(tǒng)中使用的相關(guān)jar得替換成開源的。經(jīng)比較和嘗試考慮使用org.apache.pdfbox來替換,同時修改系統(tǒng)中原有的方法,發(fā)現(xiàn)比itext系列稍顯簡潔一點,記錄如下:
加密文件
/** * 加密文件測試 * @from fhadmin.cn */ @Test public void encryptTest(){ try { String filePath = "D:\\test\\像李開復(fù)一樣思考人生.pdf"; String password = "1234"; PDDocument document = PDDocument.load(new File(filePath)); StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password,new AccessPermission()); document.protect(spp); String newFilePath = "D:\\test\\像李開復(fù)一樣思考人生2.pdf"; document.save(newFilePath); document.close(); } catch (IOException e) { e.printStackTrace(); } }
切割文件
/** * 切割文件測試 * @from fhadmin.cn */ @Test public void extractTest(){ try { String newFilePath = "D:\\test\\像李開復(fù)一樣思考人生2.pdf"; String password = "1234"; PDDocument document = PDDocument.load(new File(newFilePath), password);//帶密碼讀取 //從第一頁截取到第二頁 PageExtractor pageExtractor = new PageExtractor(document, 1, 2); PDDocument extract = pageExtractor.extract(); extract.save("D:\\test\\像李開復(fù)一樣思考人生free.pdf"); extract.close(); document.close(); } catch (IOException e) { e.printStackTrace(); } }
生成封面圖
/** * 切割文件測試 * @from fhadmin.cn */ @Test public void createCoverPicTest(){ try { String pdfPath = "D:\\test\\像李開復(fù)一樣思考人生.pdf"; File file = new File(pdfPath); //order目錄 String orderPath = file.getParent(); //轉(zhuǎn)換后的img目錄 String bookName = file.getName().substring(0,file.getName().lastIndexOf(".")); String imgPath = orderPath + File.separator +bookName+".png"; log.debug("pdf封面圖生成成功:{}", imgPath); PDDocument pdDocument = PDDocument.load(new File(pdfPath)); PDFRenderer renderer = new PDFRenderer(pdDocument); /* 第二位參數(shù)越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢 */ BufferedImage image = renderer.renderImageWithDPI(0, 150); ImageIO.write(image, "png", new File(imgPath)); } catch (IOException e) { e.printStackTrace(); } }
總結(jié)一下,現(xiàn)在的工具都比較豐富了,不需要自己去造輪子,
step-1 去maven倉庫檢索同類型的包,比較一下熱度和使用人數(shù)
step-2 下載對應(yīng)包的source源代碼,看一下框架整體結(jié)構(gòu),里面都有哪些package和類,不知道類是干什么的,可以看一下類上面的注釋,一般都是比較簡單的英文
step-3 動手寫單元測試進行驗證。
到此這篇關(guān)于Java實現(xiàn)PDF文件的分割與加密功能的文章就介紹到這了,更多相關(guān)Java 文件分割 加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot接入輕量級分布式日志框架(GrayLog)的操作方法
這篇文章主要介紹了SpringBoot接入輕量級分布式日志框架(GrayLog)的方法,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進入文章學(xué)習(xí)更詳細的內(nèi)容吧,需要的朋友可以參考下2022-02-02Java中 this和super的用法與區(qū)別小結(jié)
在Java的學(xué)習(xí)與開發(fā)者我們經(jīng)常遇到this和super關(guān)鍵字,本文主要介紹了Java中 this和super的用法與區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下2023-12-12java多線程并發(fā)中使用Lockers類將多線程共享資源鎖定
Lockers在多線程編程里面一個重要的概念是鎖定,如果一個資源是多個線程共享的,為了保證數(shù)據(jù)的完整性,在進行事務(wù)性操作時需要將共享資源鎖定,這樣可以保證在做事務(wù)性操作時只有一個線程能對資源進行操作,下面看一個示例2014-01-01