Java實(shí)現(xiàn)PDF文件的分割與加密功能
由于``某些不可抗力原因,公司不允許使用itext系列的jar包,因此系統(tǒng)中使用的相關(guān)jar得替換成開源的。經(jīng)比較和嘗試考慮使用org.apache.pdfbox來替換,同時(shí)修改系統(tǒng)中原有的方法,發(fā)現(xiàn)比itext系列稍顯簡(jiǎn)潔一點(diǎn),記錄如下:
加密文件
/**
* 加密文件測(cè)試
* @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();
}
}切割文件
/**
* 切割文件測(cè)試
* @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);//帶密碼讀取
//從第一頁(yè)截取到第二頁(yè)
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();
}
}生成封面圖
/**
* 切割文件測(cè)試
* @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)換后越清晰,相對(duì)轉(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倉(cāng)庫(kù)檢索同類型的包,比較一下熱度和使用人數(shù)
step-2 下載對(duì)應(yīng)包的source源代碼,看一下框架整體結(jié)構(gòu),里面都有哪些package和類,不知道類是干什么的,可以看一下類上面的注釋,一般都是比較簡(jiǎn)單的英文
step-3 動(dòng)手寫單元測(cè)試進(jìn)行驗(yàn)證。
到此這篇關(guān)于Java實(shí)現(xiàn)PDF文件的分割與加密功能的文章就介紹到這了,更多相關(guān)Java 文件分割 加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot接入輕量級(jí)分布式日志框架(GrayLog)的操作方法
這篇文章主要介紹了SpringBoot接入輕量級(jí)分布式日志框架(GrayLog)的方法,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實(shí)踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進(jìn)入文章學(xué)習(xí)更詳細(xì)的內(nèi)容吧,需要的朋友可以參考下2022-02-02
Java中 this和super的用法與區(qū)別小結(jié)
在Java的學(xué)習(xí)與開發(fā)者我們經(jīng)常遇到this和super關(guān)鍵字,本文主要介紹了Java中 this和super的用法與區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
java多線程并發(fā)中使用Lockers類將多線程共享資源鎖定
Lockers在多線程編程里面一個(gè)重要的概念是鎖定,如果一個(gè)資源是多個(gè)線程共享的,為了保證數(shù)據(jù)的完整性,在進(jìn)行事務(wù)性操作時(shí)需要將共享資源鎖定,這樣可以保證在做事務(wù)性操作時(shí)只有一個(gè)線程能對(duì)資源進(jìn)行操作,下面看一個(gè)示例2014-01-01
Java中對(duì)象快速?gòu)?fù)制的幾種方式詳解
這篇文章主要介紹了Java中對(duì)象快速?gòu)?fù)制的幾種方式詳解,對(duì)象的克隆是指創(chuàng)建一個(gè)新的對(duì)象,且新的對(duì)象的狀態(tài)與原始對(duì)象的狀態(tài)相同,當(dāng)對(duì)克隆的新對(duì)象進(jìn)行修改時(shí),不會(huì)影響原始對(duì)象的狀態(tài),需要的朋友可以參考下2023-08-08
SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Spring?boot?啟動(dòng)流程及外部化配置方法
平時(shí)我們開發(fā)Spring boot 項(xiàng)目的時(shí)候,一個(gè)SpringBootApplication注解加一個(gè)main方法就可以啟動(dòng)服務(wù)器運(yùn)行起來,那它到底是怎么運(yùn)行起來的呢?這篇文章主要介紹了Spring?boot?啟動(dòng)流程及外部化配置,需要的朋友可以參考下2022-12-12

