创建解密安全处理程序时发生NullPointerException:使用pdfbox从PDF提取文本时发生错误

时间:2019-05-11 13:42:06

标签: android pdfbox

我正在使用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。

但是我不知道该怎么办!请帮助我。

0 个答案:

没有答案