以下是使用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 '---------------------------'
}

代码中定义了两个方法:extractTextextractContentextractText方法使用PDFTextStripper类提取页面文本,并将每个内容存储在一个Map中,最终将所有Map存储在一个List中。extractContent方法则遍历PDF文档中的所有页面,调用extractText方法提取每个页面的内容,并返回最终的List。

该代码假设每个内容包含两个键值对,分别为'Key 1'和'Key 2'。你可以根据实际情况修改代码,以提取不同的键值对或内容格式。

Groovy PDFBox 按顺序提取PDF文件内容 - 将多个键值对映射到列表

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

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