Как скрыть содержимое PDF в TypeScript

Как скрыть содержимое 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.

См. также:

 Русский