PDFium Delphi Component Docs

استبدال نص منسق داخل معاملة

أضف 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;