我正在使用PDFBox库创建PDF。并且还使用PDFBox从pdf提取文本和图像。
我正在使用PDFBox 1.8.10.1版。
问题是,当我尝试从受密码保护的PDF中提取文本时,即使密码正确,也会显示以下错误:
java.io.IOException:创建用于解密的安全处理程序时发生错误(NullPointerException)
public class PdfTextExtractor extends AsyncTask<File,String,String>{
private String password;
private OnTextExtractedListener onTextExtractedListener;
public PdfTextExtractor(String password) {
this.password = password;
}
public void addOnTextExtracted(OnTextExtractedListener onTextExtractedListener){
this.onTextExtractedListener=onTextExtractedListener;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(File... files) {
File targetFile=files[0];
PDFTextStripper pdfStripper;
PDDocument pdDoc;
COSDocument cosDoc;
try {
Log.e("password",password);
PDFParser parser = new PDFParser(new RandomAccessFile(targetFile, "r"),password);
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
String parsedText = pdfStripper.getText(pdDoc);
System.out.println(parsedText);
return parsedText;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String extractedText) {
super.onPostExecute(extractedText);
if(onTextExtractedListener!=null)
onTextExtractedListener.onTextExtracted(extractedText);
}
public interface OnTextExtractedListener{
void onTextExtracted(String extractedText);
}
}
异常StackTrace:
05-13 11:00:28.090 19049-20403 / com.veridocofflineverification.android W / System.err:java.io.IOException:创建用于解密的安全处理程序时出错(NullPointerException) 05-13 11:00:28.097 19049-20403 / com.veridocofflineverification.android W / System.err:at com.f.c.g.g.F(PDFParser.java:323) 在com.f.c.g.g.D(PDFParser.java:230) 在com.f.c.g.g.E(PDFParser.java:264) 在com.veridocofflineverification.android.e.a.c.a(PdfTextExtractor.java:46) 在com.veridocofflineverification.android.e.a.c.doInBackground(PdfTextExtractor.java:17) 在android.os.AsyncTask $ 2.call(AsyncTask.java:292) 在java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:818) 原因:java.lang.NullPointerException:尝试获取空数组的长度 05-13 11:00:28.098 19049-20403 / com.veridocofflineverification.android W / System.err:at javax.crypto.Cipher.doFinal(Cipher.java:1340) 在com.f.c.i.c.s.a(StandardSecurityHandler.java:291) 在com.f.c.i.c.s.a(StandardSecurityHandler.java:245) 在com.f.c.g.g.F(PDFParser.java:313) ...还有10个
有人可以帮助我解决此问题吗?
修改
在寻找解决方案时,我找到了链接。在this链接中,他们说出以下解决方案:
因此,加密项为COSNull,在以下情况下与“ null”不同 使用getItem()。所以解决方案是使用getDictionaryObject() 相反,因为它检查COSNull。该方法已经被使用 在PDFBox的其他位置获取/ Encrypt。
但是我不知道该怎么办!请帮助我。