这是我第一次在这里发帖,很抱歉,如果我没有正确地做到这一点。我正在尝试编写一个程序,在pdfs文件夹中找到某些模式,然后使用PDFBox将它们打印为列表。目前,它会在某些文件中找到模式匹配,但不是所有文件都匹配,即使我检查过,每个文件中应该有一个。它还会在打印前返回错误,上面写着“java.io.IOException:Error:Header不包含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 %%4分之23$五万六千六百六十七 “ 4美元%8%85%8美元 - % ,(#58“89 $” ...
答案 0 :(得分:1)
我遇到了同样的问题,原因是您在这里读取了错误的pdf
文件
PDDocument.load(input);
当您尝试加载其他pdf
文件时,PDFBox
会引发该错误
答案 1 :(得分:0)
您正在读取( Desktop )目录中的 ALL 种文件。
如果该目录中恰好有一个非PDF文件,
尝试读取下一个文件时将发生此错误。
即使此(下一个)文件是有效的PDF。
可能的解决方案:
PDDocument.load(input);
input
是任何给定时间的有效PDF文件的名称。答案 2 :(得分:-2)
我遇到了同样的问题。我通过使用带有LOG4J&的PDFBox的maven依赖来解决它。 SLF4J记录。必须将log4j.properties配置为项目中的src。首先确保所有文档都包含.pdf扩展名。