系统对接了一个接口,遇到了利用iText解析PDFURL,解析下来导致文件已加密,损坏的问题。
这篇文章针对于老项目,不能随意升级JDK,升级包的问题。
iText-2.1.7.jar为例:
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
/**
- Created by BugRoot
*/
public class PDFUtil{
/**
- @param fileNames pdf的url路径
- @param outfile 保存pdf文件的地址
/
public static boolean mergePdfFiles(List fileNames, File outfile) throws Exception {
boolean retValue = false;
com.lowagie.text.Document document = null;
try {
String[] files = new String[fileNames.size()];
for(int i=0;i<fileNames.size();i++){
files[i]= fileNames.get(i);
}
document = new com.lowagie.text.Document(new PdfReader(files[0]).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(outfile));
document.open();
for (int i = 0; i < files.length; i++) {
PdfReader reader = new PdfReader(files[i]);
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
}
retValue = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
document.close();
}
return retValue;
}
/*- 解密
- @param fileNames pdf的url路径
- @param outfile 保存pdf文件的地址
- @return
- @throws Exception
*/
public static boolean mergePdfFilesDecrypt(List fileNames, File outfile) throws Exception {
boolean retValue = false;
com.lowagie.text.Document document = null;
try {
String[] files = new String[fileNames.size()];
for(int i=0;i<fileNames.size();i++){
files[i]= fileNames.get(i);
}
document = new com.lowagie.text.Document(new PdfReader(files[0]).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(outfile));
document.open();
for (int i = 0; i < files.length; i++) {
PdfReader reader = new PdfReader(files[i]);
// PdfReader.unethicalreading = true;//不支持
Field f = PdfReader.class.getDeclaredField(“encrypted”);
f.setAccessible(true);
// f.set(reader, Boolean.TRUE);
f.set(reader, false);
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
}
retValue = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
document.close();
}
return retValue;
}
}
本文介绍如何在Java中使用iText库处理加密的PDF文件,通过示例代码展示了如何合并PDF文件,并提供了解密PDF的解决方案。
1万+

被折叠的 条评论
为什么被折叠?



