【问题标题】:PDFRenderer gives error while opening an encrypted pdfPDFRenderer 在打开加密的 pdf 时出错
【发布时间】:2012-09-28 10:59:45
【问题描述】:

我正在尝试通过 PDFRenderer 库在 java 程序中打开一个加密的 pdf 文件。编译代码时,PDFPassword 类出错。这是我的代码的一部分。

    RandomAccessFile raf = new RandomAccessFile(new File(filename), "r");
    FileChannel fc = raf.getChannel();
    ByteBuffer buf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
    String password = "58e72df9-0";
    try{
    PDFPassword pass = new PDFPassword(password);
    //System.out.println(PDFPassword.nonNullPassword(pass));
    PDFFile pdffile = new PDFFile(buf, pass);

我得到的错误是:

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.sun.pdfview.decrypt.PDFPassword$PDFDocEncodingByteGenerator.createCharsetEncoder(PDFPassword.java:256)
at com.sun.pdfview.decrypt.PDFPassword$CharsetEncoderGenerator.generateBytes(PDFPassword.java:222)
at com.sun.pdfview.decrypt.PDFPassword.generatePossiblePasswordBytes(PDFPassword.java:167)
at com.sun.pdfview.decrypt.PDFPassword.getPasswordBytes(PDFPassword.java:111)
at com.sun.pdfview.decrypt.StandardDecrypter.<init>(StandardDecrypter.java:159)
at com.sun.pdfview.decrypt.PDFDecrypterFactory.createStandardDecrypter(PDFDecrypterFactory.java:316)
at com.sun.pdfview.decrypt.PDFDecrypterFactory.createDecryptor(PDFDecrypterFactory.java:99)
at com.sun.pdfview.PDFFile.readTrailer(PDFFile.java:1051)
at com.sun.pdfview.PDFFile.parseFile(PDFFile.java:1175)
at com.sun.pdfview.PDFFile.<init>(PDFFile.java:126)
at pdfview.pdfView.main(PdfView.java:49)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: -128
at com.sun.pdfview.PDFDocCharsetEncoder.<clinit>(PDFDocCharsetEncoder.java:68)
... 11 more

【问题讨论】:

  • 提供 PdfView.java 第 49 行附近的代码以获取更多详细信息?
  • 上述代码 sn-p 仅在第 49 行附近,第 49 行是给定代码的最后一行。
  • 使用我自己的加密 pdf 文件为我工作。也许这是您拥有的文件?我对我的 pdf 文件使用了 AES 128 位加密。

标签: java pdfrenderer


【解决方案1】:

我不确定您的问题,但也:

如果你使用 this 库,它有 递归调用自身的加密错误。

我遇到了 stackoverflow 的加密问题。我找到了问题并解决了 stackoverflow 问题。 更改 CryptoCipher 类,如 this

也许这能解决你的问题

【讨论】:

  • 只有当密码中包含特殊字符如-/@#$等时才会出现问题。对于普通密码字母数字,它不会崩溃
  • 没有。我没有。我会试试的
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多