当前位置: 首页 > 知识库问答 >
问题:

通过PDFBox程序运行多个PDF

柳俊健
2023-03-14

目前,我正在尝试使用Eclipse中的PDFBox通过文本阅读器在一个文件夹中运行多个PDF文件,该阅读器将提取某些术语并将它们输出到一个文本文件中,然后我将转换为excel表单。目前我有一个程序,它可以正确地工作在一个PDF文件:

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

  //Loading an existing document
  File file = new File("ADE_acetylfuranoside_120319_pfister.pdf");
  PDDocument document = PDDocument.load(file);

  //Instantiate PDFTextStripper class
  PDFTextStripper pdfStripper = new PDFTextStripper();

  //Retrieving text from PDF document
  String text = pdfStripper.getText(document);

//...“提取文本的实际代码”...

  PrintStream o = new PrintStream(new File("output.txt"));
  PrintStream console = System.out; 
  System.setOut(o); 
  System.out.println(finalSheet);

我的问题是,我想在eclipse上通过这个程序在一个文件夹中运行500个PDF,而不是单独地将每个PDF的名称放入其中。我还想让它输出像:

Name1,Number1,ID1 Name2,Number2,ID2

但我认为它现在的编写方式,如果我运行多个PDF,它将只是覆盖第1行。

谢谢你的帮助!

共有1个答案

苍宝
2023-03-14

对于第一部分,您可以只使用FileFilter类和FileFilter:

// directoryName could be as simple a "."
File folder = new File(directoryName);
File[] listOfFiles = folder.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.getName().toLowerCase().endsWith(".pdf");
    }
});

这将为您提供特定文件夹/目录中所有文件的file对象数组。现在您可以使用您所拥有的大部分代码来循环它。

在输出端,您可能希望将输出与输入相关联。我对您的代码有点困惑,我猜您只是想为每个输入文件提供一个输出文件。所以,也许,类似于:

// index is the value you used to loop through the `listOfFiles` array
try( FileWriter fileWriter = new FileWriter(listOfFiles[index].getName() + ".output.txt" ) ) {
    fileWriter.write( // the String text you want in the file );
}

这将创建一个名为“ade_acetylfuranoside_120319_pfister.pdf.output.txt”的文件(取自您的示例)。显然这可能会改变。在这种情况下,将为每个输入文件创建一个新文件。

 类似资料:
  • 问题内容: 我试图打开从一个Linux盒到另一个Linux盒的SSH管道,运行一些shell命令,然后关闭SSH。 我无法控制任何一个盒子上的包装,所以像织物或paramiko之类的东西就不成问题了。 我很幸运使用下面的代码来运行一个bash命令,在本例中为“正常运行时间”,但不确定如何再发出一个命令。我期望的是: 我缺少子流程模块的哪一部分? 谢谢 问题答案: 基本上,如果您调用子进程,它将创建

  • 我想创建一个函数“palindromes()”来检查一个值是否是回文(向前和向后拼写相同)。为了做到这一点,我创建了4个函数,这些函数: 使所有字母变小 删除所有非字母字符 反转接下来的数组,最后... 检查该数组是否是回文。 参见以下功能: 我如何确保函数“palindromes()”取一个值,并在所有这些函数中运行它,最终给出该值是否为回文的答案(真或假)? 问候你,贝尼

  • 我正在尝试为基于代理的模型(Repast)启动GUI,以便能够多次运行该模型。我将基于GUI中不同运行的不同分布生成输入参数。通常我们应该在不同的运行中使用批处理文件。然而,出于这个原因,我想使用GUI,因为我的GUI可以处理一次运行,但不能处理多次运行。你能帮我说说你在这方面的想法吗?

  • 当我通过命令行运行spring boot应用程序时,我面临的问题是 这很好,但在intellij中作为应用程序运行时,我发现以下错误- 可能的原因是什么,我应该在哪里查看配置修复? 关于这个模式还有其他问题,但没有一个提到这个错误- SpringBoot应用程序通过Maven运行良好,但不能通过IDEIntellijIDEA运行 ApplicationContextException:由于缺少Se

  • 我使用TestNG是为了使用Appium并行运行自动移动测试。 我在一个类中有一个初始化AppiumDriver对象的方法。 我从我的TestNG类中调用这个方法,以便每个线程创建它自己的驱动程序实例。问题是,因为它是一个静态变量,当每个线程试图通过静态方法从另一个类访问驱动程序时: 始终存在冲突,因为每个线程只能访问AppiumDriver对象的单个实现。 我知道我可以绕过这一点,把所有这些代码

  • 问题内容: 我有一个脚本,它会根据几个因素生成一个SQL插入或更新脚本。以下是其生成的脚本的字符串值: 如果我在连接到数据库的sql编辑器中运行该脚本,它将运行得很好,并插入所有预期的行。但是,当这样调用该查询时: 返回此: 我将查询的生成方式从创建多个查询的串联字符串更改为创建查询数组并一次运行一个查询数组-这似乎已解决了该问题。 问题答案: 您不能通过单个php mysqli_query函数运