FPdfRedaction предоставляет консервативную инспекцию источника и операции геометрии, используемые TPdf.SaveAsRedacted; высокоуровневый метод отвечает за транзакцию, обработку аннотаций, непрозрачные наложения, регенерацию содержимого, очистку и отсечение ресурсов
Помощники изменяют нативные объекты в изолированной копии транзакции вызывающего и возбуждают EPdfRedactionGeometry при неподдерживаемой геометрии или исчерпанных бюджетах; сами по себе они не выполняют полный безопасный экспорт
type
EPdfRedactionGeometry = class(Exception);
TPdfRedactionGeometryOptions = record
MaxFormDepth, MaxObjects, MaxPathSegments, MaxFragments: Integer;
MaxImagePixels, MaxGeometryOperations: Int64;
CurveTolerance: Double;
class function Default: TPdfRedactionGeometryOptions; static;
end;
TPdfRedactionGeometryReport = record
ExpandedFormCount, ScannedChildCount, ClippedPathCount: Integer;
FlattenedCurveCount, GeneratedPointCount, FragmentCount: Integer;
MaskedImageCount: Integer;
ScannedPixelCount, MaskedPixelCount, PixelIntersectionTestCount: Int64;
GeometryOperationCount: Int64;
end;
procedure ValidateDetailedRedactionSource(Source: TStream);
procedure ValidateDetailedRedactionText(PageObject: FPDF_PAGEOBJECT);
procedure ExpandRedactionForms(Page: FPDF_PAGE;
const Options: TPdfRedactionGeometryOptions;
var Report: TPdfRedactionGeometryReport);
procedure ClipRedactionPath(Page: FPDF_PAGE; PageObject: FPDF_PAGEOBJECT;
ObjectIndex: Integer; const Redactions: array of FS_RECTF;
const Options: TPdfRedactionGeometryOptions;
var Report: TPdfRedactionGeometryReport);
procedure MaskRedactionImage(Document: FPDF_DOCUMENT; Page: FPDF_PAGE;
PageObject: FPDF_PAGEOBJECT; ObjectIndex: Integer;
const Redactions: array of FS_RECTF;
const Options: TPdfRedactionGeometryOptions;
var Report: TPdfRedactionGeometryReport);
Все прямоугольники редактирования и допуски кривых задаются в пунктах пользовательского пространства PDF; точки контуров преобразуются в пространство страницы перед клиппингом, а ObjectIndex — исходный нуль-базированный нативный индекс объекта страницы, используемый для сохранения порядка отрисовки
ExpandRedactionForms рекурсивно отсоединяет дочерние текст, контуры и изображения, компонует невырожденные матрицы экземпляров и нативные клипы и вставляет развёрнутые объекты на исходную позицию Form; отдельное развёртывание каждого общего экземпляра исключает правку исходного общего потока Form на местеClipRedactionPath требует сплошного заполненного контура без обводки, расплющивает кубические сегменты с ограниченной глубиной подразбиения, вычитает прямоугольные вырезы и сохраняет заполнение nonzero или even-odd по оставшимся подконтурамCurveTolerance + 0.001 пункта PDF; допуск ограничивает аппроксимацию кривых и может убрать небольшую дополнительную полосу за пределами запрошенного прямоугольникаMaskRedactionImage принимает невырожденные аффинные преобразования, включая поворот, отражение и наклон, и поддерживаемые декодированные выборки Gray, BGR, BGRx или BGRA; он сохраняет декодированное разрешение и создаёт свежее замещающее изображение0.001 пункта PDF, обнуляются и цвет, и байты альфы; сохранённые пиксели держат свои декодированные цветовые выборкиValidateDetailedRedactionText требует нормального заполненного текста для частичного сохранения; сопоставление символов и реконструкцию фрагментов остаётся ответственностью высокоуровневого методаРазвёртывание и частичная геометрия отклоняют прозрачность или режимы смешивания, неподдерживаемые типы потомков, вырожденные матрицы, узорные заливки и сложные или нерасширенные пути клипа; поддерживаемый избыточный прямоугольный клип должен содержать полные границы объекта
| Опция | По умолчанию | Значение |
|---|---|---|
MaxFormDepth | 32 | Глубина развёртывания вложенных форм |
MaxObjects | 1000000 | Перечисление страниц и накопительные лимиты развёрнутых потомков |
MaxPathSegments | 262144 | Входные сегменты на контур и накопительные сгенерированные точки контуров |
MaxFragments | 1000000 | Сохранённые прямоугольные области и накопительные замещающие фрагменты |
MaxImagePixels | 16777216 | Накопительные обработанные декодированные пиксели изображений |
MaxGeometryOperations | 67108864 | Накопительная работа по геометрии и пиксельным пересечениям |
CurveTolerance | 0.01 | Допуск расплющивания кубических кривых в пунктах PDF |
Инициализируйте опции через TPdfRedactionGeometryOptions.Default и обнулите отчёт один раз перед транзакцией; держите один и тот же отчёт между вызовами помощников, чтобы бюджеты сгенерированных точек, пикселей изображений, фрагментов и операций накапливались
ExpandedFormCount и ScannedChildCount описывают развёртывание; счётчик посещений включает корневые экземпляры Form наравне с потомками; ClippedPathCount, FlattenedCurveCount и GeneratedPointCount описывают работу с контурами, включая промежуточные точки клиппинга; MaskedImageCount, ScannedPixelCount, MaskedPixelCount и PixelIntersectionTestCount описывают работу с изображениями
FragmentCount считает замещающие объекты, а не контуры многоугольников или пиксели, а GeometryOperationCount накапливает ограниченную работу помощников; отчёт, оставленный после исключения, может описывать частичную работу по отброшенной копии транзакции
ValidateDetailedRedactionSource инспектирует активные объекты и декодированное содержимое до правок; TPdf.SaveAsRedacted вызывает его для каждого профиля, включая удаление целых объектов и более простой частичный профиль
/ActualText и /Alt, XFA и семантика optional content, включая /OCProperties, /OCG и /OCMD, отклоняютсяTr, а также рисование scn/SCN узором или в специальном цветовом пространстве отклоняются/FlateDecode; декодирование ограничено 32 МиБ на поток содержимого и 64 МиБ суммарноТекущий профиль не перестраивает структуру Tagged PDF, не сохраняет произвольную прозрачность, не поддерживает произвольную обводку или клиппинг и не обещает сохранность кодированных изображений без потерь; безопасный вывод требует удаления исходных потоков и неиспользуемых ресурсов после регенерации, что выполняет TPdf.SaveAsRedacted
Прямые вызывающие обязаны предоставить изолированную копию документа, проверить нативные возможности и конечные положительные бюджеты, отбросить копию при сбое, регенерировать изменённое содержимое страниц и завершить очистку и отсечение ресурсов до экспорта