Redaction
Redaction
Эта страница охватывает постоянное удаление содержимого со страницы PDF. Aspose.PDF FOSS для TypeScript предлагает два рабочих процесса редактирования: двухфазный процесс «отметить-затем-применить», который вы просматриваете перед фиксацией, и одношаговый немедленный процесс. Оба доступны в Page для отдельной страницы и в Document для всего документа.
Маркировка и применение редактирований
Page.AddRedact() отмечает прямоугольную область с помощью аннотации /Redact — содержимое под ней остаётся нетронутым и по-прежнему можно копировать. Ничего фактически не удаляется, пока не запустится Page.ApplyRedactions(): она разрушительно перезаписывает поток содержимого для каждой отметки /Redact на странице, рисует наложение каждой отметки (его /IC заливка и /OverlayText), удаляет отметки и возвращает количество применённых редактирований. Отметки, добавленные после вызова ApplyRedactions(), остаются неприменёнными.
page.AddRedact({
rect: [220, 550, 460, 566],
fill: [0, 0, 0],
overlayText: '[REDACTED]',
align: 'center',
fontSize: 9,
textColor: [1, 1, 1],
});
const applied = page.ApplyRedactions();
console.log('Redactions applied:', applied);Немедленное редактирование
Page.Redact() и Page.RedactText() объединяют маркировку и применение в один вызов: они действительно удаляют покрытый текст и изображения, удаляют ресурсы, оставшиеся после удаления, и рисуют непрозрачный маркерный блок над каждой областью — без отдельного шага ApplyRedactions() и без необходимости предварительного просмотра. Page.Redact() принимает явный список областей Rect; Page.RedactText() находит и редактирует каждое вхождение поисковой строки или RegExp, так же, как ищут Page.SearchAnnotationText(). Оба принимают объект RedactOptions, контролирующий маркер color, определяющий, нужно ли scrubMetadata, и определяющий, нужно ли keepAnnotations, перекрывающий редактируемую область.
Поскольку они удаляют содержимое сразу без шага проверки, предпочтительно использовать AddRedact() + ApplyRedactions(), когда отметка должна быть проверяема перед фиксацией, и Redact() / RedactText(), когда области или поисковые запросы уже известны как безопасные для удаления.
Редактирование целого документа
Та же пара рабочих процессов существует в Document, охватывающая все страницы сразу: Document.MarkRedactText() помечает каждое вхождение поискового термина на всех страницах, Document.ApplyRedactions() применяет все пометки в документе, а Document.Redact() / Document.RedactText() мгновенно редактируют регионы одной страницы или поисковый термин по всему документу, отражая их Page эквиваленты.
Советы и лучшие практики
- Используйте
AddRedact()+ApplyRedactions(), когда редактирование должно быть проверяемым до его применения; используйтеRedact()/RedactText(), когда регионы уже подтверждены как безопасные для немедленного удаления. - Добавьте каждую метку
AddRedact()для страницы перед вызовомApplyRedactions()— метки, добавленные позже, не включаются в этот вызов и остаются неприменёнными. - Передайте
scrubMetadata: trueвRedactOptions/ApplyRedactionsOptions, когда удаляемый контент может также присутствовать в метаданных документа (/Infoили XMP). RedactText()иMarkRedactText()ищут с теми же правилами сопоставления, что иSearchAnnotationText()/Search, поэтому строка поиска, не сопоставляющаяся там, также не будет редактировать.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Пометка редактирования не имеет эффекта | Page.ApplyRedactions() никогда не вызывался | Сначала вызовите Page.AddRedact() для каждой пометки, затем Page.ApplyRedactions() один раз |
| Содержимое всё ещё восстанавливается после пометки | Пометка использовала AddRedact() (только пометка) без последующего вызова ApplyRedactions() | Вызовите ApplyRedactions(), либо используйте Redact() / RedactText() для однократного удаления |
| Отредактированный текст появляется в извлечённых метаданных документа | scrubMetadata не был установлен | Передайте { scrubMetadata: true } в объекте options |
ApplyRedactions() возвращает 0 | На странице не существовало меток /Redact в момент вызова | Убедитесь, что AddRedact() (или MarkRedactText()) выполнился первым и был направлен на ту же страницу |
FAQ
В чём разница между AddRedact и Redact?
AddRedact() только отмечает область — содержимое остаётся и его можно копировать, пока не выполнится ApplyRedactions(). Redact() удаляет содержимое в том же вызове, без отдельного шага применения.
Могу ли я выполнить redaction, используя поиск текста вместо указания координат?
Да. RedactText() находит и сразу же redacts каждое вхождение строки поиска или RegExp; MarkRedactText() делает то же самое, но только отмечает совпадения, оставляя их для последующего вызова ApplyRedactions().
Работает ли redaction по всему документу или только по одной странице за раз?
Оба варианта. Page.Redact() / Page.ApplyRedactions() и их сопутствующие работают на одной странице; Document.Redact() / Document.ApplyRedactions() и их сопутствующие работают на всех страницах.
Удаляются ли аннотации рядом с redacted областью тоже?
Только если вы их оставите. Передайте keepAnnotations: true в объект options, чтобы сохранить аннотации, перекрывающие редактируемый регион, вместо того чтобы удалять их вместе с ним.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
Page.AddRedact() | Отметьте прямоугольную область с помощью аннотации /Redact, не удаляя содержимое пока |
Page.ApplyRedactions() | Деструктивно удалить каждую отмеченную область на странице и вернуть количество применённых |
Page.Redact() | Немедленно удалить содержимое в указанных областях без отдельного шага применения |
Page.RedactText() | Найдите и немедленно замаскировать каждое вхождение поисковой строки или RegExp |
Page.MarkRedactText() | Найдите и пометьте (не применяя) каждое вхождение строки поиска или RegExp |
Document.ApplyRedactions() | Примените каждую пометку /Redact по всему документу |
Document.Redact() / Document.RedactText() | Немедленно замаскируйте области на одной странице или поисковый термин на всех страницах |
Document.MarkRedactText() | Пометьте каждое вхождение поискового термина на всех страницах |