تحرير الفقرات المحدود السقف

HPDFParagraphReflow تنتقي مراكز محارف رسومية محمَّلة داخل مستطيل مصدر صريح وتكتب فقرة مقيسة حديثًا داخل مستطيل هدف صريح على الصفحة نفسها

ملف القبول يغطي Delphi بـ Win32/Win64 وFPC/Lazarus على Windows; وتوليد الخطوط المقيس يستخدم باني مظاهر المستند القائم ودعم خطوطه المثبتة

الانتقاء والتخطيط والحفظ

الإحداثيات نقاط PDF في مساحة مستخدم الصفحة غير مدوّرة، بمحور y صاعدًا؛ وكلا المستطيلين يجب أن يكونا منتهيين بأبعاد موجبة لا تتجاوز 14400 نقطة ويتسعان في MediaBox للصفحة

الانتقاء يمكن أن يمتد عبر عدة خطوط أساس أصلية وعدة مسارات محتوى صفحة؛ ومعامِلات النص الحرفية والسداسية عشرية وTJ وعلامة الاقتباس المفردة والمزدوجة تُعاد كتابتها عند حدود رموز محارف منتقاة

البادئات واللواحق المحفوظة وإزاحات النص وتعديلات kerning العددية الأصلية تبقى مكانها؛ ونص المصدر يُزال من معامِلات فعلية بدلًا من إخفائه بمستطيل خلفية

‏Form XObjects متداخلة تستخدم Matrix وBBox لديها؛ وكل استدعاء منتقى وموارد أسلافه يُنسخان سريًا محفظين بقية الاستدعاءات وبقية الصفحات المتشاركة للـ Forms الأصلية

مراكز المحارف الرسومية خارج BBox لنموذج مستثناة؛ وحدود محارف المصدر الجزئية ترفض افتراضيًا، وRejectPartialSourceGlyphs = False تسمح صراحةً بإزالة رمز محرف كامل عندما يُنتقى مركزه

Appearance تنتقي خطًا مثبتًا ونمطًا وحجمًا ولونًا وحشوًا ومحاذاة وسياسة فيضًا؛ وعرض الهدف يتحكم في الالتفاف، وshrink-to-fit تبلّغ EffectiveFontSize الفعلي

هندسة المحارف الرسومية المولَّدة تُفسَّر وتُفحص باستقلالية مقابل مستطيل الهدف؛ والدوران مثبت إلى صفر والعتامة إلى واحد لهذا المساعد المحدود السقف

البديل الفارغ يحذف نص المصدر المنتقى؛ واضبط RequireSourceText = False لإدراج فقرة في منطقة مصدر فارغة

دليل التصادم

النص غير المنتقى غير ذي الفراغات وXObjects والصور المضمّنة وحدود المسارات المصبوغة ومستطيلات التعليقات تُقارن بحدود المحارف الرسومية البديلة المولَّدة

كل تصادم يحدد نوعه وحدوده في فضاء الصفحة ونصًا مجاورًا اختياريًا وفهرس محرف رسومي بديل؛ والعدد الكلي يُحفظ حتى عندما تصل قائمة التصادمات المعادة إلى سقفها

نقاط تحكم المسارات وحدود قص Forms المحوَّلة وعرض الـ stroke وحدود miter تنتج صناديق متحفظة؛ والتظليل ذو امتداد تصبغ مجهول يشغل متحفظًا مستطيل الهدف كاملًا

هذا الفحص الهندسي يمكنه المبالغة في الإبلاغ عن صور شفافة ومناطق تعليقات غير مصبوغة ومنحنيات ومسارات مقصوصة وأغلفة Forms مدوّرة؛ وهو لا يثبت فصل مداد دقيقًا بالبكسل ولا يفحص مسارات قص اعتباطية أو دمج blend أو مخططات خطوط

RejectCollisions = True ترفض البدائل المتداخلة دون تحويل؛ وضبطها false يبقي التقرير مع السماح لسياسة التداخل المتعمدة للمستدعي

المعاينة والإرسال والتراجع

HPDFPreviewParagraphReflow تعيد خطة مختومة مملوكة للمستدعي وتخطيط بدائل دلاليًا وبصمات ودليل تصادم ثم تتراجع عن كائنات المستند المولَّدة

HPDFCommitParagraphReflow تكرر التحليل المحدود السقف وتطبق الخطة ذريًا فقط عندما لا يزال محتوى المصدر وحدود Forms وهندسة التعليقات وهندسة خطوط البدائل مطابقةً للمعاينة

الخطة تخص نفس نسخة المستند الحية؛ أهلكها عند الانتهاء وأبقِ المستند حيًا طوال الوقت وأعد توليد المعاينة بعد تحميل مستند آخر أو تغيير المحتوى المنتقى

