أضف FPdfStyledEdit ووفّر IPdfRegexEngine لتخطيط الاستبدال وتنفيذه على كائنات النص الأصلية في المستوى الأعلى
تلتقط PlanStyledPdfRegexReplacements snapshot مصدر قابلًا لإعادة الإنتاج، وتجمع glyphs Unicode الفعلية بترتيب الصفحات والكائنات، وتربط المطابقات بمرتكزات كائن ثابتة؛ تستبعد المسافات وفواصل الأسطر التي يولدها الاستخراج
تفحص ExecuteStyledPdfReplacements SHA-256 الخاص باللقطة وهوية المصدر الحالية والمرتكزات والفترات غير المتداخلة قبل تعديل مستند محمل بصورة مستقلة
تعتمد هوية المصدر على تسلسل قابل للتكرار مع طوابع زمنية ومعرفات مطبعة، لا بايتات الملف الأصلي؛ يحتفظ المخطط ببايتات اللقطة الفعلية و SHA-256 لها
يُعاد استخدام الخط الأصلي والحجم واللون والمصفوفة حيث يمكن؛ تحتفظ الاستبدالات الممتدة عبر كائنات أو صفحات بنمط أول كائن، وتحذف المحارف المستهلكة من التالية مع حفظ بقية النص وترتيب الصفحات
تختار FallbackFontName خط PostScript قياسيًا صراحة عند تعذر إعادة Unicode الأصلي؛ تطلب ForceFallbackFont هذا المسار مباشرة
يحافظ fallback على ترتيب الرسم والمصفوفة ونمط التصيير وخصائص الملء والحدود؛ تُرفض الكائنات المقصوصة أو الشفافة أو marked أو tagged بدل فقد دلالتها الرسومية بصمت
قد يُضغط النص الأعرض من حدوده الأصلية أفقيًا إذا كانت المصفوفة مستقيمة بلا shear؛ القيمة الافتراضية لـ MinHorizontalScale هي 0.5، ويحتفظ النص الأضيق بالمصفوفة الأصلية
يدعم المسار نص استبدال أحادي السطر وضبطًا أفقيًا محدودًا؛ لا يجتاز Form XObjects المتداخلة ولا يعيد كتابة دلالات Tagged PDF أو توزيع الفقرات
تُرفض المستندات الموقعة أو المشفرة و XFA؛ يترك الإلغاء والمخطط القديم و UTF-16 غير الصالح والخطوط غير المدعومة ونفاد الميزانية مستند المستدعي دون تغيير
تعيد PreviewOnly النتيجة المعاد فتحها بصورة مستقلة في PreviewPdf دون استبدال المستدعي؛ لا يستبدل Commit ناجح المستند إلا بعد التحقق من استخراج glyphs وعدد الصفحات عقب الحفظ وإعادة الفتح
تُجمع كل المطابقات في النص النهائي قبل تعديل الكائنات الأصلية؛ يُفحص الضبط والمقياس الأدنى مرة واحدة مقابل الحدود الأصلية لتجنب الانكماش المفرط المتراكم
يحذف الاستبدال الفارغ كائن النص المستهلك بالكامل بعد جميع التعديلات المرتكزة؛ تُطبق الاستبدالات المتعددة عكسيًا لحفظ الإزاحات السابقة
الحدود الافتراضية 256 MiB للمستند و 10,000 صفحة و 100,000 كائن نص و 16,777,216 وحدة UTF-16 و 100,000 استبدال؛ ميزانية الفحص 67,108,864 زيارة محرف أصلية ووحدة نسخ UTF-16 للتخطيط
تحتفظ السقوف بحدود الصفحات والكائنات والمحارف والاستبدالات، وتسمح بـ 512 MiB للمستند و 1,073,741,824 زيارة، وتحد اسم خط fallback بـ 1,024 بايت
يتضمن التقرير SHA-256 للمصدر والنتيجة وأعداد الاستبدال و fallback والتحجيم والنص الأصلي والنهائي وحدود كل كائن بنقاط PDF؛ فهارس الصفحات والكائنات تبدأ من الصفر في المصدر
الاستبدال ليس مسار تنقيح أمني؛ استخدم APIs التنقيح المخصصة لإزالة المحتوى الحساس وبيانات المستند المرتبطة
Options := TPdfStyledEditOptions.Default; Plan := PlanStyledPdfRegexReplacements(Pdf, Pattern, Replacement, Engine, Options); Options.PreviewOnly := True; if not ExecuteStyledPdfReplacements(Pdf, Plan, Options, PreviewPdf, Report) then raise EPdfProduction.Create(Report.ErrorMessage);
type
TPdfStyledEditOptions= record
MaxDocumentBytes: Integer;
MaxPages, MaxTextObjects, MaxCharacters, MaxReplacements: Integer;
MaxTextScanWork: Int64;
MinHorizontalScale: Double;
FallbackFontName: AnsiString;
ForceFallbackFont: Boolean;
PreviewOnly: Boolean;
CancellationToken: IPdfCancellationToken;
class function Default: TPdfStyledEditOptions; static;
end;
TPdfStyledEditPlan= record
SourceSha256: string;
SourceBytes: TBytes;
Spans: TPdfStyledSpans;
Replacements: TPdfStyledReplacements;
end;
TPdfStyledObjectChange= record
PageIndex, ObjectIndex: Integer;
BeforeText, AfterText: WideString;
BeforeBounds, AfterBounds: TPdfRectangle;
HorizontalScale: Double;
FontFallback: Boolean;
end;
TPdfStyledObjectChanges= array of TPdfStyledObjectChange;
TPdfStyledEditReport= record
Succeeded, Cancelled, PreviewOnly: Boolean;
AppliedReplacementCount, FontFallbackCount, ScaledObjectCount: Integer;
SourceSha256, OutputSha256, ErrorMessage: string;
Changes: TPdfStyledObjectChanges;
end;
function PlanStyledPdfRegexReplacements(Pdf: TPdf;
const Pattern, Replacement: WideString; Engine: IPdfRegexEngine;
const Options: TPdfStyledEditOptions): TPdfStyledEditPlan;
function ExecuteStyledPdfReplacements(Pdf: TPdf;
const Plan: TPdfStyledEditPlan; const Options: TPdfStyledEditOptions;
out PreviewPdf: TBytes; out Report: TPdfStyledEditReport): Boolean;