Redacción
PDF Oxide soporta un flujo de trabajo de redacción en dos fases siguiendo la especificación PDF: primero, marcar regiones para redacción usando anotaciones de redacción, luego aplicar las redacciones para dibujar capas de color que ocultan el contenido. Este enfoque le da un paso de revisión antes de ocultar permanentemente la información sensible.
Flujo de trabajo de redacción
El proceso estándar de redacción tiene tres pasos:
- Marcar – Agregar anotaciones de redacción para identificar contenido a ocultar
- Revisar – Inspeccionar regiones marcadas antes de aplicar (opcional)
- Aplicar – Dibujar capas superpuestas y eliminar anotaciones de redacción
- Guardar – Escribir el PDF redactado en disco
Paso 1: agregar anotaciones de redacción
Use la API de anotaciones de PdfPage para agregar anotaciones de redacción que marquen regiones para eliminar.
Python
from pdf_oxide import PdfDocument
doc = PdfDocument("confidential.pdf")
page = doc.page(0)
# Find sensitive text and mark it for redaction
for t in page.find_text_containing("SSN"):
bbox = t.bbox # (x, y, width, height)
page.add_highlight(bbox[0], bbox[1], bbox[2], bbox[3], (0.0, 0.0, 0.0))
doc.save_page(page)
Rust
use pdf_oxide::api::Pdf;
use pdf_oxide::writer::RedactAnnotation;
use pdf_oxide::geometry::Rect;
let mut doc = Pdf::open("confidential.pdf")?;
let mut page = doc.page(0)?;
// Mark a specific region for redaction
let redact = RedactAnnotation::new(
Rect::new(100.0, 700.0, 200.0, 14.0)
);
page.add_annotation(redact);
// Mark all text containing "SSN" for redaction
let sensitive = page.find_text_containing("SSN");
for t in &sensitive {
let redact = RedactAnnotation::new(t.bbox());
page.add_annotation(redact);
}
doc.save_page(page)?;
Paso 2: aplicar redacciones
Una vez que las anotaciones de redacción estén en su lugar, aplíquelas para dibujar capas de color sobre las regiones marcadas. Este paso encuentra todas las anotaciones de redacción, renderiza las capas superpuestas y elimina las anotaciones de redacción.
Aplicar en una sola página
doc = PdfDocument("marked.pdf")
doc.apply_page_redactions(0)
doc.save("redacted.pdf")
import { WasmPdfDocument } from "pdf-oxide-wasm";
const doc = new WasmPdfDocument(bytes);
doc.applyPageRedactions(0);
const output = doc.save();
doc.free();
use pdf_oxide::editor::DocumentEditor;
let mut editor = DocumentEditor::open("marked.pdf")?;
editor.apply_page_redactions(0)?;
editor.save("redacted.pdf")?;
Aplicar en todas las páginas
doc = PdfDocument("marked.pdf")
doc.apply_all_redactions()
doc.save("redacted.pdf")
import { WasmPdfDocument } from "pdf-oxide-wasm";
const doc = new WasmPdfDocument(bytes);
doc.applyAllRedactions();
const output = doc.save();
doc.free();
let mut editor = DocumentEditor::open("marked.pdf")?;
editor.apply_all_redactions()?;
editor.save("redacted.pdf")?;
Verificar estado de redacción
Verificar si una página está marcada
doc = PdfDocument("input.pdf")
doc.apply_page_redactions(0)
print(doc.is_page_marked_for_redaction(0)) # True (before save)
let mut editor = DocumentEditor::open("input.pdf")?;
editor.apply_page_redactions(0)?;
assert!(editor.is_page_marked_for_redaction(0));
Cancelar redacciones pendientes
Si cambia de opinión antes de guardar, desmarque una página para cancelar la redacción pendiente.
doc.unmark_page_for_redaction(0)
print(doc.is_page_marked_for_redaction(0)) # False
editor.unmark_page_for_redaction(0);
assert!(!editor.is_page_marked_for_redaction(0));
Flujo de trabajo de redacción completo
Python
from pdf_oxide import PdfDocument
doc = PdfDocument("sensitive-report.pdf")
# Step 1: Add redaction annotations via the DOM
for i in range(doc.page_count()):
page = doc.page(i)
# Mark SSN patterns
for t in page.find_text_containing("SSN"):
bbox = t.bbox
page.add_highlight(bbox[0], bbox[1], bbox[2], bbox[3], (0.0, 0.0, 0.0))
# Mark email addresses
for t in page.find_text_containing("@"):
bbox = t.bbox
page.add_highlight(bbox[0], bbox[1], bbox[2], bbox[3], (0.0, 0.0, 0.0))
doc.save_page(page)
# Step 2: Apply all redactions
doc.apply_all_redactions()
# Step 3: Save the redacted document
doc.save("report-redacted.pdf")
Rust
use pdf_oxide::api::Pdf;
use pdf_oxide::writer::RedactAnnotation;
let mut doc = Pdf::open("sensitive-report.pdf")?;
let count = doc.page_count()?;
// Step 1: Mark regions for redaction
for i in 0..count {
let mut page = doc.page(i)?;
// Find and mark sensitive text
let ssn_matches = page.find_text_containing("SSN");
for t in &ssn_matches {
let redact = RedactAnnotation::new(t.bbox());
page.add_annotation(redact);
}
let email_matches = page.find_text_containing("@");
for t in &email_matches {
let redact = RedactAnnotation::new(t.bbox());
page.add_annotation(redact);
}
doc.save_page(page)?;
}
// Step 2: Apply redactions
let editor = doc.editor().unwrap();
editor.apply_all_redactions()?;
// Step 3: Save
doc.save("report-redacted.pdf")?;
Referencia completa de la API
Métodos de redacción de DocumentEditor
| Método | Retorna | Descripción |
|---|---|---|
apply_page_redactions(page) |
Result<()> |
Aplicar redacciones en una sola página |
apply_all_redactions() |
Result<()> |
Aplicar redacciones en todas las páginas |
is_page_marked_for_redaction(page) |
bool |
Verificar si la página tiene redacciones pendientes |
unmark_page_for_redaction(page) |
() |
Cancelar redacciones pendientes de una página |
Métodos Python (PdfDocument)
| Method | Parameters | Descripción |
|---|---|---|
apply_page_redactions(page) |
page: int |
Aplicar redacciones en una sola página |
apply_all_redactions() |
– | Aplicar redacciones en todas las páginas |
is_page_marked_for_redaction(page) |
page: int |
Check redaction status |
unmark_page_for_redaction(page) |
page: int |
Cancel pending redactions |
Notas importantes
- Capa visual: La redacción dibuja un rectángulo de color sobre el área marcada. Los datos del content stream subyacente están visualmente ocultos pero pueden seguir presentes en el archivo. Para eliminación completa, considere combinar la redacción con un guardado de reescritura completa.
- Proceso de dos fases: Siempre agregue anotaciones de redacción primero, luego llame a
apply_page_redactions()oapply_all_redactions(). Llamar a apply sin anotaciones de redacción no tiene efecto. - Irreversible: Una vez guardado, la capa visual es permanente. Siempre trabaje en una copia del documento original.
- Color: Por defecto, las redacciones usan una capa negra. Use
RedactAnnotationcon opciones de color para colores de capa personalizados.
Páginas relacionadas
- Annotation Editing – trabajar con anotaciones
- Page Operations – borrado de contenido (blanqueo) como alternativa
- Text Editing – buscar texto para redactar
- Encryption & Security – restringir acceso después de la redacción