PDFium Delphi Component Docs

دمج التنقل داخل معاملة

أضف FPdfMerge إلى uses لاستخدام TPdfNavigationMergeHelper.MergeFilesWithNavigation، أو استدعِ MergePdfFilesWithNavigation العامة مع مستند وجهة صريح

يجهز المساعد استيراد الصفحات الأصلي ويعيد بناء الإشارات المرجعية الهرمية ويجمع الوجهات المسماة ويعيد توجيه الروابط، ثم يعيد فتح النتيجة مستقلاً قبل استبدال المستند

يحفظ pmnPreserve تسلسل المصدر؛ يضيف pmnGroupBySource عنوانًا باسم ملف كل مصدر

تُحفظ العناوين والأبوّة والأنماط والألوان والفروع المفتوحة وإجراءات URI والوجهات الداخلية المحلولة؛ تطابق الصفحات المختارة والمتكررة والمعاد ترتيبها أول نسخة مستوردة، وتصبح وجهات الصفحات المستبعدة عناوين

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

يُدعم التوقف عند الخطأ فقط؛ تُرفض الوجهات الموقعة وإجراءات الإشارات غير المدعومة والمعالجة اللاحقة المشفرة مع تقرير خطأ؛ يحفظ الفشل والإلغاء مستند المستدعي

تحتفظ API بسياسة النماذج الأصلية؛ استخدم FPdfFormMerge لمعالجة تعارضات حقول AcroForm والموارد المتقدمة

الوجهات المسماة وروابط الصفحات

تكون PreserveNamedDestinations و PreservePageLinks ‏True افتراضيًا؛ تتجاوز False الجزء الموافق من معالجة التنقل الإضافية

تُقرأ الوجهات من قاموس /Dests القديم وشجرة /Names/Dests، بما يشمل الأشجار الهرمية والمصفوفات غير المباشرة وقواميس الوجهات ذات /D؛ تتقدم شجرة الأسماء عند تكرار المفتاح

تستخدم النتيجة شجرة /Names/Dests متوازنة وتحفظ أشجار أسماء الوجهة الأخرى مثل /EmbeddedFiles؛ لا تستورد أشجار المصدر غير المتعلقة بالوجهات

تحفظ المفاتيح بايتات PDF الأصلية بما فيها UTF-16BE؛ يُحفظ نمط العرض ومعاملاته حرفيًا، ومنها /FitH null و /XYZ null 34 null

السياسةالسلوك
pndRejectيرفض مفتاح مصدر موجود في الوجهة المعاملة بأكملها
pndRenameتحفظ السياسة الافتراضية الأسماء غير المتعارضة وتسبق المتعارضة بـ DestinationPrefix، افتراضيًا Imported_؛ تستخدم التصادمات التالية بادئات حتمية مثل 2_Imported_Shared
pndNamespaceيسبق كل مفتاح DestinationPrefix وفهرس مصدر يبدأ من واحد وشرطة سفلية، مثل Imported_1_Shared؛ تحصل التصادمات الباقية على بادئة رقمية حتمية

يجب أن يحتوي DestinationPrefix على 1 إلى 256 محرف ASCII قابل للطباعة؛ تُدرج البادئة بعد BOM لمفاتيح UTF-16BE

تُكتب الروابط الداخلية ذات /Dest أو إجراء /A /GoTo واحد كوجهات صريحة؛ تبقى الوجهات المسماة صحيحة بعد إعادة تسمية التعارض

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

تُزال الوجهات التي استُبعدت صفحتها من الشجرة؛ يُحذف /Dest أو GoTo من الرابط المتأثر مع الاحتفاظ بالتعليق وخصائصه الأخرى

تبقى روابط URI سليمة؛ تُرفض سلاسل إجراءات /Next لأنها خارج نطاق إعادة التوجيه الحالي

ترفض الأشجار المشوهة أو الدورية والمراجع غير المتاحة والمفاتيح المكررة المعاملة؛ يحفظ الفشل والإلغاء وتجاوز الميزانية المستند

الميزانيات والتقارير

الحدود الافتراضية 10,000 إشارة وعمق 128 و 1,048,576 محرف عنوان و 10,000 وجهة و 100,000 رابط و 256 MiB للمستند؛ يجب ألا يتجاوز سقف بايتات المستند MaxInt

مع المعالجة الإضافية، أقصى عمق 256 والوجهات 65,536 والروابط 1,000,000؛ يحد التقاط المصدر بايتات المفاتيح الخام بـ 1 MiB

