以下是使用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>>中,我们可以对其进行迭代并输出每个内容的键值对

groovy pdfbox 按顺序读取pdf文件pdf文件是多组内容可能在同一页里要提取这些内容每个内容是一个map最终放到list中

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

免费AI点我,无需注册和登录