如何转换PDF为TXT并实现去除题号、提取高亮答案功能?
PDF处理方案:移除题号并提取高亮答案
一、提取PDF中的高亮内容
要提取高亮标注内容,不能仅将PDF转成纯文本,需要直接操作PDF的注释结构。推荐使用Apache PDFBox这个Java库,它能直接解析PDF的注释与文本内容。
步骤与代码示例
- 添加Maven依赖(Maven项目):
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.32</version> <!-- 使用最新稳定版即可 --> </dependency>
- 编写代码提取高亮内容:
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationHighlight; import org.apache.pdfbox.text.PDFTextStripperByArea; import java.io.File; import java.util.List; public class PdfHighlightExtractor { public static void main(String[] args) throws Exception { try (PDDocument document = PDDocument.load(new File("your-file.pdf"))) { PDFTextStripperByArea stripper = new PDFTextStripperByArea(); stripper.setSortByPosition(true); for (PDPage page : document.getPages()) { List<PDAnnotation> annotations = page.getAnnotations(); for (PDAnnotation annotation : annotations) { // 判断是否为高亮注释 if (annotation instanceof PDAnnotationHighlight) { PDAnnotationHighlight highlight = (PDAnnotationHighlight) annotation; // 获取高亮区域的矩形范围 List<PDRectangle> rects = highlight.getQuadPointsAsRectangles(); for (PDRectangle rect : rects) { stripper.addRegion("highlight", rect); stripper.extractRegions(page); // 输出提取到的高亮文本 String highlightedText = stripper.getTextForRegion("highlight").trim(); System.out.println("高亮答案:" + highlightedText); } } } } } } }
二、移除题目中的题号
提取题目文本后,用正则表达式匹配开头的数字. 格式,直接替换为空即可:
// originalQuestion为从PDF中提取的带题号的题目文本 String originalQuestion = "1. What is a Java?"; // 正则匹配开头的数字+点+空格,替换为空字符串 String cleanedQuestion = originalQuestion.replaceAll("^\\d+\\.\\s+", ""); // 输出结果:What is a Java? System.out.println(cleanedQuestion);
三、完整流程整合
- 用PDFBox遍历PDF页面,提取每个题目的文本内容并即时去除题号。
- 同步提取页面内所有高亮注释文本,通过位置或顺序关联到对应题目。
- 最后将清理后的题目与匹配的高亮答案整理输出即可。
内容的提问来源于stack exchange,提问作者Yusif Zehmeti
相关产品推荐
相关产品推荐

