java - PDFbox加载大文件

标签 java pdfbox

我正在尝试使用 PDFBox 将 pdf 文件的第一页转换为图像。 当我加载大型 pdf 文件时出现异常。

代码:

    PDDocument doc;
    try {
        InputStream input  = new URL("http://www.jewishfederations.org/local_includes/downloads/39497.pdf").openStream();
        doc = PDDocument.load(input);
        PDPage firstPage = (PDPage) doc.getDocumentCatalog().getAllPages().get(0);
        BufferedImage image =firstPage.convertToImage();
        File outputfile = new File("image2.png");
        ImageIO.write(image, "png", outputfile);
        input.close();
        doc.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

异常(exception):

org.apache.pdfbox.pdfparser.BaseParser parseCOSStream
WARNING: Specified stream length 72435 is wrong. Fall back to reading stream until 'endstream'.
org.apache.pdfbox.exceptions.WrappedIOException: Could not push back 72435 bytes in order to reparse stream. Try increasing push back buffer using system property org.apache.pdfbox.baseParser.pushBackSize
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSStream(BaseParser.java:554)
    at org.apache.pdfbox.pdfparser.PDFParser.parseObject(PDFParser.java:605)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:194)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1219)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1186)
    at Worker.main(Worker.java:27)
Caused by: java.io.IOException: Push back buffer is full
    at java.io.PushbackInputStream.unread(Unknown Source)
    at org.apache.pdfbox.io.PushBackInputStream.unread(PushBackInputStream.java:144)
    at org.apache.pdfbox.io.PushBackInputStream.unread(PushBackInputStream.java:133)
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSStream(BaseParser.java:550)
    ... 5 more

最佳答案

1.8.* PDFBox 版本的替代解决方案是使用非顺序解析器。在那种情况下,代码将不会是

doc = PDDocument.load(input);

但是

doc = PDDocument.loadNonSeq(input, null);

该解析器(将是即将推出的 2.0 版本中唯一的解析器)与回推缓冲区的大小无关。

关于java - PDFbox加载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22946079/

相关文章:

java - 如何创建只有两个订阅者的 JMS 目标?

java - 如何在 opencv for android 中将 ArrayList<Mat> 从 Java 传递到 native 端(NDK)

java - Android - CardView 背景始终为灰色

java - 缓冲图像颜色饱和度

java - 如何使用 PDPageContentStream 底层内容流?

java - 如何通过pdfbox和java向pdf添加多个电子签名

java - 合并文件给出错误 : End-of-File, 预期行

java - 努力使 OnClickListener 为具有自定义 ViewHolder 的 Firebase Recycler UI 工作

java - 为什么 TomEE 无法创建 JMS 连接工厂资源?

java.io.IOException : Stream closed During PDFbox setValue loop 异常