能否用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
相关产品推荐
相关产品推荐

