PDFium Delphi Component Docs

SaveAsRedacted Метод

Компонент: TPdf  ·  Модуль: PDFium
Применяет аннотации редактирования PDF к изолированному снимку и записывает чистый результат с одной ревизией, не изменяя загруженный документ

Syntax

function SaveAsRedacted(Stream: TStream;
  const Options: TPdfRedactionOptions;
  out Report: TPdfRedactionReport): Boolean; overload;

function SaveAsRedacted(const FileName: string;
  const Options: TPdfRedactionOptions;
  out Report: TPdfRedactionReport): Boolean; overload;

Description

SaveAsRedacted захватывает текущий документ в изолированный снимок произвольного доступа, открывает этот снимок как отдельный TPdf и обрабатывает каждый прямоугольник аннотации /Redact

Стандартные параметры включают и PreservePartialObjects, и PreserveComplexObjects, чтобы сохранить поддерживаемую безопасную геометрию; этот ограниченный профиль пересобирает текст из сохранённых символьных фрагментов, обрезает сплошные залитые пути и очищает пересекающиеся пиксели в аффинных изображениях

Когда существует хотя бы одна аннотация редактирования, подробный профиль разворачивает каждый экземпляр Form XObject на каждой странице, включая неотредактированные страницы, перед применением редактирования; преобразования экземпляров объединяются, и затем исходные общие потоки Form могут быть удалены точечной обрезкой ресурсов

Установите PreservePartialObjects := False, чтобы удалять пересекающиеся объекты целиком, либо оставьте его включённым и установите PreserveComplexObjects := False, чтобы использовать более простой профиль фрагментации текста, выровненных по осям прямоугольников и выровненных по осям изображений; проверки безопасности источника применяются ко всем трём профилям

Метод удаляет все аннотации редактирования, опционально удаляет другие пересекающиеся аннотации, удаляет аннотации file-attachment на отредактированных страницах, удаляет нативные встроенные вложения и выполняет очищенную перезапись с удалением каталогового /AF, активного содержимого, форм, метаданных и недостижимых объектов

После регенерации содержимого страниц точечная обрезка ресурсов сканирует области ресурсов страниц, Form XObject, шаблонов, внешних видов, унаследованные и вложенные и удаляет только неиспользуемые имена, прежде чем недостижимые объекты отбрасываются

Вывод имеет одну чистую ревизию без более ранних ревизий документа, тогда как загруженный исходный документ остаётся неизменным; неподдерживаемая семантика источника или неподдерживаемая подробная геометрия прерывают операцию вместо получения частично отредактированного результата

Options

Параметры Form, путей, изображений, геометрии и допуска выше проверяются и используются подробным профилем; они не повышают независимые бюджеты исследования источника

Report

TPdfRedactionReport возвращает RedactionCount, RedactedPageCount, ScannedObjectCount, RemovedObjectCount, RemovedAnnotationCount, RemovedAttachmentCount, OverlayCount, SplitTextObjectCount, SplitPathObjectCount, SplitImageObjectCount, PreservedFragmentCount, счётчики байтов, вложенные SanitiseReport и ResourcePruneReport, Succeeded и ErrorMessage

Подробная работа добавляет ExpandedFormCount, ScannedFormChildCount, FlattenedCurveCount, GeneratedPathPointCount, MaskedImageCount, ScannedImagePixelCount, MaskedImagePixelCount, PixelIntersectionTestCount и GeometryOperationCount; CurveTolerancePdfPoints записывает настроенный допуск после успешной обработки

ScannedFormChildCount считает нативные объекты, посещённые при разворачивании, включая корневые экземпляры Form, а GeneratedPathPointCount включает промежуточные точки обрезки наряду с точками уплощённых кривых

MaskedImagePixelCount считает пиксели, у которых были очищены полные образцы цвета и альфы, тогда как PreservedFragmentCount считает объекты замены, а не отдельные сохранённые пиксели или контуры многоугольников; счётчики обработки при сбое могут быть частичными и не означают зафиксированного вывода

Security boundary

Example

var
  Options: TPdfRedactionOptions;
  Report: TPdfRedactionReport;
begin
  Options := TPdfRedactionOptions.Default;
  Options.FillColor := clBlack;
  if not Pdf1.SaveAsRedacted('C:\redacted.pdf', Options, Report) then
    raise Exception.Create(Report.ErrorMessage);
end;

See Also

SaveAsSanitised, SaveAsReachable, CreateAnnotation