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

能否用PDFBox Java API创建Redaction marks?求示例代码

可以用PDFBox Java API实现该需求

PDFBox完全支持创建符合Adobe Acrobat规范的红action标记(Redaction marks),这类标记本质是PDF标准中的Redaction注释,生成的PDF可以直接在Acrobat Reader中识别并执行后续的红action(内容擦除)操作。

以下是完整的实现示例:

1. 引入PDFBox依赖(Maven)

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version> <!-- 使用最新稳定版本即可 -->
</dependency>

2. Java示例代码

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationRedaction;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;

import java.io.File;
import java.io.IOException;

public class RedactionMarkCreator {
    public static void main(String[] args) {
        String inputPath = "input.pdf"; // 待处理的输入PDF路径
        String outputPath = "output_with_redaction_marks.pdf"; // 生成带标记的PDF路径

        try (PDDocument document = PDDocument.load(new File(inputPath))) {
            PDPage targetPage = document.getPage(0); // 选择要添加标记的页面(这里取第一页)

            // 创建红action注释对象
            PDAnnotationRedaction redaction = new PDAnnotationRedaction();
            
            // 设置红action覆盖的矩形区域:x=100, y=500, 宽200, 高50(PDF坐标原点为页面左下角)
            PDRectangle redactArea = new PDRectangle(100, 500, 200, 50);
            redaction.setRectangle(redactArea);
            
            // 配置红action属性
            redaction.setOverlayText("CONFIDENTIAL"); // 执行红action后显示的覆盖文本
            redaction.setRedactionType("Redact"); // 指定红action类型
            redaction.setDefaultAppearance("/Helv 12 Tf 1 0 0 rg"); // 设置文本字体、颜色(红色)
            
            // 创建注释的外观流(Acrobat需要此才能正确渲染标记)
            PDAppearanceDictionary appearanceDict = new PDAppearanceDictionary();
            PDAppearanceStream appearanceStream = new PDAppearanceStream(document);
            appearanceStream.setBBox(redactArea);
            
            try (PDPageContentStream contentStream = new PDPageContentStream(document, appearanceStream)) {
                // 绘制半透明红色的标记区域
                contentStream.setNonStrokingColor(1, 0, 0, 0.2f);
                contentStream.addRect(redactArea.getLowerLeftX(), redactArea.getLowerLeftY(), 
                                      redactArea.getWidth(), redactArea.getHeight());
                contentStream.fillAndStroke();
            }
            
            appearanceDict.setNormalAppearance(appearanceStream);
            redaction.setAppearance(appearanceDict);
            
            // 将红action注释添加到目标页面
            targetPage.getAnnotations().add(redaction);
            
            // 保存生成的PDF
            document.save(outputPath);
            System.out.println("带红action标记的PDF已生成:" + outputPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

关键说明

  • PDAnnotationRedaction是PDFBox专门用于创建红action注释的类,完全遵循PDF规范,Acrobat可直接识别。
  • 必须配置PDAppearanceStream绘制标记的视觉样式,否则Acrobat可能无法正常显示红action标记。
  • 生成的PDF在Acrobat Reader中打开后,可通过工具>红action>应用红action执行内容擦除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:28