Замазывание
PDF Oxide поддерживает двухфазный процесс замазывания в соответствии со спецификацией PDF: сначала помечаются области для замазывания с помощью аннотаций замазывания, затем замазывание применяется для отрисовки цветных наложений, скрывающих содержимое. Такой подход даёт возможность проверки перед окончательным скрытием конфиденциальной информации.
Процесс замазывания
Стандартный процесс редактирования состоит из трёх шагов:
- Пометить — добавить аннотации замазывания для определения содержимого к скрытию
- Проверить — проверить помеченные области перед применением (необязательно)
- Применить — отрисовать наложения и удалить аннотации замазывания
- Сохранить — записать замазанный PDF на диск
Шаг 1: Добавление аннотаций замазывания
Используйте API аннотаций PdfPage для добавления аннотаций замазывания, помечающих области для удаления.
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)?;
Шаг 2: Применение замазывания
После размещения аннотаций замазывания примените их для отрисовки цветных наложений поверх помеченных областей. Этот шаг находит все аннотации замазывания, рендерит наложения и удаляет аннотации замазывания.
Применение на одной странице
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")?;
Применение на всех страницах
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")?;
Проверка статуса замазывания
Проверка, помечена ли страница
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));
Отмена ожидающего замазывания
Если вы передумали до сохранения, снимите пометку со страницы для отмены ожидающего замазывания.
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));
Полный процесс замазывания
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: Применить все замазывания
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")?;
Полный справочник API
DocumentEditor Redaction Methods
| Метод | Возвращает | Описание |
|---|---|---|
apply_page_redactions(page) |
Result<()> |
Применить редактирование на одной странице |
apply_all_redactions() |
Result<()> |
Применить замазывание на всех страницах |
is_page_marked_for_redaction(page) |
bool |
Проверить, есть ли ожидающее замазывание |
unmark_page_for_redaction(page) |
() |
Отменить ожидающее замазывание for a page |
Python (PdfDocument) Methods
| Метод | Параметры | Описание |
|---|---|---|
apply_page_redactions(page) |
page: int |
Применить редактирование на одной странице |
apply_all_redactions() |
– | Применить замазывание на всех страницах |
is_page_marked_for_redaction(page) |
page: int |
Проверить статус замазывания |
unmark_page_for_redaction(page) |
page: int |
Отменить ожидающее замазывание |
Важные замечания
- Визуальное наложение: замазывание рисует цветной прямоугольник поверх помеченной области. Данные базового потока содержимого визуально скрыты, но могут присутствовать в файле. Для полного удаления рекомендуется сочетать замазывание с полной перезаписью при сохранении.
- Двухфазный процесс: всегда сначала добавляйте аннотации замазывания, затем вызывайте
apply_page_redactions()илиapply_all_redactions(). Вызов apply без аннотаций замазывания не имеет эффекта. - Необратимо: после сохранения визуальное наложение является постоянным. Всегда работайте с копией оригинального документа.
- Цвет: по умолчанию замазывание использует чёрное наложение. Используйте
RedactAnnotationс параметрами цвета для пользовательских цветов наложения.
Связанные страницы
- Редактирование аннотаций — работа с аннотациями
- Операции со страницами — стирание содержимого (отбеливание) как альтернатива
- Редактирование текста — поиск текста для замазывания
- Шифрование и безопасность — ограничение доступа после замазывания