You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换PDF为TXT并实现去除题号、提取高亮答案功能?

PDF处理方案:移除题号并提取高亮答案

一、提取PDF中的高亮内容

要提取高亮标注内容,不能仅将PDF转成纯文本,需要直接操作PDF的注释结构。推荐使用Apache PDFBox这个Java库,它能直接解析PDF的注释与文本内容。

步骤与代码示例

  1. 添加Maven依赖(Maven项目):
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version> <!-- 使用最新稳定版即可 -->
</dependency>
  1. 编写代码提取高亮内容:
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);

三、完整流程整合

  1. 用PDFBox遍历PDF页面,提取每个题目的文本内容并即时去除题号。
  2. 同步提取页面内所有高亮注释文本,通过位置或顺序关联到对应题目。
  3. 最后将清理后的题目与匹配的高亮答案整理输出即可。

内容的提问来源于stack exchange,提问作者Yusif Zehmeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:05:04