java - 为什么在使用 PDFBox 时出现此错误 "java.io.IOException: Error: Header doesn' t 包含版本信息?

标签 java pdfbox

这是我第一次在这里发帖,如有不当之处,请见谅。我正在尝试编写一个程序,在 pdf 文件夹中找到某些模式,然后使用 PDFBox 将它们打印为列表。目前,它会在一些文件中找到模式匹配,但不是所有文件,即使我检查过并且每个文件中应该有一个。它还会在打印前返回一个错误,提示“java.io.IOException: Error: Header doesn't contain versioninfo”。我想知道这是否是它不返回某些模式匹配的原因?如果是,我该如何解决?整个 try/catch/finally 部分让我有点困惑,所以可能与此有关。 (我删除了一些该问题不需要的代码)

public class PDF
{
    public static void main(String[] args) throws IOException

    {
        String number;
        String name;
        String state;
        String numberR =  "\\d{3}([.-])?\\d{3}\\1?\\d{4}|\\(\\d{3}\\)([.-])?\\d{3}\\2?\\d{4}|\\(\\d{3}\\)\\s\\d{3}([.-])?\\d{4}";
        String stateR = "[,]\\sAL\\s|[,]\\sMT\\s|[,]\\sAK\\s|[,]\\sNE\\s|[,]\\sAZ\\s|[,]\\sNV\\s|[,]\\sAR\\s|[,]\\sNH\\s|[,]\\sCA\\s|[,]\\sNJ\\s|[,]\\sCO\\s|[,]\\sNM\\s|[,]\\sCT\\s|[,]\\sNY\\s|[,]\\sDE\\s|[,]\\sNC\\s|[,]\\sFL\\s|[,]\\sND\\s|[,]\\sGA\\s|[,]\\sOH\\s|[,]\\sHI\\s|[,]\\sOK\\s|[,]\\sID\\s|[,]\\sOR\\s|[,]\\sIL\\s|[,]\\sPA\\s|[,]\\sIN\\s|[,]\\sRI\\s|[,]\\sIA\\s|[,]\\sSC\\s|[,]\\sKS\\s|[,]\\sSD\\s|[,]\\sKY\\s|[,]\\sTN\\s|[,]\\sLA\\s|[,]\\sTX\\s|[,]\\sME\\s|[,]\\sUT\\s|[,]\\sMD\\s|[,]\\sVT\\s|[,]\\sMA\\s|[,]\\sVA\\s|[,]\\sMI\\s|[,]\\sWA\\s|[,]\\sMN\\s|[,]\\sWV\\s|[,]\\sMS\\s|[,]\\sWI\\s|[,]\\sMO\\s|[,]\\sWY\\s|s";
        File folder = new File("/Users/bob/Desktop/");
        File[] listOfFiles = folder.listFiles();
        for (File file : listOfFiles) 
        {
            if (file.isFile())
            {
                name = file.getName();
                state = findInfo(stateR, name);
                number = findInfo(numberR, name);
                System.out.print(name + "       " + number + "     " + state.substring(1));
                System.out.println();
            }
        }
    }

    public static String findInfo(String regex,String name) throws IOException
    {
        File input = new File("/Users/bob/Desktop/" + name);
        PDDocument pd = null;
        try 
        {
            pd = PDDocument.load(input);
            StringBuilder sb = new StringBuilder();
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setStartPage(1);
            sb.append(stripper.getText(pd));
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(sb);

            while (m.find())
            {
                return m.group();
            }

        } 
        catch (Exception e)
        {
            e.printStackTrace();
            return " ";
        }
        finally
        {   
            if (pd != null)
            {
                pd.close();
            }
        }
        return " ";
     }      
}

编辑:也许这与 PDFBox 读取文件的方式有关?我尝试打印出其中一个不起作用的文件并得到了这个:

         !"#    $%&'(! (

) *$

    +   )
,-

."/!01%%23/4$56667 “ $$4$% 8 %85 % $8 - % ,(# 58"89$" ...

最佳答案

我遇到了同样的问题,这是因为您在此处阅读的 pdf 文件不正确

PDDocument.load(input);

当您尝试加载不同的 pdf 文件时,PDFBox 将抛出该错误

关于java - 为什么在使用 PDFBox 时出现此错误 "java.io.IOException: Error: Header doesn' t 包含版本信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31730959/

相关文章:

java - Eclipse 插件代码找不到 "javax.inject.Inject"类,插件 jar 现在不在插件目录中

java - PDF Signing,生成的PDF文档认证无效? (使用外部签名、web-eid、HSM)

javascript - 使用 PDFBox 将计算脚本添加到 pdf 表单字段

pdf - 如何使用pdfbox api根据数字签名的有效性显示不同的图像?

java - 双重运算的错误输出

java - httpclient放置问题

java - PDFBox TextPosition x、y 和宽度、高度相差 2 倍

java - 如何用java实现像pdf这样的网页浏览器渲染?

java - 如何从gson获取嵌套数据?

java - Apache HTTPClient 4.3.3 执行 GET 请求 block 的方法并且从不返回