Native Linux C ABI
HotPDFLinuxABI.lpr يبني مكتبة مشتركة أصلية بـ ELF x86_64 اسمها libhotpdf.so.1، بـ SONAME بقيمة libhotpdf.so.1 ورموز عامة مسندة إلى HOTPDF_1.0
المكتبة تستخدم THPDFHeadlessDocument وتصييرًا بالمعالج دون مكوّن Windows ولا سطح مكتب نشط ولا قارئ PDF ولا عملية Python لحظة التشغيل؛ وPython يستخدمها سكربتات البناء والقبول
البناء والقبول
sh Tests/Linux/Build-LinuxABI.sh
sh Tests/Linux/Run-LinuxABIAcceptance.sh
FPC_EXE=/usr/local/bin/fpc HPDF_LINUX_OUTPUT=Tests/Linux/bin/linux-abi331 sh Tests/Linux/Run-LinuxABIAcceptance.sh
استخدم FPC أصليًا 3.2.2 أو أحدث مع FCL وpaszlib ومترجم C وbinutils وFontconfig وخطوط TrueType مثبتة؛ وبيئة Python للقبول تحتاج أيضًا pypdf بمزوّد AES وPyMuPDF وPillow وNumPy
FPC_EXE وHPDF_LINUX_OUTPUT وPYTHON_EXE تنتقي مواضع الأدوات؛ وبيئة Python للقبول الافتراضية هي /opt/hotpdf-python/bin/python
FPC عادةً يكتب كتلة تصدير مجهولة في استجابة رابط ELF لديه؛ والبناء يسمّي تلك الكتلة بخريطة الرموز المضمّنة في المستودع قبل الربط لأن إضافة سكربت إصدار مسنّى ثانيًا ستتعارض مع الكتلة المجهولة
الواجهة العامة
ضَمِّن Lib/hotpdf_abi.h لتخطيط السجل المشترك وثوابتي الحالة؛ وhpdf_abi_io_v1_size وhpdf_abi_operation_v1_size تبلّغان أحجام السجلات الأصلية الفعلية
مكتبة Linux تصدّر اكتشاف ABI واكتشاف القدرات وإنشاء وإهلاك المستند والتحميل والحفظ عبر callback وعدّ الصفحات وhpdf_document_execute_json_v1 ونقطة دخول hpdf_document_compare_json_v1 للمستندَين
اكتشف العمليات الحالية عبر hpdf_capabilities_json_to_io بدلًا من افتراض مجموعة عمليات Windows
| العملية | السلوك |
|---|---|
info | عدد الصفحات والنماذج وحقول التواقيع |
text.extract | نص صفحات Unicode بـ JSON ومخرجات UTF-8 اختيارية، مع مصفوفة صفحات اختيارية ذات أساس صفري |
forms.read | أسماء حقول مؤهلة كاملةً وقيم Unicode وانتقائيات اختيار كاملةً وأنواعًا وأعلامًا وأطوالًا قصوى |
forms.fill | تحديثات transactional للنص والاختيار ومتعدد الانتقاء وcheckbox وradio وcaptions أزرار دافعة ومظاهر بخطوط مضمّنة مطابقة ومخرج PDF تزايديًا |
annotations.export / annotations.import | تبادل XFDF للتعليقات محدودًا السقف معاملات إلحاقًا وUnicode دقيقًا ومسارات ثنائية ومراجع popup/reply وتشفيرًا وسياسة تصديق مصادق عليها |
forms.export / forms.import | تبادل FDF/XFDF محدود السقف لـ scalar وrich بأنماط فعلية أربعة لكل عائلة غنية مهيأة منتقى ومعاملات PDF مشفرة ومظاهر معاد توليدها وسياسات تواقيع وcallbacks مجزأة تزامنية |
render | مخرج PNG بـ Cairo مع صفحة وdpi واستخدام view أو print وخيارات تعليقات وتهيئة optional-content الافتراضية |
sign | توقيع PEM أو PFX تزايديًا وحقول قائمة أو منشأة حديثًا ومظاهر مرئية وتصديقًا، بما يشمل مدخلات AES-256 R5/R6 المصادق عليها وخيارات digest وmetadata وملف وأدلة متحقق منها |
signatures.verify | تحقق CMS فعليًا وأطوال مراجعات موقَّعة وتقييم ثقة CA صريحًا اختياريًا والتحقق من معلومات الإبطال الموقَّعة |
html.import | إنشاء مستندات HTML/CSS أصليًا بخطوط Unicode وترقيم صفحات وصور وارتباطات تشعبية وعناصر AcroForm اختيارية |
text.draw | نص صفحات Unicode مرئيًا أو غير مرئي مع حفظ تدفقات الصفحات الأصلية ومراجعات مشفرة مصادقًا عليها |
ocr | تعرف Tesseract فعليًا بعمر ابن محدود السقف ونتائج كلمات وطبقة PDF قابلة للبحث اختيارية |
pages.import | استيرادات موارد صفحات منتقاة بمدخلات مصدر مستقلة وتحديثات وجهة transactional |
pdfa.convert | تحويل PDF/A-4 نقطيًا أو نصيًا/متجهيًا، مع إصلاح خطوط اختياري ومتطلبات تحقق النمط المنتقى |
compare / compare.contract | مقارنة بمقبضين لعدد الصفحات والنص والكائنات والصور المصيَّرة والبنية والكامل، إضافة إلى مقارنة تعاقدية دلالية بمخرج JSON أو HTML أو PDF مراجعة مشروحة مُهيأ |
{"schemaVersion":1,"type":"render","page":0,"dpi":150,"usage":"print","annotations":false,
"limits":{"memoryBytes":268435456,"outputBytes":268435456,"pixels":100000000}}
سير عمل التوقيع الأصلي يقبل هوية PEM أو PFX بـ Base64 صريحة وحقول تواقيع جديدة اختيارية ومظاهر Unicode وأذونات تصديق؛ والتوقيع الناجح يستبدل السياق المحمَّل بالمراجعة الموقَّعة المُهيأة، بينما فشل التوقيع أو النشر يحفظ السياق الأصلي
خيارات التوقيع الأصلية تربط انتقاء SHA256 أو SHA384 أو SHA512 الفعلي ومعلومات تواقيع Unicode وإقرارًا قانونيًا وبايتات ثقة صريحة وأدلة إبطال موقَّعة متحققًا منها وpresets مظاهر حقيقية ومصدرية نقل بيانات اعتماد أو طوابع زمنية يدّعيها التطبيق
حالة عارض optional-content الاختيارية تزوّد تطبيقات استخدام View أو Print أو Export تلقائية صريحة وتكبيرًا ولغة وسياق مستخدم وانتقائيات يدوية بحدود العملية عبر سجلات V1 دون تغيير
عملية render تقبل usage: "view" أو usage: "print" وافتراضيها view; واكتشف الخيارات عبر مصفوفة القدرات renderUsages بسجلات callback وoperation بقيمة V1 دون تغيير
أعلام التعليقات للشاشة والطباعة تتبع الاستخدام المنتقى، وannotations: false تكبح التعليقات في كلا الوضعين؛ وترك optionalContent يحفظ التهيئة الافتراضية الساكنة، بينما يفعِّل الكائن الصريح التوصيات التلقائية الموثقة والانتقاءات اليدوية الخاصة بالعملية
Tests/Linux/Run-LinuxABIRenderUsage.sh تتحقق من بكسلات PNG الفعلية لمصادر plain وAES R5/R6 ومحتوى معطول افتراضيًا وفشل callbacks وميزانيات وإلغاء واسترداد المقبض نفسه؛ انظر Tests/Linux/HeadlessRenderUsage.en-us.md لاعتماديات المصادفات ومجلد المصادفات المولَّدة مسبقًا الاختياري
callbacks والعمر
خيارات مظاهر النماذج تقبل نص Unicode أو قيم تصدير أو مصفوفات انتقاء كاملةً وحالات أزرار صريحة وإعدادات خطوط وحدود موارد transactional
callbacks القراءة والكتابة يمكنها إعادة نقل جزئي؛ والنقل الناجح يجب أن يحرز تقدمًا موجبًا وألا يتجاوز العدد المطلوب
كل الـ callbacks تنفّذ تزامنيًا على خيط المستدعي، بما يشمل فحوص الإلغاء داخل تحليل المستند والتصيير ونقاط فحص تشفيرية
إدخال callback يُنسخ إلى ملف مؤقت خاص منشأ حصريًا بنمط 0600، فلا يلزم أن تبقى callbacks إدخال Linux وبيانات مستخدمها صالحة إلا حتى عودة استدعاء التحميل أو التنفيذ
العمليات على مقبض مستند مشترك تسلسل داخليًا؛ وكل استدعاء نشط يحمل مرجعًا مستقلًا، فإهلاك مقبض من callback تقدم يُبطل البحث اللاحق مع السماح للاستدعاء الحالي بالانتهاء بأمان
لا تنفّذ تكراريًا عملية أخرى على نفس المقبض من callback لديه؛ وأبقِ المكتبة المشتركة محمَّلة حتى تعود كل الاستدعاءات وتُهلك كل المقابض
الميزانيات والنشر
إدخال JSON محدود بـ 4 MiB و64 مستوى تداخل ويرفض UTF-8 غير الصالح وأعضاء مكررة وحدود عددية مشوهة وبتر معاملات Int64 إلى Int32
UTF-8 الخام وescapes للـ Unicode يحملان قيم السلاسل نفسها، بما يشمل المحارف التكميلية ممثلةً بأزواج UTF-16 surrogate صالحة؛ وescapes الثنائيات غير المقترنة تفشل قبل تحويل المستند أو النشر الثنائي
حدود العمليات تشمل memoryBytes وoutputBytes وresultBytes وpixels; وحدود المستند تسري أيضًا على المقابض المحمَّلة سابقًا، بينما حدود الذاكرة المُدارة والتصيير لا تعد ببساطة سقف RSS للعملية
مخرجات PDF وPNG تُهيأ وتُفحص كاملةً قبل بدء callbacks المخرجات؛ وcallback مخرجات مملوكة للمستدعي يمكنها حفظ نقل جزئي بعد فشل I/O خاصة بها، لكن النشر الثنائي أو النتيجة الفاشل لا يُرسل تعديلات النماذج ولا يستبدل سياقًا محمَّلًا سابقًا
تحويلات PDF الناجحة تُرسل المخرج المُهيأ بوصفه المستند الحالي وsnapshot مصدره الخاص معًا، فاستيراد FDF أو XFDF لاحق بنفس القيمة يعيد بايتات PDF المُرسَلة الدقيقة بقيمة updated=0 محفظًا تعبئات النماذج السابقة ومظاهر rich المكتوبة النوع والنص المرسوم والصفحات المستوردة
ملفات staging الخاصة تُزال عند استبدال السياق أو إهلاكه؛ ومخرج النماذج والتواقيع التزايدي الناجح يحفظ بادئة المصدر الأصلية وسياسة التشفير
الأدلة
إصلاح خطوط الأرشفة الاختياري يفعّل استبدال وتضمين Ghostscript محدودًا السقف بتحقق PDF/A-4 حقيقيًا قبل callbacks
PDF مراجعة مشروحة أصلي يضيف مخرج PDF مُهيأ فعليًا وإبرازات Unicode وأذونات تعليقات P3 مصادقًا عليها إلى المقارنة الدلالية
المقارنة التعاقدية الأصلية تزوّد مقارنة دلالية محدودة السقف بمقبضين وHTML مراجعة بـ Unicode وهندسة أسطر مصدر فعلية
مقارنة المستندات الأصلية العامة تقنّن رسوم الكائنات وترميز المسارات وتقارن بكسلات Cairo حقيقية بعتبات صريحة وتحفظ حالة المستند وميزانيات نشر callback
عميل القبول يتحقق من تخطيطات رؤوس C الحقيقية وبحث الرموز ذوات الإصدار وcallbacks جزئية و80 عملية مقبض مشترك متزامنة وإلغاءً وتعديلات Unicode وتراجعًا وتوقيعًا مشفرًا
قراء pypdf وMuPDF وOpenSSL المستقلون يتحققون من PDFs الفعلية وبكسلات PNG وكلمات السر المحفوظة وقواميس الأمان ومعرّفات المستند وgap الـ ByteRange الدقيقة والتواقيع الصالحة ورفض البايتات الموقَّعة المعدَّلة
واجهة المستند headless · التصيير الأصلي · خطة التسليم المتبقية