Как скрыть содержимое PDF в TypeScript
Это руководство показывает, как замаскировать содержимое PDF с помощью Aspose.PDF FOSS для TypeScript. Page.AddRedact() отмечает область; Page.ApplyRedactions() разрушительно переписывает поток содержимого, так что глифы под каждой отмеченной областью исчезают. Оставленные без применения отметки остаются обычными аннотациями, которые можно копировать и выделять. Требуется Node.js 22 или новее.
Пошаговое руководство
Шаг 1: Установите пакет
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildПроверьте установку, импортировав класс Document в новый файл TypeScript — эта строка должна успешно разрешаться без ошибок после установки пакета:
import { Document } from '@asposefoss/pdf';Шаг 2: Импортировать необходимые классы
Импортируйте Document, чтобы открыть файл; AddRedact() и ApplyRedactions() вызываются непосредственно у экземпляров Page, которые он возвращает:
import { Document } from '@asposefoss/pdf';Шаг 3: Пометить область для цензурирования
Page.AddRedact(opts) рисует RedactAnnotation поверх rect. fill задаёт цвет, которым будет закрашена область после применения, а overlayText (с align, fontSize, textColor) выводит заменяющую метку, например [REDACTED]:
const doc = Document.OpenFile('memo.pdf');
const page = doc.Pages[0];
page.AddRedact({
rect: [216, 548, 460, 566],
fill: [0, 0, 0],
overlayText: '[REDACTED]',
align: 'center',
fontSize: 9,
textColor: [1, 1, 1],
});Шаг 4: Применить цензурирование
Page.ApplyRedactions() разрушительно переписывает поток содержимого — глифы внутри каждого RedactAnnotation, отмеченного на странице, исчезают безвозвратно, а применённые метки удаляются. Метки, добавленные после этого вызова, остаются неприменёнными: значение под ними всё ещё читается и его можно копировать:
page.ApplyRedactions();
doc.WriteTo('memo-redacted.pdf');Распространённые проблемы и решения
Метка редактирования отображает черный прямоугольник, но скрытый текст всё ещё можно скопировать. Page.ApplyRedactions() никогда не вызывался (или был вызван до того, как была добавлена метка). Маркировка с помощью AddRedact() само по себе лишь рисует аннотацию над областью — содержимое под ней уничтожается только один раз ApplyRedactions() запускается.
ApplyRedactions() удалил содержимое, не покрытое меткой rect не покрывала. rect является точной переписанной областью — текст или изображения, которые лишь частично перекрывают её, всё ещё могут быть частично уничтожены на границе. Размеры меток следует задавать щедро вокруг целевого содержимого.
Результаты поиска нельзя передать напрямую в Page.AddRedact(). Попадание от Page.SearchAnnotationText() содержит метаданные аннотации, а не геометрию страницы — это не та же форма, что и rect an AddRedact() ожидает mark. Page.MarkRedactText(find, opts) and Page.RedactText(find, opts) являются точками входа для редактирования по поиску текста, и обе также доступны на Document уровне, чтобы обработать каждую страницу одним вызовом.
Редакция сохраняется после шифрования неожиданно. Редакция и шифрование — независимые операции — применяйте редакции перед сохранением с encrypt опциями, если цель состоит одновременно в удалении содержимого и ограничении доступа к оставшемуся; применение в обратном порядке не отменит уже зашифрованное сохранение.
Часто задаваемые вопросы
В чём разница между пометкой и применением редактирования?
AddRedact() только создаёт аннотацию, описывающую, где запланировано редактирование — покрытый контент остаётся нетронутым и по-прежнему доступен для выделения/копирования, пока не выполнится ApplyRedactions() и не перепишет страницу деструктивно.
Могу ли я выполнить редактирование, ищя текст, вместо указания прямоугольника?
Да — Page.MarkRedactText(find, opts) помечает каждое совпадение find для последующего применения, а Page.RedactText(find, opts) помечает и применяет в одном вызове. Оба также доступны на Document для обработки всего документа.
Влияет ли ApplyRedactions() на аннотации, кроме меток redaction marks?
Нет — он переписывает поток содержимого под собственными метками RedactAnnotation; остальные типы аннотаций на странице не затрагиваются этим вызовом.
Является ли redaction обратимым?
Нет — ApplyRedactions() является разрушительным. Сохраните оригинальный файл, если позже потребуется восстановить unredacted content.