【问题标题】:pdfbox header version info errorpdfbox 标头版本信息错误
【发布时间】:2013-10-01 13:51:21
【问题描述】:

我使用 PDFbox 来解析那个 pdf 文档。它抛出异常,说它找不到标题版本信息。有什么想法吗?

我认为版本是 1.3 我在将每个字节转换为 char 时看到了它。 链接是http://www.selab.isti.cnr.it/ws-mate/example.pdf

这里的方法和输出代码:

 public String PDFtest(String textLink) throws IOException{
        PDFParser parser;
        String parsedText = null;
        PDFTextStripper pdfStripper;
        PDDocument pdDoc;
        COSDocument cosDoc;
        PDDocumentInformation pdDocInfo;


    StringBuilder sd=new StringBuilder();
    URL link;
    try {
        link = new URL(textLink);
        URLConnection urlConn = link.openConnection();
        BufferedInputStream in = null;
        in = new BufferedInputStream(urlConn.getInputStream());
        byte data[] = new byte[1024];
        in.read(data, 0, 1024);

    parser = new PDFParser(in);
    parser.parse();
    cosDoc = parser.getDocument();
    pdfStripper = new PDFTextStripper();
    pdDoc = new PDDocument(cosDoc);
    parsedText = pdfStripper.getText(pdDoc);
    } catch (MalformedURLException ex) {
        Logger.getLogger(HTMLhelper.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (NumberFormatException e){
        System.out.println("hata");
    }

    return parsedText;



}

例外:

Exception in thread "main" java.io.IOException: Error: Header doesn't contain versioninfo
    at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:317)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:173)
    at ParsingMachine.HTMLhelper.PDFtest(HTMLhelper.java:99)
    at ParsingMachine.tester.main(tester.java:18)
Java Result: 1

【问题讨论】:

  • 从链接下载PDF文件并从本地系统读取,它将解决您的问题。

标签: java parsing pdf pdfbox


【解决方案1】:

正在解析的文件夹已过时。看起来是空的,所以它默认为 Thumbs.db。我记得专门跳过了这个,但猜不是文件夹是空的。

更新目录已修复。

(类似于 murphy1310 的场景,但目录为空,即此处没有 PDF 是线索)

【讨论】:

    【解决方案2】:

    就我而言,我正在遍历目录中的文件。
    Windows 在任何目录中都有一个Thumbs.db 文件。
    这干扰了 pdf 文件处理。
    应用过滤器仅选择 PDF 文件 (*.pdf) 有帮助。
    干杯。

    【讨论】:

      【解决方案3】:

      您必须合并一个非 pdf 格式的文件。请仔细检查列表中是否有除 pdf 以外的任何文件。

      【讨论】:

        【解决方案4】:

        您首先将前导千字节的数据读入字节数组:

        in.read(data, 0, 1024);
        

        然后您希望 PDFBox 能够处理剩余的字节

        parser = new PDFParser(in);
        parser.parse();
        

        实际的 PDF 标题很可能包含在您从 PDFBox 解析器中保留的前导字节中。

        因此,只需允许 PDFBox 读取所有数据。

        【讨论】:

        • 我用 in.available 更改了所有 1024 以获取所有数据但再次出现错误。有趣的是,每次运行程序时字节数组的大小都会发生变化
        • 在允许 PDFBox 解析流之前,为什么要从 in 读取任何数据?根本不要!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2012-02-28
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多