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

如何使用Java库移除PDF中的“TEST”文本并保存修改后的文件

Java实现PDF移除指定TEST文本方案

依赖引入

使用Apache PDFBox,这是Java生态中最成熟的PDF处理开源库,Maven依赖如下:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version>
</dependency>

实现逻辑

  • 逐页遍历PDF的所有文本元素,提取每个文本的内容、坐标、尺寸信息
  • 匹配内容为TEST的目标文本,记录对应坐标区域
  • 使用白色矩形覆盖目标区域,实现文本擦除效果(相比直接修改内容流,该方式兼容性更高,不会破坏PDF原有排版)

可运行代码示例

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RemoveTestText {
    // 存储匹配到的TEST文本的坐标信息
    static class TextRegion {
        float x;
        float y;
        float width;
        float height;
        public TextRegion(float x, float y, float width, float height) {
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
        }
    }

    public static void main(String[] args) throws IOException {
        // 输入输出文件路径替换为实际路径
        String inputPath = "输入文件路径.pdf";
        String outputPath = "输出文件路径.pdf";
        PDDocument document = PDDocument.load(new File(inputPath));

        for (int pageNum = 0; pageNum < document.getNumberOfPages(); pageNum++) {
            PDPage page = document.getPage(pageNum);
            List<TextRegion> toRemoveRegions = new ArrayList<>();

            // 提取当前页所有TEST文本的坐标
            PDFTextStripper stripper = new PDFTextStripper() {
                @Override
                protected void processTextPosition(TextPosition text) {
                    String content = text.getUnicode().trim();
                    // 匹配内容为TEST的文本,可根据需求增加坐标、字体大小等校验规则,避免误删
                    if ("TEST".equals(content)) {
                        float x = text.getX();
                        float y = text.getY() - text.getHeight(); // 转换为矩形左下角坐标
                        float width = text.getWidth();
                        float height = text.getHeight();
                        toRemoveRegions.add(new TextRegion(x, y, width, height));
                    }
                    super.processTextPosition(text);
                }
            };
            stripper.setStartPage(pageNum + 1);
            stripper.setEndPage(pageNum + 1);
            stripper.getText(document);

            // 用白色矩形覆盖所有匹配到的TEST区域
            if (!toRemoveRegions.isEmpty()) {
                PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
                contentStream.setNonStrokingColor(Color.WHITE);
                for (TextRegion region : toRemoveRegions) {
                    contentStream.addRect(region.x, region.y, region.width, region.height);
                    contentStream.fill();
                }
                contentStream.close();
            }
        }
        document.save(outputPath);
        document.close();
    }
}

注意事项

  • 若TEST是嵌入在PDF图片内的文本,本方案无法直接处理,需先通过OCR识别到目标坐标后再执行覆盖操作
  • 处理加密PDF时,需在PDDocument.load方法中传入正确的文档密码完成解密
  • 可根据实际场景增加匹配规则,比如限定目标文本的坐标范围、字体大小、颜色等,避免误删其他合法含TEST的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:18:03