groovy pdfbox 按顺序读取pdf文件pdf文件是多组内容可能在同一页里要提取这些内容每个内容是一个map最终放到list中
以下是使用Groovy和PDFBox按顺序读取PDF文件并提取内容的示例代码:
@Grab(group='org.apache.pdfbox', module='pdfbox', version='2.0.23')
import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.text.PDFTextStripper
import org.apache.pdfbox.text.TextPosition
def extractText(PDPage pdPage, List<Map<String,String>> contentList) {
def stripper = new PDFTextStripper() {
List<Map<String,String>> content = []
Map<String,String> currentMap = [:]
String currentKey = ""
@Override
void processTextPosition(TextPosition text) {
def textValue = text.getUnicode()
if (textValue.trim().length() == 0) {
return
}
if (currentKey != "") {
currentMap[currentKey] = textValue
currentKey = ""
} else {
currentKey = textValue
}
if (currentMap.size() == 2) {
content.add(currentMap)
currentMap = [:]
}
}
@Override
void endPage(PDPage page) {
if (currentMap.size() > 0) {
content.add(currentMap)
currentMap = [:]
}
contentList.addAll(content)
content.clear()
}
}
stripper.setSortByPosition(true)
stripper.setStartPage(pdPage.getLogicalNumber())
stripper.setEndPage(pdPage.getLogicalNumber())
stripper.getText(pdPage)
}
def extractContent(PDDocument pdDoc) {
def contentList = []
pdDoc.pages.each { PDPage pdPage ->
extractText(pdPage, contentList)
}
return contentList
}
def pdDoc = PDDocument.load(new File("test.pdf"))
def contentList = extractContent(pdDoc)
pdDoc.close()
contentList.each { contentMap ->
println "Key 1: ${contentMap['Key 1']}"
println "Key 2: ${contentMap['Key 2']}"
println "---------------------------"
}
在上面的代码中,我们定义了一个名为extractText
的方法,它接受一个PDPage
对象和一个List<Map<String,String>>
作为参数。该方法使用PDFBox的PDFTextStripper
类提取页面文本,并将提取的内容存储在一个List<Map<String,String>>
中。每个Map对象表示一个内容,其中包含两个键值对,分别为“Key 1”和“Key 2”。
我们还定义了一个名为extractContent
的方法,它接受一个PDDocument
对象作为参数,并使用extractText
方法从每个页面中提取内容。该方法返回一个List<Map<String,String>>
,表示提取的所有内容。
最后,我们加载PDF文件并调用extractContent
方法提取内容。提取的内容存储在一个List<Map<String,String>>
中,我们可以对其进行迭代并输出每个内容的键值对

原文地址: http://www.cveoy.top/t/topic/cw92 著作权归作者所有。请勿转载和采集!