THPDFParagraphReflowSession تضيف حالة مراجعة مطبقة: Apply تكشف المستند المعدَّل للاستخراج أو التصيير وCommit تنشره وRollback أو الإهلاك يستعيد الرسم البياني الأصلي

استخدم الجلسات مسلسلًا؛ والمستند يجب أن ينجو من الجلسة، ويحظر متشابك معاملات رسم بياني أو تحرير أخرى بينما Pending بقيمة true

التراجع يستعيد حالة المستند في الذاكرة؛ وملفات خارجية محفوظة مسبقًا تبقى مسؤولية المستدعي

العمل المنتهي وسلوك الفشل

الافتراضيات 64 MiB محتوى مفكوكًا و64 MiB مسارات مولَّدة و100000000 وحدة عمل و100000 محرف رسومي و250000 token و12 مستوى Form و256 استدعاء Form و256 تصادمًا معادًا و100000 عقدة موارد مستنسخة

بايتات السلاسل المرمَّزة تُفحص قبل تفسير المحارف الرسومية مقابل حد المحارف الرسومية المتبقي، فقد تستهلك ترميزات محارف متعددة البايتات متحفظًا ميزانية أكثر من عدد محارفها المرئية

حدود الفك والتوليد تغطي المحتوى الذي يعالجه المساعد؛ وحجم المسار المولَّد يُفحص قبل النشر ولا يمثل حد ذاكرة ذروة العملية ولا يكبس كل تخصيصات باني الخطوط المثبتة

الإلغاء تعاوني عبر توكينزة المحتوى وحلقات المساعد، بفحوص حول استدعاءات توليد الخطوط القائمة؛ واحتفظ بالـ token حتى يكتمل الاستدعاء

المصدر المفقود والإدخال غير الصالح والتصادمات والخطط المتقادمة والمحتوى غير المدعوم والميزانيات المستنفدة والإلغاء وفشل عادي تعيد false بحالة صريحة وتحفظ الرسم البياني الأصلي للكائنات

النص عموديًا أو مفردًا المنتقى وForms دورية أو غير محلولة وأنواع XObjects مصبوغة غير مدعومة ومستندات ذات حقول تواقيع تُرفض؛ والتحرير التزايدي حافظًا للتواقيع يتطلب سير عمل منفصلًا

مثال

Options := HPDFDefaultParagraphReflowOptions;
Options.Appearance.FontName := 'Arial';
Options.Appearance.FontSize := 11;
Source.Left := 55; Source.Bottom := 659;
Source.Right := 350; Source.Top := 714;
Target := Source;
Plan := nil;
try
  if HPDFPreviewParagraphReflow(Document, 0, Source, Target,
    'The Supplier must deliver signed monthly reports.', Options,
    Plan, Report, CancellationToken) then
    if HPDFCommitParagraphReflow(Document, Plan, Report, CancellationToken) then
      Document.SaveLoadedDocument('reviewed-contract.pdf');
finally
  Plan.Free;
end;

القبول والمخرج المحفوظ

مُشغِّلات Delphi وFPC المخصصة تستخدم مصادفات PDF محمَّلة حقيقية لفقرات متعددة خطوط الأساس ومعامِلات جزئية وForms متداخلة مشتركة ونص Forms مقصوصًا وتغييرات عرض وخطوط وأنواع تصادم وإلغاءً وتراجع رسم بياني

الحفظ المتكرر ملف/ملف وstream/ملف يحفظ الرسم البياني المعدَّل؛ والمستندات المحمَّلة الطازجة دون تغيير تحفظ بايتات مصدرها الدقيقة، ويمكن أن يلي فشل كتابة مخرجات محقونًا إعادة محاولة ناجحة

Tests/Fixtures/ParagraphReflow/loaded-repeat-save.pdf تعزل تراجع الحفظ دون استخدام مساعد الفقرة: حمّل وأدرج علامة واحفظ مرتين واقرأ الملف الثاني باستقلالية

شغّل Tests/Delphi/Run-ParagraphReflowTests.ps1 -Platform Win64 أو Tests/FPC/Run-ParagraphReflowTests.ps1 -Platform Win64، وانتقِ Win32 للمعمارية الأخرى

المُدقِّق الاختياري Tests/Fixtures/ParagraphReflow/verify_output.py في Python يستخدم PyMuPDF لاستخراج نص Unicode المحفوظ الفعلي وتصيير الصفحات المعدَّلة؛ وكل مُشغِّل يكبح فتح عارض تلقائيًا

مواضع مرتبطة

تحرير الفقرات المحدود السقف · الخيارات · التقرير