Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在每个pdf文件中具有不同索引的两个字符串之间获取字符串_Java_String - Fatal编程技术网

如何使用Java在每个pdf文件中具有不同索引的两个字符串之间获取字符串

如何使用Java在每个pdf文件中具有不同索引的两个字符串之间获取字符串,java,string,Java,String,我有200多个pdf报告文件,我需要从每个报告中获取VIN和案例编号,然后用VIN+Case.pdf重命名报告 对于VIN#,很容易获取它,因为它始终位于页面的开头,并且VIN的固定长度为17个字符 我对案例编号有一个问题,我无法得到确切的数字,因为“案例编号”的索引根据“案例编号”单元格前面每个单元格中的字数从一个报告到另一个报告的变化 我的问题是:如何告诉java给我两个空格之间的字符串,其中一个位于“Case Number”之后,第二个位于单元格“System Key”之前 我试着用空格来

我有200多个pdf报告文件,我需要从每个报告中获取VIN和案例编号,然后用VIN+Case.pdf重命名报告

对于VIN#,很容易获取它,因为它始终位于页面的开头,并且VIN的固定长度为17个字符

我对案例编号有一个问题,我无法得到确切的数字,因为“案例编号”的索引根据“案例编号”单元格前面每个单元格中的字数从一个报告到另一个报告的变化

我的问题是:如何告诉java给我两个空格之间的字符串,其中一个位于“Case Number”之后,第二个位于单元格“System Key”之前

我试着用空格来分割所有的单词,我陷入了一种逻辑,即如何真正得到那个特定的数字,尽管它的索引号是多少

注意:案例编号始终不同,其长度也不相同

以下是我到目前为止的情况:

    package Read_Pdf_AsA_Text;
    import java.io.File;
    import java.io.IOException;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.text.PDFTextStripper;

    public class GetVinAndCaseNum {

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

    File folder = new File("C:\\Users\\" + System.getProperty("user.name") + "\\Desktop\\Tasks\\test\\");
    File[] listOfFiles = folder.listFiles();
         for (int i = 0; i < listOfFiles.length; i++) {

        if (listOfFiles[i].isFile()) {
                File f = new File("C:\\Users\\" + System.getProperty("user.name") + "\\Desktop\\Tasks\\test\\"+listOfFiles[i].getName()); 

    PDDocument document = PDDocument.load(f);
    PDFTextStripper pdfStripper = new PDFTextStripper(); // Instantiate PDFTextStripper class
    String text = pdfStripper.getText(document); // Retrieving text from PDF document
    System.out.println(text);

if (text.contains("VIN")) {
                int vinIndexIs = text.indexOf("VIN");
                int newVINIndex = vinIndexIs + 3;
                String vinNum = text.substring(newVINIndex, newVINIndex + 19);
                System.err.println("New VIN is ===> " + vinNum);



        }



            int caseNo = 0;
                 if (text != null) {
                        String[] spcase = text.split(" ");
                        System.out.println("spaces ==> " + spcase);
                        boolean foundCaseNumber = false;
                        for (String stringAfterSpace : spcase) {
                            System.out.println("stringAfterSpace ==>  " + stringAfterSpace);

            if(foundCaseNumber) {


          caseNo = Integer.parseInt(stringAfterSpace.trim());
            System.out.println("caseNo ==> " + caseNo);
                    break;
                            }
                            if("Case Number".equals(stringAfterSpace)) {
                                System.out.println("Case Number issss ===> " + stringAfterSpace);
                                foundCaseNumber = true;

                            }
                        }
                        if(caseNo == 0) {
                            System.out.println("Case No. not found.");
                        }
                 } 


                document.close();

                System.out.println("conversion is done");
            }
        }
        }
}
package Read\u Pdf\u AsA\u Text;
导入java.io.File;
导入java.io.IOException;
导入org.apache.pdfbox.pdmodel.PDDocument;
导入org.apache.pdfbox.text.PDFTextStripper;
公共类GetVinAndCaseNum{
公共静态void main(字符串args[])引发IOException{
文件夹=新文件(“C:\\Users\\”+System.getProperty(“user.name”)+“\\Desktop\\Tasks\\test\\”;
File[]listOfFiles=folder.listFiles();
for(int i=0;i”+vinNum);
}
int caseNo=0;
如果(文本!=null){
String[]spcase=text.split(“”);
System.out.println(“空格==>”+spcase);
布尔值foundCaseNumber=false;
for(字符串stringAfterSpace:spcase){
System.out.println(“stringAfterSpace==>”+stringAfterSpace);
if(案例编号){
caseNo=Integer.parseInt(stringAfterSpace.trim());
System.out.println(“caseNo==>”+caseNo);
打破
}
如果(“案例编号”。等于(stringAfterSpace)){
System.out.println(“案例编号issss===>”+stringAfterSpace);
foundCaseNumber=true;
}
}
如果(caseNo==0){
System.out.println(“未找到案例编号”);
}
} 
document.close();
System.out.println(“转换完成”);
}
}
}
}

我找到了如下解决方案: 我用空格分隔文本,然后用casenamber替换casenamber,这样我就可以在单词“Case”和“Number”之间的空格处涂上红色。然后我做了如下逻辑:

            String caseNum = "";
             if (text != null) {
                    String[] spcase = text.replace("Case Number", "CaseNumber").split(" ");
                    boolean foundCaseNum = false;
                    for (String stringAfterSpace : spcase) {

                        if(foundCaseNum) {

                            caseNum = stringAfterSpace.trim();
                            System.err.println("Case Number is ==> " + caseNum);
                            break;
                        }
                        if(stringAfterSpace.contains("CaseNumber")) {
                            foundCaseNum = true;

                        }
                    }
                    if(caseNum.isEmpty()) {
                        System.out.println("Case No. not found.");
                    }
             } 

            document.close();

            System.out.println("conversion is done");
        }
/*
*导入java.util.regex.Pattern;
*导入java.util.regex.Matcher;
*/
String text=pdfStripper.getText(文档);//从PDF文档检索文本
Pattern=Pattern.compile(“案例编号\\s+(\\d+\\s”);//这是正则表达式
Matcher Matcher=pattern.Matcher(文本);
if(matcher.find()){
System.err.println(““案例编号为==>”+matcher.group(1));
}
上述代码中的部分正则表达式:

  • 案例编号
    -文本,即搜索此精确字符串
  • \\s+
    -一个或多个连续空格
  • \\d+
    -一个或多个数字
  • \\s
    -单个空格
  • 因此,上面的代码在从PDF文档提取的文本中搜索字符串
    Case Number
    ,后跟一个或多个空格,后跟一个数字

    如果找到正则表达式,只需通过code
    matcher.find(1)
    提取数字即可

    请参阅此网页:


    如果有什么不清楚的地方,请告诉我,以便我可以澄清,也许你应该使用?@Abra我以前没有使用正则表达式,你知道我如何在这里实现它们吗。谢谢你的回答。也许页面布局可以帮到忙。试着找到周围包含“案例编号”和“系统密钥”的两个框“然后得到坐标。然后找到中间的所有盒子,并采取text@MarcStr欧贝尔:谢谢你的建议。这就是我在两天多的时间里一直在努力实现的目标。如果可能的话,我正在寻求帮助。非常感谢你的回答,我在发布我的答案后看到了。但我肯定会试试你贴的那张。非常感谢。再次感谢你