للمفاتيح المجموعة ميزانية بايتات مستقلة تساوي MaxTitleCharacters؛ تُلتقط كل المصادر ضمن الميزانيات قبل تصفية الصفحات

يعد PreservedNamedDestinationCount الوجهات النهائية، و RenamedNamedDestinationCount المفاتيح المستوردة المعاد تسميتها، و RemovedNamedDestinationCount الأهداف غير المحلولة أو المستبعدة

يعد RemappedPageLinkCount الوجهات الداخلية النهائية الحالية والمستوردة، و RemovedPageLinkCount المحذوفة؛ يُعد الرابط ذو /Dest و GoTo مرة لكل وجهة

التصريحات العامة

type
  TPdfMergeNavigationPolicy= (pmnPreserve, pmnGroupBySource);
  TPdfMergeNamedDestinationPolicy= (pndReject, pndRename, pndNamespace);

  TPdfNavigationMergeOptions= record
    NativeOptions: TPdfBatchMergeOptions;
    NavigationPolicy: TPdfMergeNavigationPolicy;
    MaxOutlineItems: Integer;
    MaxOutlineDepth: Integer;
    MaxTitleCharacters: Integer;
    MaxDocumentBytes: Int64;
    PreserveNamedDestinations, PreservePageLinks: Boolean;
    NamedDestinationPolicy: TPdfMergeNamedDestinationPolicy;
    DestinationPrefix: string;
    MaxNamedDestinations, MaxPageLinks: Integer;
    class function Default: TPdfNavigationMergeOptions; static;
  end;

  TPdfNavigationMergeReport= record
    Succeeded: Boolean;
    Cancelled: Boolean;
    ImportedSourceCount: Integer;
    ImportedPageCount: Integer;
    PreservedOutlineCount: Integer;
    RemovedDestinationCount: Integer;
    SourceGroupCount: Integer;
    PreservedNamedDestinationCount, RenamedNamedDestinationCount: Integer;
    RemovedNamedDestinationCount, RemappedPageLinkCount, RemovedPageLinkCount: Integer;
    ErrorMessage: string;
  end;

  // The caller's document is replaced only after the complete staged result
  // has been independently reopened and its outline destinations checked
  TPdfNavigationMergeHelper= class helper for TPdf
    function MergeFilesWithNavigation(const Sources: TPdfBatchMergeSources;
      const Options: TPdfNavigationMergeOptions;
      out Report: TPdfNavigationMergeReport): Boolean;
  end;

function MergePdfFilesWithNavigation(Destination: TPdf;
  const Sources: TPdfBatchMergeSources;
  const Options: TPdfNavigationMergeOptions;
  out Report: TPdfNavigationMergeReport): Boolean;

معالجة التدفقات منخفضة المستوى

تعرض FPdfCompress ‏CapturePdfNavigation و WritePdfNavigation لإدارة استيراد الصفحات والمراجعات المتفرقة يدويًا

تحتوي TPdfNavigationNamedDestination.NameKey بايتات مفاتيح PDF الخام؛ أرقام الصفحات مطلقة وتبدأ من واحد، والصفر هدف غير محلول

تحدد TPdfNavigationPageLink.PageNumber الصفحة المالكة؛ AnnotationIndex ترتيب صفري بين جميع التعليقات الأصلية، و LinkIndex بين الروابط فقط

يحدد الكاتب الروابط بـ LinkIndex وينسخها مع الصفحة المالكة النهائية ويكتب الأهداف واللواحق الدقيقة المقدمة؛ يجب تقديم خريطة الاستيراد الكاملة

يشترط الكاتب تدفقين مختلفين ومستندًا غير مشفر وغير موقع؛ رفض التدفقين المتطابقين يحفظ المصدر، وبقية الأخطاء تفرغ الإخراج المنفصل

لا تستورد هذه الدوال صفحات أو تستبدل مستند TPdf حيًا؛ استخدم الدالة العليا داخل المعاملة لدمج التنقل بالكامل

function CapturePdfNavigation(Source: TStream; MaxNamedDestinations,
  MaxPageLinks, MaxDepth: Integer; out Names: TPdfNavigationNamedDestinations;
  out Links: TPdfNavigationPageLinks; out ErrorText: string): Boolean;

function WritePdfNavigation(Source, Output: TStream;
  const Names: TPdfNavigationNamedDestinations;
  const Links: TPdfNavigationPageLinks; ReplaceNamedDestinations: Boolean;
  out ErrorText: string): Boolean;