سجل التغييرات
تاريخ الإصدارات
تاريخ إصدارات مكتبة PDFlibPas. المدخلات مرتبة من الأحدث إلى الأقدم؛ ويتبع كل إصدار نظام الترقيم الدلالي وفقاً لسياسة الإصدار في المشروع.
اللغات:English (US)English (UK)Español (España)Español (Latinoamérica)DeutschFrançaisItaliano日本語Português (Brasil)NederlandsSvenskaPolskiTürkçe한국어العربيةРусский简体中文繁體中文
v3.56.42 2026-05-27
- تم إصلاح مسار فك تشفير AES-256 المعتمد على المخزن المؤقت والمضاف في v3.56.41، بحيث يمكن للجهة المستدعية إسناد نتيجة فك التشفير إلى نفس
AnsiStringالذي وفّر مخزن النص المشفر من دون حدوث انتهاكات وصول. - أصبح مسار API العادي
LoadFromFileوEncryptوSaveToFileثم إعادة التحميل وDecryptوSaveToFileيكتمل مرة أخرى مع ملفات PDF الكبيرة المحملة، مع الاحتفاظ بتحسين فك تشفير AES-CBC ذي النسخ الأقل. - أضيفت تغطية اختبار تراجعي AES للحالات التي يكون فيها مخزن الإدخال ووجهة النتيجة نفس الكائن أثناء استرجاع streams المشفرة عند الحفظ، بما في ذلك payloads كبيرة بحجم 504 KB كانت تكشف الفشل سابقا.
v3.56.41 2026-05-27
- تمت إضافة
TPDFlib.DACopyFileلتدفقات عمل Direct Access التي تحتاج إلى عدد الصفحات ونسخة ملف غير معدلة من دون بناء مخطط الكائنات العادي الكامل. - تم تحسين فك تشفير AES-256 بإضافة مسارات فك تشفير AES-CBC المعتمدة على المخزن المؤقت واستخدامها عند فك تشفير السلاسل و stream المحملة، مما يقلل نسخ النص المشفر الإضافية في stream المشفرة الكبيرة.
- تتضمن demo Delphi
HugeFileBenchmarkالآن صفdirect-copyإضافة إلى مرشحات--opsو--skipلتشغيلات مركزة على الملفات الكبيرة.
v3.56.40 2026-05-26
- تنشئ عروض
HelloWorldفي Delphi و C++Builder الآن ملف PDF تمهيديا أكثر اكتمالا يتضمن معلومات المستند، وإخراج خط قياسي محدد، وكتلة عنوان منسقة، ورسما متجهيا بسيطا، وإرشادات للخطوات التالية، مع الحفاظ على سير عمل البناء والتشغيل نفسه. - تم استبدال جميع ملاحظات عروض Delphi و C++Builder بصفحات
Readme.htmlمناسبة للقراءة في المتصفح، بما في ذلك ملاحظات كلمات المرور والملفات المقيدة ونتائج التوقيع، وأصبحت فهارس العروض توجه المستخدمين إلى ملاحظات HTML.
v3.56.39 2026-05-26
- تقوم مسارات الحفظ في واجهة API للملفات المباشرة الآن ببناء جداول بحث المراجع المتقاطعة بشكل خطي، مما يجعل
DASaveAsFileومسارات الحفظ المباشر المرتبطة بها أسرع بكثير في ملفات PDF ذات العدد الكبير جدا من الكائنات أو أشجار الصفحات الكثيفة. - يحافظ الكاتب المحسن على نفس دلالات سلسلة الكائنات الحرة، مع تجنب الفحص المتكرر لأرقام الكائنات أثناء إنشاء xref الكامل، مما يحسن مهام الحفظ المباشر الكبيرة دون تغيير API العامة أو عقد الإخراج.
v3.56.38 2026-05-26
- تم إصلاح إخراج التشفير في واجهة API العادية بحيث يقوم
Encryptبإنشاء أو الحفاظ على معرف المقطع الختامي/IDقبل كتابة بيانات أمان AES-256، مما يبقي ملفات PDF المشفرة قابلة للاكتشاف عند إعادة التحميل عبرEncryptionStatus. - يحافظ سير العمل في واجهة API العادية
LoadFromFileوEncryptوSaveToFileثم إعادة التحميل وDecryptوSaveToFileالآن على حالة التشفير قبلDecryptالصريح، بما يطابق سلوك واجهة الملفات المباشرة مع ملفات PDF القديمة الكبيرة.
v3.56.37 2026-05-26
- تمت إضافة
TPDFlib.ComparePreflightReports، وهو مقارن سطر بسطر لتقارير preflight النصية العادية، يتجاهل أسطر الطابع الزمني المتغيرةGenerated:ويعيد سلسلة فارغة عندما يتطابق محتوى التقرير المستقر. - يدعم مثال Delphi
PreflightReportالآن--compare <file>في وضع الملف الواحد، ويكتب تقرير UTF-8 بامتداد.diff.txtويعيد رمز الخروج 2 عندما يختلف التقرير النصي الناتج عن baseline.
v3.56.36 2026-05-26
- يدعم مثال Delphi
PreflightReportالآن تشغيل المجلدات دفعة واحدة عبر--input-dirو--output-dirو--recursive، مع كتابة تقرير لكل ملف PDF باسم<basename>.preflight.<ext>. - يكتب وضع الدفعات ملف UTF-8 باسم
preflight-summary.csvيسجل كل PDF مصدر، وحالة pass/fail، وعدد المشاكل، ومسار التقرير الناتج، مع الحفاظ على عقد رموز الخروج الحالي للأتمتة.
v3.56.35 2026-05-26
- يضيف
ReportFormat = 3إخراج CSV إلىTPDFlib.CreatePreflightReportExوTPDFlib.SavePreflightReportEx، مولدا صفوف UTF-8 لبيانات التقرير الوصفية، ولكل فحص توافق محدد، ورموز المشاكل ورسائلها، والملخص النهائي. - يدعم مثال Delphi
PreflightReportالآن--format csvو--csv، بحيث يمكن لتشغيل preflight من سطر الأوامر تغذية جداول البيانات أو محللات CI البسيطة دون معالجة JSON لاحقا أو استخراج النص.
v3.56.34 2026-05-26
- تمت إضافة واجهتي API المدركتين للتنسيق
TPDFlib.CreatePreflightReportExوTPDFlib.SavePreflightReportExلإنشاء تقارير preflight لـ PDF/A و PDF/UA-1 كنص عادي أو JSON أو HTML مستقل، مع الحفاظ على واجهات التقارير النصية الحالية. - يدعم مثال Delphi
PreflightReportالآن--format text|json|htmlإضافة إلى الاختصارين--jsonو--html، بحيث يمكن لسير عمل سطر الأوامر نفسه إنتاج تقارير قابلة للقراءة أو مخرجات CI قابلة للمعالجة آلياً.
v3.56.33 2026-05-26
- تمت إضافة
TPDFlib.CreatePreflightReportوTPDFlib.SavePreflightReportحتى تتمكن التطبيقات من إنشاء تقارير نصية قابلة لإعادة الاستخدام من فحوصات توافق PDF/A و PDF/UA-1 المدمجة من دون تعداد مقابض قوائم السلاسل يدوياً. - أصبح مثال Delphi
PreflightReportيستدعي واجهات تقارير المكتبة مباشرة، لذلك يبقى المثال مركزاً على سير عمل سطر الأوامر، والفحوصات المختارة، ووضع أول مشكلة، ورموز الخروج المناسبة للأتمتة.
v3.56.32 2026-05-26
- تمت إضافة مثال وحدة تحكم Delphi جديد باسم
PreflightReportيشغّل فحوص PDF/A وPDF/UA-1 باستخدامCheckFileCompliance، ويسرد قوائم المشكلات عبرGetStringListCountوGetStringListItem، ثم يكتب تقرير preflight بنص عادي. - يدعم المثال خيارات
--inputو--outputو--pdfaو--pdfuaو--bothو--first-issue، إضافة إلى رموز خروج مناسبة للأتمتة لحالات النجاح، والعثور على مشكلات، وخطأ وقت التشغيل.
v3.56.31 2026-05-25
GetCustomKeys(2)الآن يخفي إدخالات نظام "Catalog" التي تتم إدارتها بواسطة المكتبة بشكل متسق، بما في ذلك /OutputIntents، و/Extensions، و/Requirements، و/Collection، و/NeedsRendering.- تمت إزالة ظهور نوايا الإخراج PDF/A التي تم إنشاؤها بواسطة
SetPDFAModeكمفاتيح مخصصة في القاموس الرئيسي، مما يحافظ على فصل تعداد بيانات التعريف الخاصة بالتطبيق عن هياكل الامتثال لملف PDF.
v3.56.25 2026-05-23
- تتيح GetPDFUADiagnostics الآن نفس
MULTIPLE-H-CHILDREN:Nالذي يواجهه قارئ10044، مما يضمن التوافق مع v3.56.24. يمنع ISO 14289-1 §7.4.4 وجود أكثر من عنصر فرعي مباشر من النوع H لكل عقدة في شجرة العلامات - ويتم تشغيل الفحص في جانب الكاتب في كل مرة تحتوي فيها شجرة FStructElems في الذاكرة على مثل هذا الخرق. - تستخدم CountMultipleHChildren الجديدة، وهي أداة مساعدة متداخلة، اجتياز الشجرة بترتيب العمق، وتحسب عناصر فرعية من النوع H في كل مستوى. يتم تشغيل الفحص جنبًا إلى جنب مع عمليات الاجتياز الحالية لـ LIST-STRUCT / LIST-NO-NUMBERING، ويستخدم نفس نمط الاجتياز لـ FStructElems.
v3.56.24 2026-05-23
- يضيف فحص PDF/UA-1 الجديد فحصًا لـ ISO 14289-1 §7.4.4 لضمان التفرد لعلامات H. يبلغ
10044عن أي عقدة هيكلية تحتوي على أكثر من عنصر فرعي مباشر من النوع H —، حيث يحظر هذا الإجراء وفقًا للمواصفات في المستندات ذات الهيكل القوي، وينطبق نفس القيد على أي عقدة في شجرة العلامات بغض النظر عن وضع الهيكل العام. يتطلب الشرط الآخر §7.4.4 SHALL (يجب أن يكون المستند إما منظمًا بقوة أو بشكل ضعيف، وليس كلاهما) إرشادات على مستوى المستند وقد تم استبعادها عن قصد من هذا الفحص. - يقوم برنامج المشي الجديد في هيكل الشجرة بترتيب ما قبل الترتيب (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) بحساب العناصر الفرعية المباشرة من النوع H لكل عقدة ويعيد التكرار بترتيب العمق. يعيد استخدام نفس وحدة فك التشفير على شكل K المستخدمة في برامج المشي الحالية للرؤوس والقوائم والملاحظات.
v3.56.23 2026-05-23
- تضيف عملية التدقيق PDF/UA-1 الآن فحصين لبرامج الخط ISO 14289-1 §7.21.6 اللذين كان يجب أن تؤجل عمليات فحص طبقة القاموس لـ v3.56.10 حتى يصبح محلل TrueType متاحًا. يبلغ
10034عن برامج TrueType غير رمزية تحتوي على جدول SFNT cmap مدمج يحتوي فقط على الإدخال الرمزي (platformID=3، encodingID=0) — §. يتطلب الفقرة الأولى من الإصدار 7.21.6 وجود جدول فرعي واحد على الأقل لـ cmap بحيث يمكن للبرنامج عرض نقاط الترميز المعلنة بواسطة /Encoding.. يبلغ10035عن مصفوفات TrueType غير رمزية تكون أسماء الأحرف فيها ليست أعضاء في قائمة أحرف Adobe (باستثناء.notdef) — §. يتطلب الفقرة الثالثة من الإصدار 7.21.6 أن يكون كل إدخال للفرق موجودًا في AGL. - ينفذ الإصدار الجديد
Lib/PDFlibPDFUAFontInspect.pasأداة استعراض مرنة لجدول الدليل ومحلل لجدول فرعي لجدول cmap. تمت إضافة جدول قائمة أحرف Adobe المكون من 4281 اسمًا كإطار عمل في عملية الالتزام في البنية التحتية السابقة وهو الآن متصل عبر فحص الاختلافات. يتم تخطي البرامج التي لا يمكن تحليلها كـ SFNT (برامج PFB / PFA، OpenType مجموعة، قمامة عشوائية) بصمت —. يتم تفضيل القيم السلبية الكاذبة على القيم الإيجابية الكاذبة في طبقة التدقيق.
v3.56.22 2026-05-23
- تضيف عملية التدقيق PDF/UA-1 الآن عمليات فحص لبيانات المقطع الإعلامي. يبلغ
10042عن قواميس بيانات المقطع الإعلامي (التي تم تحديدها بواسطة/S /MCD، اختياريًا/Type /MediaClip) تفتقد الإدخال المطلوب لـ/CTنوع المحتوى. يبلغ10043عن نفس القواميس تفتقد المصفوفة/Altالمطلوبة. يسرد الجدول 274 كلا المفتاحين على أنهما اختياريان، ولكن ISO 14289-1 §7.18.6 يجعلهما مطلوبين حتى تتمكن برامج قراءة الشاشة من الإعلان عن وصف ذي معنى للوسائط المتعددة المضمنة. - هذه هي المرحلة 6 من خطة التدقيق العميق PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). تعمل هذه العملية دون أي اعتماد على محلل برنامج الخط أو تيار المحتوى، لذا فهي أول فئة فرعية تابعة بعد السلسلة v3.56.0..v3.56.13.
v3.56.21 2026-05-23
- ينتج الإصدار الجديد
SetSignProcessCommitmentTypeسمةcommitment-type-indicationموقعة (OID 1.2.840.113549.1.9.16.2.16، ETSI EN 319 122-1 v1.2.1 §5.2.3) داخل مسار PAdES-B-B SignerInfo. يقبل رموزًا صحيحة من 1 إلى 6 تتوافق مع التزامات ETSI المعروفةid-cti-ets-proofOfOriginمن خلالid-cti-ets-proofOfCreation؛ استخدم 0 لمسحها. يتم رفض الرموز خارج النطاق. - ينتج الإصدار الجديد
SetSignProcessSignaturePolicyسمةsignature-policy-identifierموقعة (OID 1.2.840.113549.1.9.16.2.15، §5.2.9). يأخذ سياسة النقطة العشرية OID، وهاش مستند السياسة كسلسلة سداسية كبيرة، ورمز خوارزمية التجزئة (1=SHA-1، 2=SHA-256، 3=SHA-384، 4=SHA-512، 0=تلقائي /SHA-256). تحمل السمةSignaturePolicyIdSEQUENCE معsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE). - تؤثر هاتان السمتان فقط عندما تكون SubFilter هي
ETSI.CAdES.detached(مسار PAdES-B-B)؛ إنها توسع المصفوفةrgAuthAttrالحالية جنبًا إلى جنب معcontent-typeوsigning-certificate-v2. يحظر الجدول 1، الصف د)، الجمع بينcommitment-type-indicationوإدخال قاموس التوقيع PDF/Reason؛ يجب على المتصل التأكد من عدم تعيين كليهما.
v3.56.20 2026-05-23
- يضيف
AddPAdESDSSVRIالآن إدخالًا فرعيًا لـ VRI إلى DSS الذي يتم تجميعه، مما يكمل هيكل ETSI EN 319 142-1 v1.2.1 الفقرة 5.4.2.3 معلومات التحقق ذات الصلة. يتم فهرسة الإدخال بواسطة SHA-1 السداسي الكبير لـ '، ويتم ملء المصفوفات الفرعيةCert/CRL/OCSPالخاصة به عن طريق الرجوع إلى تدفقات DSS الأصلية باستخدام فهارس تبدأ من الصفر ويتم توفيرها كقوائم مفصولة بفواصل (مثل"0,2,5"). - يتتبع
TSmartPDFDocument.AddPAdESDSSWithVRIالأساسي أرقام كائنات التدفق المنبعثة لكل شهادة / CRL / OCSP ويستخدمها لكتابة المصفوفات الفرعية VRI كمرجع غير مباشر مرة أخرى إلى نفس التدفقات التي تشير إليها بالفعل مصفوفات DSS الأصلية، مما يلبي متطلبات المواصفات التي تتشارك إدخالات VRI التخزين مع القاموس DSS الأصل. يظل نقطة الدخول الأصليةAddPAdESDSSكما هي دون تغيير للمتصلين الذين لا يحتاجون إلى VRI. - تحتوي كل قاموس فرعي لكل توقيع VRI على علامة
/Type /VRIاختيارية بحيث يمكن للأدوات التي تتصفح الكتالوج باستخدام علاماتTypeالتعرف على الهيكل دون إعادة حل المسار الأصلية.
v3.56.19 2026-05-23
- تمت إضافة سير عمل جديد PAdES-B-T لإضافة ختم زمني لتوقيع RFC 3161 / RFC 5816 (معرّف-aa-signatureTimeStampToken، OID 1.2.840.113549.1.9.16.2.14) إلى توقيع PAdES-B-B موجود.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringيفتح مستندًا موقعًا،SetPAdESSignatureTimeStampFieldيحدد اسم الحقل،GetPAdESSignatureValueHashHexيُرجع تجزئة SHA-256 (أو 384 / 512) لموقّع 'ssignatureValueلإرسالها إلى TSA،GetPAdESSignatureCMSBytesيعرض الحمولة CMS الموجودة،SetPAdESSignatureCMSBytesيقبل بايت CMS المعزز الذي يقوم المتصل بتجميعه باستخدام مكتبة CMS المفضلة لديه، وEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringيدمج CMS الجديد في موضع/Contentsالأصلي. BuildPAdESSignatureTimeStampAttributeهو مساعد غير متزامن يغلف TSA-issued TimeStampToken في سمة CMS التي تتوقعهاSignerInfo.unsignedAttrs، بحيث يمكن للمتصلين الذين لديهم بالفعل مكتبة CMS مفيدة تخطي OID + SET من العمل الإضافي.- يوسع
SetSignProcessReserveContentsBytesالجديد موضع/Contentsفي وقت التوقيع الأولي بحيث يتناسب CMS المعزز بعد ذلك دون تجاوز الحجز الأصلي. تضيف سمات TimeStampTokens الصادرة من TSA عادةً 2-6 بايت إلى SignerInfo؛ قم بتمرير 1024-8192 لترك مساحة. إذا لم يكن هناك ما يكفي من الاحتياطي، فإن استدعاء التوسيع يُرجع13(تجاوز الإخراج). - لا توفر المكتبة عميل TSA HTTP؛ يقوم المتصل باسترداد TimeStampToken (عادةً 30-50 سطرًا من طلب TSP + HTTP POST مقابل، على سبيل المثال، FreeTSA أو DigiCert). في الأصل، يمكن لـ Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRأتمتة حقن CMS داخل المكتبة، ولكنه يُرجعCRYPT_E_INVALID_INDEX(0x80091008) للشكل SignedData المنفصل الذي يصدره PAdES، لذلك يتم استخدام مسار بايت CMS الذي يوفره المتصل بدلاً من ذلك.
v3.56.18 2026-05-23
- تُدمج سمة PAdES
signing-certificate-v2الآن الحقل الاختياريIssuerSerialالذي تحدده RFC 5035 (ESSCertIDv2). يتم تغليف الاسم المميّز للمُصدر لشهادة التوقيع فيGeneralName [4] EXPLICIT directoryNameCHOICE داخلGeneralNames، متبوعًا برقم تسلسل الشهادة كـ ASN.1 INTEGER. تأتي بايتات رقم التسلسل بترتيب endian صغير من Windows CryptoAPI (CRYPT_INTEGER_BLOB) ويتم عكسها إلى ترتيب endian كبير مع إضافة بايت الحشو الصحيح الموجب عند تعيين البت الأعلى، على غرار كيفية إصدار OpenSSL و BouncyCastle لنفس الحقل. - تجد أدوات التحقق التي تتحقق من اسم المُصدر + زوج رقم التسلسل مقابل مجموعة المرشحين الخاصة بها (خاصة EU DSS في الوضع الصارم) كلا المعرّفين في سمة signing-cert-v2؛ كان الإخراج السابق v3.56.17 يوفر فقط مرجع ⟦P000]].
- تكمل المساعدات الجديدة ASN.1
DER_IntegerFromLittleEndian(التي تتعامل مع ترتيب بايت Win32CRYPT_INTEGER_BLOB) وDER_ContextTagExplicit(التي تغلف حمولة في علامة سياقية مُنشأة خاصة) جهاز الترميزPDFlibASN1الصغير. توفر الإعلانات الجديدةCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTفيPDFlibCryptoAPIوصول مسار التوقيع إلى الحقول التي تم تحليلها من الشهادة.
v3.56.17 2026-05-23
- أصبح مسار التوقيع المدمج
ETSI.CAdES.detachedالآن يُنتج توقيعات PAdES-B-B متوافقة بنيويًا. تبني المكتبة بنفسها سمات CMS authenticated attributes —content-type(id-data) وsigning-certificate-v2من RFC 5035 / RFC 5816 مع تجزئة SHA-256 لشهادة التوقيع — وتُسلّمها إلىCryptSignMessageعبرrgAuthAttr. وبمجرد أن يصبح هذا الحقل غير NULL، تتوقف Windows CryptoAPI عن الحقن التلقائي لسمةsigning-timeالتي يحظرها PAdES (ETSI EN 319 142-1 v1.2.1 Table 1)، فيحملSignerInfoالناتج السمات المطلوبة فقط ولا شيء سواها. - تُوفر وحدة
PDFlibASN1الجديدة مُشفِّرًا مُصغّرًا مُركَّزًا بصيغة DER (X.690) — بادئة الطول، OCTET STRING، SEQUENCE، SET، OBJECT IDENTIFIER — يُستخدم لبناء قيمة سمةSigningCertificateV2. يتبع المُشفِّر القواعد القياسية لأقواس OID بترميز base-128 ويُهمل الحقل الاختياريhashAlgorithmعندما يكون مجرد تكرار للقيمة الافتراضية SHA-256، بما يطابق ما تُصدره OpenSSL و BouncyCastle. - يُوجّه
ApplySignatureالآن المسارETSI.CAdES.detachedعبر مسار raw-byte (نفس المسار المستخدم معadbe.pkcs7.detached) بدلًا من تغذية digest محسوب مسبقًا. تحسب CryptoAPI الآن سمةmessageDigestauthenticated attribute على المحتوى المُوقَّع فعلًا، وهو ما يتوقعه المحققون. - تُحترم SHA-384 و SHA-512 أيضًا عند بناء سمة signing-certificate-v2: يُصدَر حقل
hashAlgorithmمعAlgorithmIdentifierالمُطابق بدلًا من الاعتماد على القيمة الافتراضية. تُرفَّع SHA-1 بصمت إلى SHA-256 في هذا السياق لأن PAdES-B-B لا يُجيز SHA-1 (clause 6.2.1).
v3.56.16 2026-05-23
- يختار
SetSignProcessDigestAlgorithmالجديد خوارزمية message-digest للتوقيع:1= SHA-1 (deprecated)،2= SHA-256 (الإعداد الافتراضي الحديث)،3= SHA-384،4= SHA-512،0= auto (SHA-256 لكل SubFilter باستثناء المسار القديمadbe.pkcs7.sha1الذي يبقى على SHA-1 للحفاظ على التوافق العكسي على مستوى البايت). يحظر ETSI EN 319 142-1 v1.2.1 §6.2.1 استعمال MD5 ويُحيل إلى ETSI TS 119 312 لمجموعات التشفير المُوصى بها، لذا ينبغي لموقعي PAdES اختيار SHA-256 أو أقوى. - أُضيفت مُساعدات التجزئة
SHA256StreamRangeوSHA384StreamRangeوSHA512StreamRangeإلى جوارSHA1StreamRangeالقائم؛ ويستخدمها مسار التوقيع لحساب digest نطاق PDF ByteRange وفق الخوارزمية المختارة. أصبح من المضمون الآن توافق OIDSignerInfo.digestAlgorithmفي PKCS#7 مع بايتات التجزئة المكتوبة فعلًا (كان الكود السابق يُمرّر digest الخاص بـ SHA-1 دومًا بصرف النظر عن الخوارزمية المُتفاوض عليها). - أصبح
TPDFlibPFXFile.SignDataالآن يأخذ معاملDigestAlgorithmويختار OID الصحيح لكل زوج (SubFilter، خوارزمية):2.16.840.1.101.3.4.2.1/.2/.3لـ SHA-256/384/512 على SubFilter من نوع detached وcustom (RFC 5754)، وOIDs المُطابقة من عائلةsha256WithRSAEncryptionللمسار القديمadbe.pkcs7.sha1.
v3.56.15 2026-05-23
- تُحوّل الواجهة الجديدة
SetSignProcessDocTimeStampعملية توقيع إلى وضع PAdES Document Time-stamp وفقًا لـ ETSI EN 319 142-1 v1.2.1 §5.4.3. يحمل قاموس التوقيع الناتج/Type /DocTimeStampو/SubFilter /ETSI.RFC3161، ويُحذف منه المفاتيح الممنوعة/Mو/Reasonو/Locationو/ContactInfoو/Name، ويحجز عنصرًا نائبًا سداسيًا بحجم 8192 بايت (أو بحجم يُحدّده المستدعي) في/Contentsمن أجل TimeStampToken وفق RFC 3161 يُجلب خارجيًا. - يُفعَّل وضع التمرير (passthrough) تلقائيًا عند اختيار وضع DocTimeStamp لأن TimeStampToken يأتي من TSA خارجي. تُتجاهل بصمت استدعاءات
SetSignProcessInfoالتي تتم بعد التحول إلى وضع DocTimeStamp للحفاظ على توافق قاموس التوقيع مع المواصفة. - الحقن التلقائي لـ PAdES
/Extensions /ESICالذي أُضيف في v3.56.8 يُغطي بالفعل DocTimeStamp لأن SubFilter الخاص به يبدأ بـETSI.، لذلك يُعلن مستند Document Time-stamp PDF عن امتداد الكتالوج المطلوب دون الحاجة إلى ربط إضافي.
v3.56.14 2026-05-23
- واجهة API جديدة لتعزيز PAdES Document Security Store (DSS). تفتح
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringمستند PDF موقّعًا مسبقًا، وتُجهّزAddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPمادة التحقق المُرمّزة بـ DER، وتكتبEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringتحديثًا تزايديًا يحتوي على قاموس/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>كما تحدّده ETSI EN 319 142-1 v1.2.1 §5.4.2.2. هذه هي اللبنة الأساسية لترقية توقيع PAdES-B-B / B-T إلى التحقق طويل الأمد PAdES-B-LT. - تُعزّز عملية DSS تلقائيًا إدخال الكتالوج
/Extensions /ESICإلىExtensionLevel 1على الأقل عند إضافة مادة تحقق، بما يتوافق مع متطلب §5.6، وتدمج الشهادات و CRLs واستجابات OCSP الجديدة في مصفوفات/Certs//CRLs//OCSPsالموجودة عند الاستدعاءات المتكررة بحيث تتراكم المراجعات بدلًا من أن تُكتب فوق بعضها. GetPAdESDSSProcessResult/ReleasePAdESDSSProcessتُكمل دورة الحياة، بما يعكس سطح API الحالي لـSignProcess.
v3.56.8 2026-05-23
- توافق PAdES الأساسي: عند إنشاء توقيع باستخدام PAdES SubFilter (
ETSI.CAdES.detachedأوETSI.RFC3161)، يحصل كتالوج المستند تلقائيًا الآن على إدخال/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>الذي تتطلبه ETSI EN 319 142-1 v1.2.1 §5.6. يُضاف الإدخال عبر نفس التحديث التزايدي الذي يحمل التوقيع، ولا يخفض أبدًا/ExtensionLevelأعلى موجود، ويتبع المراجع غير المباشرة لـ/Extensionsأو/ESICعندما يخزّنها ملف PDF المصدر بالفعل ككائنات منفصلة. - علامة الامتداد المكافئة لـ Adobe التي تكتبها SetSignProcessCustomSubFilter لمستندات PDF المُنشأة عبر
TPDFlibأصبحت الآن/ADBE /BaseVersion /1.7 /ExtensionLevel 8(كانتExtensionLevel 5)، بما يتطابق مع الإعلان البديل الذي يُسمح لتوقيعات PAdES الأساسية باستخدامه؛ المستوى 5 كان يُغطي فقط ميزات ISO 32000-2 (forms / 3D / RichMedia) ولم يكن يُعرّف فعليًا امتدادات PAdES.
v3.56.13 2026-05-23
- عندما يكون SetPDFUAMode نشطًا ويتم حفظ المستند، فإن أي عنصر بنية L (list) يفتقر إلى سمة
ListNumberingصريحة يحصل الآن تلقائيًا على/O = List /ListNumbering = None. يتطلب ISO 14289-1 §7.6 أن يُعلن كل وسم L عن نمط الترقيم الخاص به؛ تنضم وظيفة الإصلاح في وقت الحفظ الجديدةApplyPDFUAListNumberingإلى عائلةApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNetالموجودة. - المؤلفون الذين يحتاجون إلى نمط قائمة محدد ينبغي أن يستمروا في استدعاء SetStructElemListNumbering قبل EndTag؛ لا يعمل الإصلاح التلقائي إلا عندما لا تكون أي سمة ListNumbering موجودة في وقت الحفظ، لذلك تُحفظ القيم الصريحة.
- رسالة التشخيص جانب الكاتب
LIST-NO-NUMBERING:Nأصبحت الآن تُلاحظ أن الإصلاح التلقائي سيُخفي المشكلة في وقت الحفظ، بحيث يفهم المستخدمون كلًا من السمة المفقودة وسلوك الإصلاح التلقائي.
v3.56.12 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على ثلاثة فحوصات جديدة من ISO 14289-1.
10031يُبلّغ عن تعليقات Link التي يحمل قاموس URI action الخاص بها/IsMap = true(محظور وفقًا لـ §7.18.5 ما لم تُقدَّم وظيفة مكافئة في مكان آخر من المحتوى؛ المؤلفون الذين لديهم حالة استخدام IsMap مشروعة يمكنهم كتم التشخيص بأنفسهم).10032يُبلّغ عن عناصر بنيةNoteالتي تفتقر إلى إدخال/ID— يتطلب §7.9 أن يُعلن كل وسم Note عن ID فريد.10033يُبلّغ عن أعداد الأزواج المكررة عندما يتشارك وسمان أو أكثر من Note نفس قيمة/ID. - يتم اكتشاف تصادمات معرّفات Note بجمع المعرفات في TStringList مرتبة والسير في الأزواج المتجاورة، لذلك مجموعة من ثلاث Notes تتشارك معرّفًا واحدًا تُحسب كزوجين مكررين.
- فحص URI action يسير عبر مصفوفة
/Annotsلكل صفحة، ويُصفّي حسب/Subtype /Link، ثم يفحص/A /S /URIوالقيمة المنطقية/IsMap. تُحلّ المراجع غير المباشرة في كل خطوة بحيث تتصرف قواميس action المنفصلة بنفس طريقة القواميس المضمّنة.
v3.56.11 2026-05-23
- يتطلب ISO 14289-1 §7.6 أن يحمل كل عنصر بنية L (list) سمة
ListNumberingصريحة.10030(جانب القارئ) وLIST-NO-NUMBERING:N(جانب الكاتب) يُبلّغان عن وسوم L التي تحذفها. مُجتاز جانب القارئ يفك ترميز كلا شكلي/A(قاموس سمة واحد، أو مصفوفة من القواميس مختلطة مع أرقام صحيحة للمراجعة) ويبحث عن مفتاح/ListNumberingبصرف النظر عن المالك. يفحص جانب الكاتبTPDFStructElem.Attributesبحثًا عن نفس الاسم عبر كل من قائمة البنية المُنتهية ومكدس الوسوم المفتوحة. - القيم الصالحة لـ
ListNumberingوفقًا لـ ISO 32000-1 Table 347 هيNoneوDiscوCircleوSquareوDecimalوUpperRomanوLowerRomanوUpperAlphaوLowerAlpha. التدقيق يفحص فقط وجود المفتاح، وليس القيمة التي تم اختيارها — كل وسم L يحتاج إلى واحدة من هذه القيم.
v3.56.10 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على قواعد ترميز TrueType من ISO 14289-1 §7.21.6.
10028يُبلّغ عن خطوط TrueType غير الرمزية التي لا يكون/Encodingالخاص بها (أو/BaseEncodingداخل قاموس Encoding)MacRomanEncodingولاWinAnsiEncoding.10029يُبلّغ عن خطوط TrueType الرمزية التي تحمل إدخال/Encodingعلى الإطلاق (محظور وفقًا للفقرة الرابعة من §7.21.6). - التمييز بين الرمزي وغير الرمزي يُحدد من البت 3 (قناع
4) في FontDescriptor/Flags، بإعادة استخدام مُساعدUAFontDescriptorSymbolicالموجود من الفئة الفرعية 4. الفقرة الأولى الكاملة من §7.21.6 (يجب أن يحتوي برنامج TrueType المضمّن على إدخالات cmap متطابقة) تتطلب تحليل برنامج خط TrueType ولا تزال معلقة؛ القواعد على مستوى القاموس المذكورة أعلاه هي الطبقة العملية التي يمكن لهذا التدقيق التحقق منها دون مُحلِّل TrueType. - قواعد مصفوفة Differences في §7.21.6 (أسماء glyph من AGL فقط، وجود Microsoft Unicode cmap) تبقى خارج النطاق للسبب نفسه — فهي تتطلب فحص برنامج الخط.
v3.56.9 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على فحص كامل لـ ISO 14289-1 §7.18.4.
10027يُبلّغ عن تعليقات Widget التي يُحَلّ/StructParentالخاص بها عبر/ParentTreeالخاصة بشجرة البنية لكنه لا ينتهي عند عنصر بنية بـ/S = Form. الفحص الجزئي السابق v3.56.7 (10026) كان يلتقط فقط Widgets التي تفتقر إلى/StructParentكليًا؛ الفحص الجديد يُكمل القاعدة بمتابعة مؤشر شجرة الأرقام والتحقق من الوسم الوجهة. - مُساعد
NumberTreeLookupالجديد يُنفّذ شكل شجرة الأرقام من ISO 32000-1 §7.9.7 (جذر/Numsمسطح،/Kidsمتوسطة محدودة بـ/Limits). يمكن للتدقيقات المستقبلية التي تحتاج إلى حل إدخالات صفحة/StructParentsأو تسميات/PageLabelsإعادة استخدامه. - التحقق من وسم Form لتعليق Widget يستخدم نموذجًا من طبقتين: Widget بدون
/StructParentيُبلّغ عنه كـ10026؛ Widget الذي يوجد/StructParentالخاص به لكنه لا يُحَلّ إلى/S = Formيُبلّغ عنه كـ10027الأكثر تحديدًا. هذا يتجنب العد المزدوج لنفس الانتهاك تحت كلا الرمزين.
v3.56.7 2026-05-23
- عندما يكون SetPDFUAMode نشطًا ويتم حفظ المستند، فإن أي إدخالات تعليق
TrapNetتُزال الآن تلقائيًا من مصفوفة/Annotsلكل صفحة. يحظر ISO 14289-1 §7.18.2 تعليقاتTrapNet؛ تنضم وظيفة الإصلاح في وقت الحفظ الجديدةApplyPDFUAStripTrapNetإلى عائلةApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshipالموجودة، بحيث تتوقف مستندات وضع PDF/UA عن إصدار بقاياTrapNetبصمت. - تحصل عملية تدقيق PDF/UA-1 على فحص جزئي لـ §7.18.4.
10026يُبلّغ عن تعليقات Widget التي تفتقر إلى/StructParent— Widget بدون/StructParentلا يمكن الوصول إليه من شجرة البنية وبالتالي لا يمكن تعشيشه داخل وسم بنيةForm. التحقق الهيكلي الكامل (حل/StructParentعبرParentTreeوتأكيد أن/Sللوالد هوForm) متروك لإصدار متابعة. - GetPDFUADiagnostics جانب الكاتب يحصل على المشكلة المطابقة
WIDGET-NO-STRUCTPARENT:N. رسالة TRAPNET-ANNOT الموجودة أصبحت الآن تُلاحظ أيضًا أن SetPDFUAMode يُزيل هذه تلقائيًا في وقت الحفظ.
v3.56.6 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على فحصين للتسلسل الهرمي للعناوين من ISO 14289-1 §7.4.2.
10024يُبلّغ عندما لا يكون عنصر العنوان الأول في ترتيب المستند H1 (أو H).10025يُبلّغ عن عدد قفزات مستوى العنوان في تسلسل تنازلي (مثل H1 متبوع بـ H3 دون H2). يتشارك كلا الفحصين في مرور واحد بترتيب الجذر-أولًا لشجرة البنية يفك ترميز أشكال/Kالمتداخلة (StructElem واحد، مصفوفة من StructElems / IndRefs / MCRs). - GetPDFUADiagnostics جانب الكاتب يحصل على المشكلة المطابقة
FIRST-HEADING-NOT-H1، بالتوافق مع10024القارئ. فحص HEADING-LEVEL-SKIP الموجود سابقًا جانب الكاتب أصبح لديه الآن مرافق يلتقط أيضًا مشاكل من نوع "أول عنوان كان H2".
v3.56.5 2026-05-23
- عندما يكون SetPDFUAMode نشطًا ويتم تشفير المستند لاحقًا، فإن مفتاح أذونات التشفير (
/Pفي قاموس التشفير) يحصل الآن تلقائيًا على البت 10 (قناع$200، "Extract text and graphics in support of accessibility") مُعيَّنًا، حتى عندما لا يُضمِّن المستدعيppCanCopyAccessفيTPDFExtraPermissionsالمُمرَّر إلى Encrypt. يتطلب ISO 14289-1 §7.16 أن يسمح كل ملف مشفّر متوافق باستخراج accessibility، وإلا فإن البت من السهل إغفاله. البت دائمًا آمن للتعيين — فهو يمنح فقط وصولًا إضافيًا للتقنية المساعدة، وليس لمسارات الاستخراج الأخرى. - GetPDFUADiagnostics جانب الكاتب يحصل على مشكلة
ENCRYPT-NO-ACCESSجديدة تُطلق عندما يكون PDFUAMode مفعّلًا وبت/P10 في قاموس التشفير غير مُعيَّن. هذا يلتقط حالة الحافة لترتيب الاستدعاء التي استدعى فيها المستخدمEncrypt()أولًا و SetPDFUAMode بعد ذلك فقط — يُخبر التشخيص المستخدم أن يستدعيEncrypt()مرة أخرى بحيث يُعاد إصدار قاموس التشفير بـ/Pالمصحّح.
v3.56.4 2026-05-23
- GetPDFUADiagnostics جانب الكاتب يحصل على خمسة فحوصات جديدة من ISO 14289-1 بحيث يلتقط تدقيق المستند في الذاكرة نفس الانتهاكات التي يلتقطها تدقيق CheckFileCompliance ComplianceTest=2 جانب القارئ.
SUSPECTS-TRUEيُعلّم MarkInfo/Suspects=true (§7.1: ملفات PDF/UA المتوافقة تتطلب Suspects=false).ROLEMAP-STANDARD-REMAP:Nيُعلّم استدعاءات AddRoleMap التي ستعيد ربط وسم بنية قياسي — يحظر §7.1 إعادة ربط الوسوم القياسية.DC-TITLE-MISSINGيُعلّم XMP dc:title فارغًا (منفصل عن DOCINFO-TITLE-MISSING، الذي يفحص /Info /Title).TRAPNET-ANNOT:Nيُعلّم تعليقات TrapNet (§7.18.2 يحظرها).ANNOT-PAGE-NO-TABS-S:Nيُعلّم الصفحات الحاملة لتعليقات والتي لا يكون /Tabs في قاموس الصفحة الخاص بها /S (§7.18.3 يتطلب ترتيب tab وفقًا لشجرة البنية على تلك الصفحات). - تدقيقات PDF/UA-1 جانب الكاتب وجانب القارئ أصبحت الآن في تكافؤ تقريبًا: كل مشكلة يثيرها تدقيق جانب القارئ على ملف محفوظ يمكن الوصول إليها أيضًا من التشخيص في الذاكرة، باستثناء اصطلاحات التنسيق لكل دالة (نص مفصول بأسطر جديدة مقابل قائمة سلسلة برموز NNNNN).
v3.56.3 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على فحوصات الخطوط من §7.21 الخاصة بها.
10020يُبلّغ عن أي خط ليس من Standard-14 يفتقر FontDescriptor الخاص به إلىFontFile/FontFile2/FontFile3(§7.21.4.1: كل خط مُعروض يجب أن يُضمّن برنامجه).10021يُبلّغ عن CIDFontType2 descendants دون إدخال/CIDToGIDMap(§7.21.3.2).10022يُشير إلى خطوط Standard 14 (Helvetica و Times و Courier و Symbol و ZapfDingbats والمتغيرات bold / oblique) المُشار إليها دون برنامج مضمّن — توضح §7.21.4 NOTE 5 أنه لا يوجد إعفاء من التضمين لهذه الخطوط.10023يُبلّغ عن الخطوط التي تفتقر إلى CMap/ToUnicodeولا تتطابق مع قائمة الإعفاء في §7.21.7 (ترميزات MacRoman / MacExpert / WinAnsi المعرّفة مسبقًا، Type 0 مع Adobe-GB1 / CNS1 / Japan1 / Korea1 character collections، TrueType غير الرمزي). - الخطوط المركّبة Type 0 تُفحص على كلتا الطبقتين:
/ToUnicodeعلى قاموس Type 0 الأصل نفسه، و embedding //CIDToGIDMapعلى أول CIDFont descendant. خطوط Type 3 تتخطى فحص embedding (glyphs الخاصة بها هي CharProcs مضمّنة) لكنها لا تزال تُشارك في فحص/ToUnicode. - مُساعدات PDFlibPDFA لعمل خط مشابه لم تتم مشاركتها عمدًا — نصف دزينة من الإجراءات القصيرة (إزالة بادئة المجموعة الفرعية، جدول أسماء Standard-14، وجود FontFile، علم Symbolic) مُكرّرة محليًا كمُساعدات
UA*بحيث يمكن أن يستمر تدقيق PDF/A في التطور دون كسر PDF/UA، والعكس بالعكس.
v3.56.2 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على خمسة فحوصات إضافية من ISO 14289-1 تُغطي التعليقات والملفات المضمّنة والمحتوى الاختياري.
10015يُبلّغ عن تعليقات Link التي تفتقر إلى وصف بديل غير فارغ في/Contents(§7.18.5) بحيث يمكن لقارئات الشاشة إعلان أهداف الروابط.10016و10017يُشيران إلى قواميس FileSpec للملفات المضمّنة المفتقرة إلى مفاتيح اسم الملف المطلوبة/Fأو/UF(§7.11).10018يُشير إلى قواميس تكوين المحتوى الاختياري التي تحذف سلسلة نصية غير فارغة/Name(§7.10).10019يُشير إلى قواميس تكوين المحتوى الاختياري التي تحتوي على مفتاح/ASالممنوع (§7.10). - مرور التعليق لكل صفحة الذي شغّل بالفعل فحوصات TrapNet و
/Tabs /Sأصبح الآن يجمع أيضًا بيانات Link //Contentsفي نفس التمريرة، مما يُبقي التدقيق O(N) على عدد الكائنات.
v3.56.1 2026-05-23
- تحصل عملية تدقيق PDF/UA-1 على خمسة فحوصات جديدة من ISO 14289-1.
10010يتحقق من إذن استخراج إمكانية الوصول (البت 10 من مفتاح التشفير/P) على الملفات المشفّرة (§7.16).10011يكتشف نماذج XFA الديناميكية عبر عنصر<dynamicRender>required</dynamicRender>داخل حزمة XFA XDP (§7.15).10012يُعلّم Form XObjects التي تحمل إدخال/Ref— reference XObjects محظورة (§7.20).10013يُعلّم تعليقاتTrapNet(§7.18.2).10014يسير في كل صفحة ويُبلّغ عن أي صفحة تحمل تعليقات لا يُعيّن قاموس الصفحة الخاص بها/Tabs /S(§7.18.3) بحيث يتبع ترتيب tab شجرة البنية. - تتدفق جميع الرموز الخمسة الجديدة عبر نفس زوج المعالج CheckFileCompliance + GetStringListItem الذي أضافه الإصدار السابق — لا يوجد سطح API عام جديد.
v3.56.0 2026-05-23
- تدقيق جديد جانب القارئ
CheckCompliancePDFUAيتحقق من ملف PDF خارجي مقابل ISO 14289-1 (PDF/UA-1). يُكمّل فحص GetPDFUADiagnostics جانب الكاتب الموجود بقبول أي مدخل PDF (الإخراج الخاص، إخراج الماسح الضوئي، محتوى الطرف الثالث) وإدراج انتهاكات PDF/UA-1 بنفس الطريقة التي تُبلّغ بها CheckFileCompliance بالفعل عن مشاكل PDF/A. - CheckFileCompliance تقبل الآن
ComplianceTest = 2لتشغيل تدقيق PDF/UA-1 الجديد. اختبار PDF/A تحتComplianceTest = 1لم يتغير، وقائمة المشاكل لا تزال تتدفق عبر زوج المعالج GetStringListCount / GetStringListItem الموجود. - التقطيع الأول يُغطي بوابات توافق PDF/UA-1 الأساسية من §5 (تعريف XMP
pdfuaid:part) و §7.1 (تدفق/Metadataالكتالوج، علامة tagged-PDF، شجرة البنية، تفضيل عنوان العارض، لغة المستند، XMPdc:title، قيمة/Suspects، وحظر إعادة ربط وسوم البنية القياسية). يتم إصدار ثمانية رموز تشخيصية —10001إلى10009— للحفاظ على النطاق الرقمي منفصلًا بصريًا عن رموز PDF/A00xxx. - بنود PDF/UA-1 الأعمق (الأمان، التعليقات، XObjects، subsetting الخط) متابَعَة لإصدارات تصحيح متابعة فوق نفس إطار التدقيق.
v3.55.6 2026-05-22
- كل حزمة XMP مُولَّدة حديثًا تحمل الآن خاصية xmpMM:InstanceID بالتنسيق uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. يُولَّد المعرّف عبر Win32 CoCreateGuid ويُعطي كل مستند مُنتج بصمة فريدة ومستقلة عن الإصدار كما توصي ISO 19005-1 §6.7.2 (Cor2) وأدلة أفضل ممارسات PDF/A. لا تتأثر إصدارات غير Windows (حيث تبقى حزمة XMP فارغة).
- namespace xmpMM (http://ns.adobe.com/xap/1.0/mm/) أصبح الآن جزءًا من SelectionNamespaces لحزمة XMP؛ مُساعدا SetXMPMM و GenerateInstanceID الجديدان يدعمان إصدار InstanceID ويُوفّران الأساس لدعم xmpMM:History / xmpMM:DerivedFrom المستقبلي.
- مخطط وصف Extension Schema الخاص بـ PDF/A (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) لم يُضف في هذا الإصدار. تأليف مخطط امتداد مخصص يتطلب بناء خاصية bag / seq / مُهيكلة متعدد الخطوات يتجاوز شكل SetDublinCore / SetXMPBasic الحالي؛ يُتابَع العمل لإصدار مستقبلي. المستندات التي تحتاج إلى إعلان خصائص XMP مخصصة تستمر في الرجوع إلى مسار LoadFromString.
v3.55.5 2026-05-22
- مستندات PDF/A أصبح لديها الآن أعلام /F للتعليقات الخاصة بها مُطبَّعة في وقت الحفظ. يتطلب ISO 19005-1 §6.5.3 أن يكون البت Print هو 1 وأن تكون البتات Hidden / Invisible / NoView هي 0 على كل تعليق؛ يُطبّق الكاتب الآن هذا القناع في وقت الحفظ بحيث لا يضطر المستدعون إلى تذكّر تخطيط البت. حالة /Subtype /Popup مُعفاة — popups هي أطفال لتعليقات أخرى وتقليديًا لا تُطبَع.
- علم AcroForm /NeedAppearances يُفرض الآن قسرًا على false في وقت الحفظ عندما يكون المستند في أي وضع PDF/A. يتطلب ISO 19005-1 §6.9 أن يكون العلم غائبًا أو false؛ سابقًا كان الكاتب يترك أيًا كانت القيمة التي عيّنها المستدعي، مما أنتج مستندات تطلب من العارض إعادة توليد المظاهر في وقت الفتح وانتهكت بصمت المواصفة عندما عيّنها المستدعي إلى true. يعمل الإصلاح أيضًا للمستندات التي كان العلم غائبًا فيها سابقًا — يُصدر الكاتب /NeedAppearances false صريحًا لترك أي غموض للمُحقّق.
v3.55.4 2026-05-22
- AddStandardFont ترفض الآن الاستدعاءات في وضع PDF/A. يلغي ISO 19005-1 §6.3.4 إعفاء مرجع PDF "Standard 14 may be unembedded": كل برنامج خط في ملف متوافق يجب أن يُضمّن، والمكتبة لا تحزم خطوط Standard 14. تعيد الواجهة الأمامية 0 بصمت؛ ينبغي للمستدعين التحول إلى AddTrueTypeFont أو AddType1Font مع ملف خط حقيقي.
- AddTrueTypeFont تُرقّي الآن بصمت Embed=0 (لا تضمين) إلى Embed=1 (تضمين الخط الكامل) عندما يكون وضع PDF/A نشطًا. مسار المرجع غير المضمّن أنتج PDF يعتمد على fallback الخط في العارض إلى تثبيت Arial / Times / Courier للنظام، مما ينتهك ISO 19005-1 §6.3.4. لا يتأثر المستدعون الموجودون الذين طلبوا التضمين (Embed=1 أو 2).
- فحص توافق /Encoding لـ TrueType غير الرمزي (ISO 19005-1 §6.3.7 Cor2 يتطلب WinAnsi أو MacRoman كاسم ترميز أو BaseEncoding، دون /Differences) لم يُضف في هذا الإصدار لأن المكتبة بالفعل تُصدر /WinAnsiEncoding لمجموعات TrueType الفرعية غير الرمزية، والتطبيق الأعمق سيتطلب تتبع dispatch بين الرمزي وغير الرمزي عبر مسار subset. CheckCompliancePDFA 00034 / 00035 (المُضافان في v3.51.0) يُعلّمان أي إخراج غير متوافق في وقت التحقق.
v3.55.3 2026-05-22
- قواميس خط CIDFontType2 المدعومة بـ TrueType تحمل الآن /CIDToGIDMap /Identity صراحةً. يتطلب ISO 19005-1 §6.3.3.2 (Cor2) أن يكون الإدخال موجودًا لكل Type 2 CIDFont مضمّن؛ يسمح مرجع PDF بالافتراضي Identity الضمني، لكن PDF/A يطلب قيمة صريحة. كان الكاتب يحذف المفتاح كليًا سابقًا، مما يُسبّب أن يُعلّم veraPDF (و CheckCompliancePDFA 00033 المُضاف في v3.51.0) الملف. اسم /Identity يتطابق مع تخطيط GID-as-CID الذي كان الكاتب يُنتجه ضمنيًا بالفعل، لذلك تُعرض المستندات الموجودة بشكل متطابق.
- FontDescriptor /CharSet (لمجموعات Type 1 الفرعية) و /CIDSet (لمجموعات CIDFont الفرعية) تبقى TODO؛ سيحتاج الكاتب إلى تتبع أسماء glyph / CIDs التي انتهت في المجموعة الفرعية لملئها بدقة. CheckCompliancePDFA 00031 و 00032 (المُضافان أيضًا في v3.51.0) سيُعلّمان الغياب بحيث يرى المستخدمون المشكلة في وقت التحقق.
v3.55.2 2026-05-22
- AddImageDirectFromString ترفض الآن الفلاتر غير المتوافقة مع PDF/A عند نقطة الدخول. تمرير Filter = 'LZWDecode' يُرفض لكل جزء من PDF/A (ISO 19005-1 §6.1.10 بالإضافة إلى القواعد المكافئة في ISO 19005-2 / -3). تمرير Filter = 'JBIG2Decode' أو 'JPXDecode' يُرفض لـ PDF/A-1 (الوضعان 1 و 2). PDF/A-2 و PDF/A-3 يقبلان JPXDecode تحت ISO 19005-2 §6.2.8.3 بقيود فرعية للمواصفة (عدد قنوات اللون، توحيد bit-depth، متطلبات METH/APPROX) لا تفرضها بوابة جانب الكاتب — المستدعون في تلك الأوضاع لا يزال عليهم التأكد من أن تدفق JPEG 2000 متوافق. تُعيد الواجهة الأمامية 0 بصمت عندما يُطلب فلتر محظور.
- مدخلات TIFF و PNG و JPEG و JPEG 2000 المُحمَّلة عبر AddImageFromFile / AddImageFromStream لا تتأثر: يفك المُستورد ضغط بايتات المصدر ويُعيد ترميزها بـ FlateDecode (أو DCTDecode لحمولات JPEG)، لذلك لا ينتشر مدخل LZW أبدًا إلى سلسلة Filter الإخراج. مُحقّق CheckCompliancePDFA المُضاف في v3.50.0 (00004) و v3.52.0 (00022، 00023) يُوفّر خط دفاع ثانٍ في وقت التحقق لأي مسار غير مباشر لا يزال يُمرّر فلترًا محظورًا إلى الإخراج.
v3.55.1 2026-05-22
- AddLinkToHideField ترفض الآن الاستدعاءات في وضع PDF/A. الإصدار السابق ترك تعليقًا يدّعي أن الإجراء متوافق مع PDF/A، لكن ISO 19005-1 Cor2 أضاف /Hide إلى قائمة الإجراءات الممنوعة (§6.6.1)، وترث ISO 19005-2 / -3 القيد. تُعيد الواجهة الأمامية 0 بصمت عند الاستدعاء في وضع PDF/A، بما يتطابق مع AddLinkToJavaScript و AddLinkToImportData.
- AddSWFAnnotationFromFile ترفض الآن الاستدعاءات في وضع PDF/A. تعليقات SWF / RichMedia تُغلّف وسائط Flash المحظورة بواسطة ISO 19005-1 §6.5.2 (لا أنواع Movie / Sound فرعية) وتُعزّزها ISO 19005-2 §6.3.1 (لا 3D / Sound / Screen / Movie). تُعيد الواجهة الأمامية 0 بصمت.
- AddEmbeddedFile و AddLinkToEmbeddedFile ترفضان الآن الاستدعاءات في أوضاع PDF/A-1 و PDF/A-2. يحظر ISO 19005-1 §6.1.11 /EF، وتقبل ISO 19005-2 §6.8 فقط ملفات PDF/A مضمّنة؛ بدلًا من التحقق من PDF/A-ness التكراري للحمولة المُرفقة، يرفض الكاتب ببساطة الاستدعاء في هذه الأوضاع. PDF/A-3 (SetPDFAMode 5 أو 6) يبقى مسموحًا — انظر v3.55.0 لحقن /AFRelationship التلقائي.
- SetOpenActionMenu ترفض الآن قيم MenuItem خارج قائمة السماح {NextPage, PrevPage, FirstPage, LastPage} عندما يكون المستند في وضع PDF/A. يُقيّد ISO 19005-1 §6.6.1 الإجراءات المُسمّاة بتلك المجموعة، لذلك كانت الواجهة سابقًا تُنتج بصمت قواميس Open-Action غير متوافقة Find / Print / FullScreen كان veraPDF سيرفضها.
- NewOptionalContentGroup ترفض الآن الاستدعاءات في أوضاع PDF/A-1 (SetPDFAMode 1 أو 2). يحظر ISO 19005-1 §6.1.13 مفتاح الكتالوج /OCProperties. PDF/A-2 (الأوضاع 3/4) و PDF/A-3 (الأوضاع 5/6) يقبلان المحتوى الاختياري بالقيود في §6.9 الخاصة بكل منهما، لذلك تُطلق البوابة فقط لـ PDF/A-1.
v3.55.0 2026-05-22
- مستندات PDF/A-3 تتلقى الآن تلقائيًا إدخال /AFRelationship على كل ملف مضمّن. سابقًا كان ملف PDF/A-3 المُنشأ بالمكتبة يمكن أن يفشل التحقق لأن ISO 19005-3 Annex E, Table E.1 يتطلب AFRelationship على كل مواصفة ملف مضمّن. يحقن الكاتب الآن القيمة الافتراضية المُكوَّنة ('Unspecified' خارج الصندوق) على أي قاموس FileSpec يفتقر إلى الإدخال في وقت الحفظ، بما يعكس حقن AFRelationship التلقائي لـ PDF/UA المُقدّم سابقًا. فقط أوضاع PDF/A-3 (SetPDFAMode 5 = PDF/A-3b أو 6 = PDF/A-3a) تُطلق الحقن التلقائي؛ PDF/A-1 و PDF/A-2 لا يزالان يرفضان الملفات المضمّنة كليًا وفقًا لـ ISO 19005-1 §6.1.11 و ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship هي واجهة API جديدة تتجاوز القيمة الافتراضية التي يكتبها الكاتب عندما يفتقر ملف مضمّن إلى إدخال /AFRelationship. تقبل قيم ISO 19005-3 Table E.1: 'Source' (الملف المضمّن هو المادة المصدرية التي أنتجت محتوى PDF)، 'Data' (الملف هو البيانات المُهيكلة الداعمة لجدول أو رسم بياني مرئي)، 'Alternative' (تقديم بديل مثل نسخة صوتية)، 'Supplement' (تمثيل تكميلي مثل صيغة MathML لمعادلة)، 'Unspecified' (لا يمكن توصيف العلاقة بما سبق)، أو أي اسم من الفئة الثانية مُسجّل. السلسلة الفارغة تعيد الضبط إلى 'Unspecified'. التجاوزات لكل ملف تبقى متاحة عبر SetEmbeddedFileAFRelationship.
- الواجهات الجديدة مكشوفة على واجهة Delphi كـ TPDFlib.SetPDFA3DefaultAFRelationship وعبر DLL كـ DLSetPDFA3DefaultAFRelationship (PWideChar) و DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
v3.54.0 2026-05-22
- LoadOutputIntentProfile هي واجهة API جديدة تستبدل ملف تعريف OutputIntent sRGB المحزم بملف تعريف ICC خارجي مُحمَّل من القرص. مطلوبة عند إنتاج مستندات PDF/A في فضاءات ألوان DeviceCMYK أو DeviceGray، لأن المكتبة لا تشحن سوى ملف تعريف sRGB. الاستخدام النموذجي هو استدعاء SetPDFAMode أولًا (الذي يُهيّئ هيكل OutputIntent)، ثم LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK') لتبديل بايتات ملف التعريف ووسم المستند بفضاء اللون الجديد. تُعيد 1 عند النجاح، 0 عند عدم العثور على الملف أو فضاء ألوان غير معروف. مكشوفة على واجهة Delphi كـ TPDFlib.LoadOutputIntentProfile وعبر DLL كـ DLLoadOutputIntentProfile (صيغة PWideChar) و DLLoadOutputIntentProfileA (صيغة PAnsiChar). يسمح ISO 19005-1 §6.2.2 بأي ملف تعريف ICC مُسجّل في تدفق DestOutputProfile.
- SetFillColorCMYK و SetTextColorCMYK و SetTextHighlightColorCMYK و SetTextUnderlineColorCMYK و AddSeparationColor و SetFillColorSep و SetLineColorSep و SetTextHighlightColorSep و SetTextColorSep تنجح الآن في وضع PDF/A عندما يكون ملف تعريف OutputIntent للمستند DeviceCMYK. سابقًا كانت هذه الواجهات ترفض كل استدعاء في وضع PDF/A بصرف النظر عن OutputIntent، مما منع إنتاج مستندات CMYK المتوافقة. البوابة الآن هي PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK'، بما يتطابق مع قاعدة ISO 19005-1 §6.2.3.3 بأن DeviceCMYK مسموح به عندما يستخدم OutputIntent ملف تعريف CMYK، و ISO 19005-1 §6.2.3.4 التي تسمح ببدائل Separation التي يكون فضاء اللون الأساسي الخاص بها متوافقًا أيضًا.
- SetTextShader تنجح الآن في وضع PDF/A عندما يكون ملف تعريف OutputIntent إما DeviceRGB أو DeviceCMYK. الـ Shaders نفسها ليست محظورة بواسطة PDF/A؛ المُحقّق (جانب القراءة) يتحقق من أن فضاء اللون الداخلي للـ shader يتطابق مع OutputIntent. سلوك الرفض الصارم السابق رفض استخدام shader المتوافق.
- إلغاء حظر CMYK / Separation / Shader يعتمد على وسم OutputIntentColorSpace الذي يُعيّنه AddOutputIntent و LoadOutputIntentProfile (المُقدَّم في v3.53.0). استدعاء SetPDFAMode دون LoadOutputIntentProfile يُبقي فضاء اللون كـ DeviceRGB (ملف تعريف sRGB المحزم)، لذلك لا تزال استدعاءات CMYK ترفض افتراضيًا — السلوك الجديد opt-in عبر LoadOutputIntentProfile.
v3.53.0 2026-05-22
- قاموس OutputIntent يحمل الآن حقول هيكل PDF/A الكاملة الموصى بها بواسطة ISO 19005-1 §6.2.2 و Adobe Acrobat preflight: /OutputCondition (وصف شرط اللون قابل للقراءة البشرية)، /Info (نص تعريف مطوّل)، و /RegistryName (URL السجل، يُعيَّن افتراضيًا إلى http://www.color.org). تُعيَّن القيم افتراضيًا إلى "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" لمواقع استدعاء الوسيطة الواحدة القديمة؛ الـ AddOutputIntent overload الجديدة تأخذ الحقول المخصصة الأربعة مباشرة بحيث يمكن للمستدعين ملؤها لظروف الألوان الخاصة بهم.
- AddOutputIntent تكتسب overload جديد بخمس وسيطات: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). صيغة الوسيطة الواحدة القديمة تستمر في العمل دون تغيير؛ تُفوّض الآن إلى الـ overload الجديد بافتراضيات sRGB. وسيطة ColorSpace تختار أيضًا عدد مكوّنات /N المكتوبة في قاموس ملف تعريف ICC المضمّن (3 لـ DeviceRGB، 4 لـ DeviceCMYK، 1 لـ DeviceGray)؛ ملف التعريف المضمّن نفسه يبقى تدفق sRGB المحزم حتى تُشحن واجهة LoadOutputIntentProfile القادمة في v3.54.0.
- TPDFDocument تُعرّض OutputIntentColorSpace كخاصية قراءة/كتابة تتعقّب فضاء اللون لآخر استدعاء AddOutputIntent. هذا يصبح شرط البوابة لقيود CMYK / Separation / Shader جانب الكاتب في v3.54.0، حيث ستُرفض الآن واجهات الألوان التي ترفض اليوم كل استدعاء في وضع PDF/A فقط عندما يكون فضاء اللون غير متطابق مع OutputIntent.
v3.52.0 2026-05-22
- CheckCompliancePDFA تُدقّق الآن التعليقات وحالة الرسوميات والإجراءات و form XObjects، مكملةً تغطية مُحقّق جانب القراءة لـ PDF/A لفصول ISO 19005-1 6.2-6.6 وقواعد PDF/A-2/-3 التفاضلية المكافئة. يُبلّغ المُحقّق عن 14 فئة مشكلة جديدة (00050-00067): أنواع تعليق فرعية ممنوعة (00050؛ ISO 19005-1 §6.5.2 يحظر FileAttachment / Sound / Movie لـ PDF/A-1، و ISO 19005-2 §6.3.1 يحظر 3D / Sound / Screen / Movie لـ PDF/A-2 و PDF/A-3)، تعليق /CA غير 1.0 (00051؛ §6.5.3)، تعليق /F مفقود أو بـ Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052؛ §6.5.3، مع إعفاء /Subtype /Popup)، تعليق /AA (00054؛ §6.6.2)، قاموس مظهر تعليق بمفاتيح غير /N أو قيمة /N غير متوافقة (00055؛ §6.5.3 Cor2)، تعليق Widget بـ /A (00056؛ §6.9)، ExtGState /TR (00058؛ §6.2.8)، ExtGState /TR2 غير /Default (00059؛ §6.2.8)، وفي PDF/A-1 فقط: ExtGState /SMask غير /None (00061؛ §6.4)، /BM غير Normal أو Compatible (00062؛ §6.4)، /CA أو /ca غير 1.0 (00063؛ §6.4).
- تدقيق الإجراء في أي مكان (00064، 00065) يحلّ محل فحص OpenAction-only من v3.50.0 بمسح كامل يُعلّم قيم /S الإجرائية الممنوعة (Launch، Sound، Movie، ResetForm، ImportData، JavaScript، Hide، SetState، NOP، Trans، GoTo3DView، Rendition، SetOCGState) والإجراءات المُسمّاة التي تكون /N الخاصة بها خارج {NextPage, PrevPage, FirstPage, LastPage} بصرف النظر عن مكان وجود الإجراء (تعليق /A، widget /A، outline /A، catalog /OpenAction، إلخ). ISO 19005-1 §6.6.1.
- تدقيق XObject (00066، 00067) يُبلّغ عن PostScript و Reference XObjects، بالإضافة إلى المفاتيح الممنوعة على Form XObjects (/OPI، /PS، /Subtype2 = /PS) و Image XObjects (/Alternates، /OPI، /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
v3.51.0 2026-05-22
- CheckCompliancePDFA تُدقّق الآن توافق الخط وفضاء الألوان بالإضافة إلى الفحوصات الهيكلية المُضافة في v3.50.0. يُبلّغ المُحقّق عن تسع فئات مشكلة جديدة: برنامج خط واحد على الأقل غير مضمّن (00030؛ يتطلب ISO 19005-1 §6.3.4 تضمين كل برنامج خط، بما في ذلك بدائل Standard 14)، مجموعة Type 1 فرعية مفقودة /CharSet في FontDescriptor الخاص بها (00031؛ §6.3.5)، مجموعة CIDFont فرعية مفقودة /CIDSet (00032؛ §6.3.5)، CIDFontType2 مفقود /CIDToGIDMap (00033؛ §6.3.3.2 Cor2)، TrueType غير رمزي بـ /Encoding غير متوافق (00034؛ §6.3.7 Cor2 يتطلب WinAnsi/MacRoman مباشرة أو كـ BaseEncoding، دون /Differences)، TrueType رمزي لا يزال يحمل /Encoding (00035؛ §6.3.7 Cor2)، خط واحد على الأقل مفقود /ToUnicode في مستندات PDF/A-Na أو PDF/A-Nu (00036؛ إعفاء أربع فئات في §6.3.8 مُطبَّق)، فضاء ألوان ICCBased لا يُضمِّن تدفق ملف التعريف الخاص به (00037؛ §6.2.3.2)، وملف يستخدم كلًا من DeviceRGB و DeviceCMYK (00038؛ §6.2.3.3 يحظر المزج).
- فحص /ToUnicode (00036) محدد النطاق بمستويات التوافق A و U لأن تلك المستويات فقط تتطلب ربط Unicode وفقًا لـ ISO 19005-1 §6.3.8 و ISO 19005-2 §6.2.11.7. ملفات المستوى B (PDF/A-1b، PDF/A-2b، PDF/A-3b) غير مُعلَّمة. إعفاء الفئات الأربع يعترف بالترميزات المعرّفة مسبقًا (MacRomanEncoding، MacExpertEncoding، WinAnsiEncoding)، Standard 14 Type 1 BaseFonts كوكيل عن خطوط Adobe Standard Latin / Symbol glyph-name، وخطوط Type 0 التي تستخدم CIDFont الفرعية الخاصة بها سجلات Adobe-GB1 أو Adobe-CNS1 أو Adobe-Japan1 أو Adobe-Korea1.
- تدقيق الخط يسير عبر كل قاموس Font، ويُصنّفه حسب Subtype (Type1، MMType1، TrueType، Type3، Type0 مع CIDFontType0 أو CIDFontType2 الفرعي)، ثم يُرسل الفحوصات ذات الصلة. خطوط Type 0 المركّبة تُفوّض فحوصات embedding و subset إلى CIDFont الفرعية الخاصة بها بينما تُبقي /ToUnicode على غلاف Type 0. اكتشاف المجموعة الفرعية يستخدم اصطلاح بادئة الستة أحرف الكبيرة القياسية.
v3.50.0 2026-05-22
- CheckCompliancePDFA تُبلّغ الآن عن 15 مشكلة عدم توافق PDF/A إضافية كان المُحقّق يفوّتها سابقًا: مفقود مصفوفة trailer /ID (00013)، مفقود تدفق /Metadata في كتالوج المستند (00014)، /Filter مُطبَّق على تدفق /Metadata (00015)، قواميس التدفق التي تشير إلى ملفات خارجية عبر /F أو /FFilter أو /FDecodeParms (00016)، ملفات مضمّنة مُعلنة عبر /EF في أي قاموس مواصفة ملف أو عبر إدخال شجرة الأسماء /EmbeddedFiles في مستندات PDF/A-1 (00017، 00018)، /OpenAction يُشير إلى نوع إجراء محظور (00019)، قواميس إجراءات إضافية /AA في كتالوج المستند أو أي صفحة (00020، 00021)، فلاتر JBIG2Decode أو JPXDecode في مستندات PDF/A-1 (00022، 00023)، فلاتر Crypt التي يكون /Name الخاص بها غير /Identity (00024)، /Requirements في كتالوج المستند (00025)، /Perms بمفاتيح غير /UR3 و /DocMDP (00026)، و /AcroForm /NeedAppearances مُعيَّن إلى true (00027). يُعلّم المُحقّق الآن أنواع إجراءات /OpenAction الممنوعة في الكتالوج (/Launch، /Sound، /Movie، /ResetForm، /ImportData، /JavaScript، /Hide، /SetState، /NOP، /Trans، /GoTo3DView، /Rendition، /SetOCGState) وقيم /N للإجراءات المُسمّاة خارج قائمة السماح {NextPage, PrevPage, FirstPage, LastPage} وفقًا لـ ISO 19005-1 §6.6.1.
- مُحلّل PDFAID يقبل لاحقة التوافق U (PDF/A-2U، PDF/A-3U) إلى جانب متغيرات A و B الموجودة، لذلك لم تعد CheckCompliancePDFA تُثير تحذير زائف "00005 PDFA Mark NOT Found or invalid" عند مسح ملف PDF/A-2U أو PDF/A-3U المُنتج بأداة أخرى. مستويات توافق ربط Unicode المُضافة في ISO 19005-2:2011 معترف بها الآن من قبل المُحقّق.
- الفحوصات الخاصة بالفلاتر (JBIG2Decode، JPXDecode) وفحوصات الملفات المضمّنة (/EF، /EmbeddedFiles) تبقى محددة النطاق بـ PDF/A-1 لأن ISO 19005-2 §6.2.8.3 و §6.8 يُرخيان صراحة تلك القيود لـ PDF/A-2 و PDF/A-3. فحوصات بنية المستند (/Metadata، /AcroForm /NeedAppearances، /OpenAction، /AA، /Requirements، /Perms) تُطبَّق على كل جزء من PDF/A.
v3.49.0 2026-05-21
- تُنشئ AddLinkToImportData تعليق Link يكون action الخاص به هو إجراء استيراد بيانات PDF (/S /ImportData) الذي يملأ حقول AcroForm في المستند من ملف FDF خارجي عندما ينقر المستخدم على الرابط (ISO 32000-1 §12.6.4.8, Table 198). يُشار إلى المعامل FileName كقاموس filespec، وفقًا لنفس قواعد تطبيع المسار المستخدمة في AddLinkToFile / AddLinkToFileEx (يتم تحويل الشرطات المائلة العكسية إلى شرطات مائلة أمامية وفقًا لـ ISO 32000-1 §7.11.2.1). البت 0 من Options يتحكم في إظهار الحد المرئي، والبتات 1–3 تختار وضع تمييز الرابط (Invert، Outline، Push)، بما يتطابق مع اصطلاحات AddLinkTo* الحالية. PDF 1.4 أو أحدث. غير مسموح به في PDF/A لأن الإجراء يشير إلى مورد خارجي؛ تُعيد الواجهة الأمامية صفرًا بصمت عند الاستدعاء في وضع PDF/A. مُتاحة في مكتبة Delphi وواجهة DLL تحت اسم DLAddLinkToImportData / DLAddLinkToImportDataA (بصيغتي PWideChar و PAnsiChar).
v3.48.0 2026-05-21
- تُنشئ AddLinkToHideField تعليق Link يكون action الخاص به هو إجراء إخفاء PDF (/S /Hide) الذي يبدّل ظهور حقل أو أكثر من حقول AcroForm عندما ينقر المستخدم على الرابط (ISO 32000-1 §12.6.4.10, Table 196). يقبل FieldNames اسمًا واحدًا أو أكثر من الأسماء المؤهلة بالكامل، مفصولة بفواصل أو فواصل منقوطة أو فواصل أسطر؛ يُكتب اسم واحد في /T كسلسلة نصية، ويُكتب اسمان أو أكثر في /T كمصفوفة، وكلا الصيغتين مسموح بهما وفقًا للمواصفة. يختار HideFlag اتجاه الرؤية: قيمة غير صفرية تُخفي الحقول المُدرجة (/H true)، والصفر يُظهرها (/H false). البت 0 من Options يتحكم في إظهار الحد المرئي، والبتات 1–3 تختار وضع تمييز الرابط (Invert، Outline، Push)، بما يتطابق مع AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 أو أحدث. متوافق مع PDF/A لأنه لا يُشير إلى أي مورد خارجي. مُتاحة في مكتبة Delphi وواجهة DLL تحت اسم DLAddLinkToHideField / DLAddLinkToHideFieldA (بصيغتي PWideChar و PAnsiChar).
v3.47.0 2026-05-21
- تُنشئ AddLinkToNamedAction تعليق Link يكون action الخاص به هو إجراء مُسمّى في PDF (/S /Named) يُفعّل أحد أوامر التنقل القياسية الأربعة الخاصة بالعارض، والمُعرّفة في ISO 32000-1 §12.6.4.11, Table 194: NextPage، PrevPage، FirstPage، و LastPage. يختار المعامل NamedActionType الأمر (0=NextPage، 1=PrevPage، 2=FirstPage، 3=LastPage)؛ القيم خارج هذا النطاق ترجع إلى NextPage، بحيث يُصدر الكاتب دائمًا اسم /N متوافقًا مع المواصفة. البت 0 من Options يتحكم في إظهار الحد المرئي، والبتات 1–3 تختار وضع تمييز الرابط (Invert، Outline، Push)، بما يتطابق مع اصطلاحات AddLinkToWeb / AddLinkToPage الحالية. يتطلب التعليق PDF 1.1 أو أحدث وهو متوافق مع PDF/A لأنه لا يُشير إلى أي مورد خارجي. مُتاحة في مكتبة Delphi وواجهات DLL.
v3.46.1 2026-05-21
- تُنشئ AddCaretAnnotation تعليق علامة caret (PDF /Subtype /Caret) في المستطيل المُعطى، يُحدد موضعًا على الصفحة تم فيه إدراج نص أو محتوى أو حذفه أو يحتاج بطريقة أخرى إلى انتباه المراجع. يدعم نوعين من الرموز (None و Paragraph) عبر SymbolType (0 / 1)، مع لون قابل للتكوين وشفافية وعنوان ومحتوى وطوابع زمنية للإنشاء/التعديل. مُعرّف في ISO 32000-1 §12.5.6.11. PDF 1.5 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- تكمل هذه الإضافة الاستكمال الهندسي للتعليقات الذي بدأ في v3.44.0 مع Square+Circle. تستطيع PDFlibPas الآن إنشاء تعليقات Text و Stamp و FreeText و TextMarkup (Highlight/Underline/Squiggly/StrikeOut) و Square و Circle و Line و Polygon و PolyLine و Ink و Caret، بالإضافة إلى دعم Link و FileAttachment و SVG و U3D و SWF الموجود سابقًا.
v3.46.0 2026-05-21
- تُنشئ AddInkAnnotation تعليق علامة ink (PDF /Subtype /Ink) يمثل ضربات الكتابة اليدوية أو العلامات الحرة المرسومة على الصفحة. تُمرَّر الضربات كسلسلة نصية واحدة حيث تُفصل الضربات المتعددة بـ '|' أو سطر جديد، وضمن كل ضربة تتبع أزواج الإحداثيات نفس تنسيق المسافة/الفاصلة/الفاصلة المنقوطة/الجدولة المستخدم في AddPolygonAnnotation. على سبيل المثال، يصف "100 100 110 105 120 110 | 200 200 210 205" ضربتين منفصلتين. يدعم عرض حد قابل للتكوين، ولون ink، وشفافية، وعنوان، ومحتوى، وطوابع زمنية. مُعرّف في ISO 32000-1 §12.5.6.13. PDF 1.3 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- يجب أن تحتوي كل ضربة على عدد زوجي من القيم (أربع قيم على الأقل)، وإلا فإن الاستدعاء يُعيد صفرًا دون كتابة أي تعليق. يُحسب /Rect تلقائيًا من النطاق المُجمَّع لجميع الضربات بالإضافة إلى هامش صغير لضمان بقاء الضربات داخل مربع إحاطة التعليق.
v3.45.0 2026-05-21
- تُنشئ AddPolygonAnnotation تعليق علامة مضلع مُغلق (PDF /Subtype /Polygon) حيث تُمرَّر الرؤوس كسلسلة من أزواج الإحداثيات المفصولة بالمسافات أو الفواصل أو الفواصل المنقوطة أو علامات الجدولة (مثل "100 100 200 100 200 200 100 200"). يدعم عرض حد قابل للتكوين، ولون حد، ولون تعبئة داخلي اختياري، وشفافية، وعنوان، ومحتوى، وطوابع زمنية. مُعرّف في ISO 32000-1 §12.5.6.9. PDF 1.5 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- تُنشئ AddPolyLineAnnotation تعليق علامة خط متعدد مفتوح (PDF /Subtype /PolyLine) بنفس تنسيق سلسلة الرؤوس وأنماط نهايات خطوط قابلة للتكوين في كل طرف (None، Square، Circle، Diamond، OpenArrow، ClosedArrow، Butt، ROpenArrow، RClosedArrow، Slash). مُعرّف في ISO 32000-1 §12.5.6.9. PDF 1.5 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- يتطلب كلا التعليقين نقطتي رأس على الأقل (أربعة أرقام) وعددًا إجماليًا زوجيًا من الأرقام؛ يُعيد الاستدعاء صفرًا إذا فشل تحليل سلسلة الرؤوس إلى قائمة أزواج صالحة. يُحسب /Rect من نطاق الرؤوس بالإضافة إلى هامش متناسب مع عرض الحد بحيث تبقى زخارف النهايات مرئية.
- كلا التعليقين يرفعان إصدار المستند إلى PDF 1.5 عند الإصدار تحت قفل حد أدنى لإصدار أقل.
v3.44.1 2026-05-21
- تُنشئ AddLineAnnotation تعليق علامة خط (PDF /Subtype /Line) بين نقطتي نهاية، مع عرض حد قابل للتكوين، ولون خط، ولون تعبئة داخلي اختياري، وأنماط نهاية خطوط لكلا الطرفين (None، Square، Circle، Diamond، OpenArrow، ClosedArrow، Butt، ROpenArrow، RClosedArrow، Slash)، وشفافية، وعنوان، ومحتوى، وطوابع زمنية للإنشاء/التعديل. مُعرّف في ISO 32000-1 §12.5.6.7. PDF 1.3 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- يُحسب /Rect للتعليق من نقطتي النهاية بالإضافة إلى هامش متناسب مع عرض الحد، بحيث تبقى زخارف النهايات داخل مربع إحاطة التعليق.
v3.44.0 2026-05-21
- تُنشئ AddSquareAnnotation تعليق علامة مستطيلية (PDF /Subtype /Square) في المستطيل المُعطى، مع عرض حد قابل للتكوين، ولون حد، ولون تعبئة داخلي اختياري، وشفافية، وعنوان، ومحتوى، وطوابع زمنية للإنشاء/التعديل. مُعرّف في ISO 32000-1 §12.5.6.8. PDF 1.3 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- تُنشئ AddCircleAnnotation تعليق علامة بيضاوية (PDF /Subtype /Circle) منقوشة في المستطيل المُعطى، بنفس الحد القابل للتكوين والتعبئة والشفافية والعنوان والمحتوى والطوابع الزمنية كما في AddSquareAnnotation. مُعرّف في ISO 32000-1 §12.5.6.8. PDF 1.3 أو أحدث. مُتاحة في مكتبة Delphi وواجهات DLL.
- كلا التعليقين الجديدين يرفعان تلقائيًا إصدار المستند إلى PDF 1.3 عند الإصدار تحت قفل حد أدنى لإصدار أقل، ويُصدران مجموعة حقول علامة قياسية (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P) بحيث تستطيع تدفقات عمل المراجعة الحالية في Acrobat و Foxit و Edge تحرير هذه التعليقات بعد الإنشاء.
v3.43.0 2026-05-20
- تُعيّن SetStructElemSpaceBefore و SetStructElemSpaceAfter السمات /SpaceBefore و /SpaceAfter (Layout owner) على عنصر البنية المفتوح حاليًا، مُعبّرة عن التباعد قبل وبعد عناصر مستوى الكتلة بالنقاط. مُعرّف في ISO 32000-1 §14.8.5.4.2 Table 340. مُتاحة في مكتبة Delphi و ActiveX (Dispids 73008051/73008052) وواجهات DLL.
- تُعيّن SetStructElemStartIndent و SetStructElemEndIndent السمات /StartIndent و /EndIndent (Layout owner)، مُعبّرة عن المسافة البادئة من حافتي البداية والنهاية المراعيتين لاتجاه الكتابة لمستطيل المحتوى بالنقاط. مُعرّف في ISO 32000-1 §14.8.5.4.2 Table 340. مُتاحة في مكتبة Delphi و ActiveX (Dispids 73008053/73008054) وواجهات DLL.
- تُعيّن SetStructElemColor السمة /Color (Layout owner) كثلاثي RGB (كل مكوّن 0.0-1.0)، تصف لون المقدمة للعنصر لمحركات إعادة التدفق ومُدققات تباين الألوان النهائية. مُعرّف في ISO 32000-1 §14.8.5.4.2 Table 340. مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008055) وواجهات DLL.
- إصلاح خطأ في التسلسل ضمن BuildStructElemDictRef: قيم السمات الرقمية ذات الرمز المفرد (مثل SpaceBefore و SpaceAfter و StartIndent و EndIndent) كانت تُكتب كأسماء PDF بدلاً من أرقام PDF. يُطبَّق الإصلاح على فرعي السمة بصاحب واحد وبأصحاب متعددين.
v3.42.0 2026-05-20
- تتحقق CheckCompliancePDFA الآن بشكل صحيح من جميع أوضاع PDF/A الستة (1a، 1b، 2a، 2b، 3a، 3b). يقبل فحص PDFAID (الرمز 00005) أيًا من علامات XMP الست الصالحة بدلاً من '1B' فقط. يطبق فحص الحد الأعلى للإصدار (00002) القيمة 1.4 لـ PDF/A-1 و 1.7 لـ PDF/A-2 و PDF/A-3.
- أصبح فحص OCProperties (الرمز 00003) شرطيًا الآن: يُطبَّق فقط على مستندات PDF/A-1، حيث يُحظر المحتوى الاختياري (الطبقات). يسمح PDF/A-2 و PDF/A-3 بالطبقات ولم يعد يتم وضع علامة عليها.
- تمت إضافة ثلاثة فحوصات توافق جديدة: الرمز 00006 يُعلّم المستندات المُشفّرة (التشفير محظور في جميع إصدارات PDF/A)؛ الرمز 00007 يُعلّم المستندات التي تفتقر إلى إدخال OutputIntents في الكتالوج (مطلوب لجميع إصدارات PDF/A)؛ الرمزان 00011 و 00012 يُعلّمان المستندات التي تفتقر إلى MarkInfo أو StructTreeRoot عندما يكون مستوى التوافق -a (إمكانية الوصول).
v3.41.0 2026-05-20
- يفرض وضع PDF/A الآن العمليات المحظورة على مستوى API. عندما يكون وضع PDF/A نشطًا (أي من الأوضاع 1-6)، فإن استدعاء SetEncryption أو AddSeparationColor أو SetFillColorCMYK أو SetTextColorCMYK أو أي واجهة CMYK/Separation/Shader أخرى يُعيد صفرًا ولا يكون له أي تأثير، بما يتماشى مع متطلب PDF/A بوجود نية إخراج sRGB واحدة.
- الشفافية محظورة في PDF/A-1 (الوضعان 1 و 2): SetTransparency و SetBlendMode و SetPageTransparencyGroup تُعيد صفرًا وتكون عمليات لا تفعل شيئًا (no-ops) عندما يكون الوضع النشط 1 أو 2. يسمح PDF/A-2 و PDF/A-3 (الأوضاع 3-6) بشفافية محدودة وغير مقيّدة.
- إجراءات JavaScript محظورة في جميع أوضاع PDF/A (1-6): SetOpenActionJavaScript و PageJavaScriptAction و DocJavaScriptAction و AddGlobalJavaScript و AddLinkToJavaScript تُعيد جميعها صفرًا وتكون no-ops عندما يكون أي وضع PDF/A نشطًا. يحظر ISO 19005-1 §6.6.1 صراحةً استخدام JavaScript في مستندات PDF/A.
- واجهات إرفاق الملفات (EmbedFile، AddFileAttachment) محظورة في أوضاع PDF/A-1 و PDF/A-2 (1-4). تظل وظيفية في PDF/A-3 (الوضعان 5 و 6)، الذي يسمح صراحةً بملفات مضمّنة عشوائية.
v3.40.0 2026-05-20
- تدعم SetPDFAMode الآن مستويات التوافق PDF/A-2 و PDF/A-3. مرّر NewMode=3 لـ PDF/A-2b، أو 4 لـ PDF/A-2a، أو 5 لـ PDF/A-3b، أو 6 لـ PDF/A-3a. يستهدف PDF/A-2 إصدار PDF 1.7 ويسمح بالطبقات والنماذج التفاعلية وصور JPEG2000 والشفافية المحدودة. يوسّع PDF/A-3 إمكانيات PDF/A-2 بالسماح بملفات مضمّنة عشوائية (أي نوع MIME). تكتب جميع متغيرات -a تلقائيًا /MarkInfo وعلامات بنية PDF الموسومة المطلوبة لمستوى توافق إمكانية الوصول.
- إصلاح: كانت SetPDFAMode(1) (PDF/A-1a) سابقًا no-op بسبب خطأ توجيه داخلي تم إدخاله في v3.20.0. أصبحت الآن تكتب بشكل صحيح /MarkInfo و /OutputIntents وتُعيّن XMP pdfaid:part=1/conformance=A.
- تُعيد GetInformation(201) القيم من '1' إلى '6' مطابِقة لوضع PDF/A النشط، بما يتسق مع ترقيم الأوضاع الجديد.
v3.39.0 2026-05-20
- تُعيّن SetStructElemWritingMode السمة /WritingMode (Layout owner) على عنصر البنية المفتوح حاليًا. القيم الصالحة هي LrTb (من اليسار إلى اليمين، الافتراضي للنصوص اللاتينية)، و RlTb (من اليمين إلى اليسار، للعربية والعبرية)، و TbRl (من الأعلى إلى الأسفل من اليمين إلى اليسار، للنصوص العمودية التقليدية الصينية واليابانية والكورية). مُعرّف في ISO 32000-1 §14.8.5.4.2 Table 340. مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008049) وواجهات DLL.
- تُعيّن SetStructElemListNumbering السمة /ListNumbering (List owner) على عنصر البنية المفتوح حاليًا. القيم المدعومة تشمل None و Disc و Circle و Square (علامات غير مرتبة) و Decimal و UpperRoman و LowerRoman و UpperAlpha و LowerAlpha (ترقيم مرتب). تُعيّن السمة على عنصر L (list) وتُمكّن التقنيات المساعدة من الإعلان عن نوع القائمة بشكل صحيح. مُعرّف في ISO 32000-1 §14.8.5.3.2 Table 336. مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008050) وواجهات DLL.
v3.38.0 2026-05-20
- تُعيّن SetStructElemColSpan السمة /ColSpan (Table owner) على عنصر البنية المفتوح حاليًا، مُشيرة إلى عدد الأعمدة التي تمتد عبرها الخلية. مُعرّف في ISO 32000-1 §14.8.5.7.2 Table 337. مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008047) وواجهات DLL.
- تُعيّن SetStructElemRowSpan السمة /RowSpan (Table owner) على عنصر البنية المفتوح حاليًا، مُشيرة إلى عدد الصفوف التي تمتد عبرها الخلية. مُعرّف في ISO 32000-1 §14.8.5.7.2 Table 337. مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008048) وواجهات DLL.
- كلتا الدالتين عبارة عن أغلفة ملائمة تعادل استدعاء AddTagAttribute بـ Owner='Table' واسم السمة المعني. وتُكمّلان SetStructElemScope من أجل خلايا جدول موصوفة بالكامل في الجداول المعقّدة أو ذات الرؤوس الممتدة.
v3.37.2 2026-05-20
- تُبلّغ GetPDFUADiagnostics الآن عن FORM-NO-TOOLTIP:N عندما تكون N من حقول النماذج التفاعلية (تعليقات Widget) تفتقر إلى إدخال TU (تلميح / اسم يمكن الوصول إليه). يتطلب ISO 14289-1 §7.18.4 أن تحمل جميع حقول النماذج التفاعلية إدخال TU بحيث يمكن للتقنيات المساعدة إعلان غرض الحقل للمستخدم عندما يحصل الحقل على التركيز. /TU هو الاسم القابل للوصول الذي يقرأه قارئو الشاشة بصوت عالٍ؛ يختلف عن /T الذي هو الاسم الجزئي للحقل المُستخدم للوصول البرمجي وإرسال النموذج.
v3.37.1 2026-05-20
- تُبلّغ GetPDFUADiagnostics الآن عن LIST-STRUCT:N عندما تظهر N من عناصر بنية LI أو LBody خارج العنصر الأبوي المطلوب. يتطلب ISO 32000-1 §14.8.4.4 أن يكون LI طفلًا مباشرًا لـ L (list) وأن يكون LBody طفلًا مباشرًا لـ LI (list item). تمنع التداخلات المشوّهة للقوائم التقنيات المساعدة من اجتياز محتوى القائمة وإعلانه بشكل صحيح، ويمكن أن تُسبب فشل التحقق من بنية المستند في مدققات PDF/UA-1.
v3.37.0 2026-05-20
- BeginTagEx2 هي API جديدة تفتح عنصر بنية وتُعيّن جميع خصائص العنصر الرئيسية في استدعاء واحد. بالإضافة إلى معاملات TagType و AltText و ActualText و Lang الموجودة في BeginTagEx، تقبل BeginTagEx2 المعاملات Title (/T، للوحة التنقل في علامات Tags)، و ElemID (/ID، معرف عنصر فريد)، و Expansion (/E، النص الكامل لاختصار أو رمز). تمرير سلسلة فارغة لأي من هذه المعاملات الإضافية الثلاثة يعادل حذف الـ setter المعني. تُقلّل BeginTagEx2 من النصوص النموذجية للعناصر الموصوفة جيدًا — بدلاً من استدعاء BeginTagEx متبوعًا بـ SetStructElemTitle و SetStructElemID و SetStructElemExpansion بشكل منفصل، يمكن تعيين الخصائص السبع كلها في استدعاء واحد. الدالة مُتاحة في مكتبة Delphi و ActiveX (Dispid 73008046) وواجهات DLL.
v3.36.1 2026-05-20
- تُبلّغ GetPDFUADiagnostics الآن عن TABLE-TH-NO-SCOPE:N عندما تكون N من عناصر بنية TH (خلية رأس الجدول) تفتقر إلى سمة Scope. يُعرّف ISO 32000-1 §14.8.4.3.4 Table 337 السمة Scope (Row أو Column أو Both) بوصفها السمة التي تصف خلايا البيانات التي تنطبق عليها خلية الرأس. بدونها، لا يمكن لقارئات الشاشة والتقنيات المساعدة الأخرى ربط خلايا الرؤوس بخلايا البيانات في الجداول المعقّدة أو متعددة الرؤوس بشكل موثوق، وهو أمر يتطلبه ISO 14289-1 §7.5. استدعِ SetStructElemAttr('Table','Scope', 'Column') (أو 'Row' / 'Both') مباشرة بعد وسم كل عنصر TH.
v3.36.0 2026-05-20
- SetStructElemExpansion هي API جديدة تُعيّن إدخال /E (نص التوسعة) على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.9.5). نص التوسعة هو الصيغة المنطوقة كاملة لاختصار أو رمز موجود في العنصر — مثل "World Wide Web" لـ Span نصه "WWW". تنطق قارئات الشاشة التوسعة بدلاً من محاولة نطق الأحرف المختصرة، وهو أمر بالغ الأهمية لإمكانية الوصول إلى المحتوى الفني والعلمي. يتطلب PDF/UA-1 (ISO 14289-1 §7.2) أن تكون اللغة الطبيعية قابلة للتحديد بشكل لا لبس فيه؛ /E هي الآلية القياسية للاختصارات والرموز. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.35.1 2026-05-20
- تُبلّغ GetPDFUADiagnostics الآن عن DOCINFO-TITLE-MISSING عندما يكون إدخال /Title في قاموس معلومات المستند غائبًا أو فارغًا. يتطلب PDF/UA-1 (ISO 14289-1) عنوانًا للمستند بحيث يمكن لقارئات الشاشة الإعلان عنه عند فتح المستند. يؤكد فحص DISPLAYDOCTITLE-FALSE الحالي أن العنوان يُعرض في شريط عنوان العارض؛ DOCINFO-TITLE-MISSING مُكمّل — يؤكد أن قيمة العنوان نفسها قد تم تعيينها. استدعِ SetDocumentInfo('Title', ...) لتوفير القيمة.
v3.35.0 2026-05-20
- SetStructElemTitle هي API جديدة تُعيّن إدخال /T (العنوان) على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.7.2 Table 324). العنوان هو تسمية قابلة للقراءة البشرية تُحدد مثيل العنصر المحدد — على سبيل المثال "Chapter 1" أو "Summary Table" أو "Figure 3: Quarterly Sales" — ويُعرض في لوحة التنقل Tags في عارضات PDF وتستخدمه أدوات تصحيح إمكانية الوصول. يختلف /T عن /Alt (النص البديل للمستخدمين الذين يواجهون عوائق في العرض) و /ActualText (تصحيح النص على مستوى الـ glyph)؛ وهو أكثر فائدة على عناصر الحاويات غير النصية مثل Table و Figure و Form و Sect و Div. مرّر سلسلة فارغة لمسح قيمة مُعيّنة سابقًا. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.34.0 2026-05-20
- SetStructElemAltText هي API جديدة تُعيّن إدخال /Alt على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.9.3). تعادل تمرير AltText إلى BeginTag، لكنها تسمح بتعيين أو تحديث وصف النص البديل بعد فتح العنصر — مفيدة عندما يُحسب الوصف بشكل منفصل عن نوع العنصر. يتطلب PDF/UA-1 (ISO 14289-1 §7.5) نص Alt على عناصر Figure و Formula؛ تُبلّغ GetPDFUADiagnostics بالفعل عن FIGURE-NO-ALT:N للقيم المفقودة. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.33.1 2026-05-20
- تشمل GetPDFUADiagnostics الآن فحص ROLEMAP-UNMAPPED:N الذي يكتشف أسماء أنواع عناصر البنية المخصصة المُستخدمة في المستند والتي ليس لها إدخال في قاموس /RoleMap. يتطلب كل من ISO 14289-1 §7.1 و ISO 32000-1 §14.7.3 ربط كل نوع بنية غير قياسي بنوع PDF قياسي (مثل P أو Span أو Figure) بحيث تستطيع التقنيات المساعدة تحديد كيفية معالجة العنصر. عند العثور على N نوع غير مرتبط، يتضمن وصف المشكلة قائمة أسماء الأنواع لكي يعرف المستدعون أي إدخالات AddRoleMap مطلوبة. تُتعرّف على جميع أنواع البنية القياسية الـ 49 المُعرّفة في ISO 32000-1 Table 333 (PDF 1.7) وتُستثنى من التقرير.
v3.33.0 2026-05-20
- SetStructElemLang هي API جديدة تُعيّن إدخال /Lang على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.9.2). يتجاوز وسم اللغة لغة المستند على مستوى المستند المُعلنة بواسطة SetDocumentLanguage أو SetPDFUAMode للعنصر وكل أحفاده، مما يُمكّن المستندات متعددة اللغات من وسم كل مقطع بعلامة اللغة BCP 47 الصحيحة الخاصة به (مثل 'en-US' أو 'fr' أو 'zh-Hant-TW'). تستخدم قارئات الشاشة /Lang على مستوى العنصر لاختيار محرك تحويل النص إلى كلام أو الصوت المناسب عند قراءة المستند بصوت عالٍ. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.32.0 2026-05-20
- SetStructElemActualText هي API جديدة تُعيّن إدخال /ActualText على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.9.4). استخدمها لتحديد نص Unicode الدقيق الذي يمثله تسلسل glyph عندما يُنتج استخراج تدفق المحتوى نتائج غير صحيحة — الحالات الأكثر شيوعًا هي glyph ligature في OpenType (U+FB00 ff، U+FB01 fi، U+FB02 fl) والاختصارات ذات التوسعات غير الواضحة. يكمل ActualText المحتوى المعروض ولا يحل محله؛ يتجاوز ما تقرأه التقنيات المساعدة ومُستخرجو النص لذلك العنصر دون قمع العرض المرئي. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.31.1 2026-05-20
- تتحقق GetPDFUADiagnostics الآن من عناصر بنية Formula بالإضافة إلى عناصر Figure عند الإبلاغ عن نص Alt المفقود (FIGURE-NO-ALT:N). يتطلب ISO 32000-1 §14.9.3 أوصافًا بديلة لكل من الأشكال الرسومية والصيغ الرياضية؛ سابقًا كان يتم فحص عناصر Figure فقط.
- تُبلّغ GetPDFUADiagnostics الآن عن PDF-VERSION-LOW عندما يكون إصدار PDF للمستند أقل من 1.7. يُعرّف PDF/UA-1 (ISO 14289-1) مقابل PDF 1.7 (ISO 32000-1:2008)؛ المستندات في PDF 1.5 أو 1.6 لن تستوفي متطلبات المواصفة الأساسية. استدعِ SetPDFUAMode لرفع الإصدار تلقائيًا إلى 1.7.
v3.31.0 2026-05-19
- أصبحت معرفات عناصر البنية وربط رؤوس الجداول مدعومة الآن. تُعيّن SetStructElemID معرف سلسلة فريدًا (/ID) لعنصر البنية المفتوح حاليًا؛ تُجمع المعرفات في شجرة أسماء /IDTree على جذر شجرة البنية عند حفظ المستند، مما يُمكّن أدوات إمكانية الوصول والمراجع المتقاطعة من تحديد موقع العناصر بواسطة المعرف (ISO 32000-1 §14.7.4). تربط SetStructElemHeaders خلية الجدول الحالية (TD أو TH) بخلية رأس أو أكثر عبر قائمة معرفات مُعيّنة سابقًا مفصولة بفواصل، حيث تكتب مصفوفة /Headers في قاموس صاحب سمة Table (ISO 32000-1 §14.8.5.7.2). معًا، تدعم هاتان الدالتان وسم الجداول المعقّدة لـ PDF/UA-1 (ISO 14289-1 §7.10) و WCAG 2.x SC 1.3.1. كلتا الدالتين مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL. كذلك تتعامل AddTagAttribute الآن بشكل صحيح مع سمة /Headers بقيم مفصولة بفواصل تُكتب كمصفوفات سلاسل نصية PDF.
v3.30.1 2026-05-19
- تشمل GetPDFUADiagnostics الآن فحص HEADING-LEVEL-SKIP:N الذي يكتشف قفزات مستوى العنوان في ترتيب المستند (مثل H1 يتبعها مباشرة H3 دون H2 بينهما). يُجري الفحص اجتيازًا مسبق الترتيب لشجرة عناصر البنية بأكملها ويعد كل حدث يتجاوز فيه مستوى العنوان التالي السابق بأكثر من واحد. تُعامل عناصر H العامة بوصفها H1. العودة إلى عنوان بمستوى أعلى (H3 → H1) لا تُعد قفزة. يتطلب WCAG 2.x Success Criterion 1.3.1 و ISO 14289-1 §7.1 تداخل العناوين دون فجوات.
v3.30.0 2026-05-19
- أصبحت سمات عناصر البنية مدعومة الآن للمستندات الموسومة ومستندات PDF/UA. ثلاث دوال API جديدة تسمح بإلحاق السمات بعنصر البنية الجاري بناؤه حاليًا على مكدس الوسم: AddTagAttribute (أغراض عامة، أي owner/name/value)، و SetStructElemScope (غلاف ملائم يُعيّن سمة /Scope تحت Table owner، لخلايا رأس TH — ISO 32000-1 §14.8.5.7.2)، و SetStructElemBBox (غلاف ملائم يُعيّن سمة /BBox تحت Layout owner، للأشكال والعناصر الأخرى ذات الموضع المرئي — ISO 32000-1 §14.8.5.4). عند حفظ المستند، تُكتب السمات كقواميس سمة /A في كل عنصر بنية؛ تُجمع السمات المتعددة من نفس الـ owner في قاموس واحد، وتُكتب السمات من أصحاب مختلفين كمصفوفة قواميس. الدوال الثلاث مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.29.1 2026-05-19
- تشمل GetPDFUADiagnostics الآن فحصين إضافيين: ما إذا كانت أي من عناصر بنية Figure في المستند تفتقر إلى قيمة نص Alt (يُبلّغ عنه كـ FIGURE-NO-ALT:N، وفقًا لـ ISO 14289-1 §7.5 و ISO 32000-1 §14.9.3)، وما إذا كانت أي من عناصر البنية لا تزال مفتوحة لأن EndTag لم يُستدع (يُبلّغ عنه كـ STRUCT-UNCLOSED:N). يُجري فحص Figure مسحًا تكراريًا كاملًا لشجرة عناصر البنية، شاملًا العناصر في جميع أعماق التداخل.
v3.29.0 2026-05-19
- GetPDFUADiagnostics هي API تشخيصية جديدة تفحص المستند بحثًا عن مشكلات توافق PDF/UA-1 (ISO 14289-1) المحتملة وتُعيد قائمة بالنتائج مفصولة بسطر جديد. تُجرى ستة فحوصات: ما إذا كان MarkInfo/Marked مُعيّنًا (PDF موسوم)، وما إذا كان كتالوج المستند يحتوي على إدخال /Lang، وما إذا كان ViewerPreferences/DisplayDocTitle قيمته true، وما إذا كانت بيانات XMP الوصفية تحتوي على معرف pdfuaid:part، وعدد التعليقات غير المُعفاة التي تفتقر إلى إدخال Contents، وعدد الملفات المضمّنة التي تفتقر إلى إدخال AFRelationship. يُحدد كل نتيجة برمز قصير (مثل LANG-MISSING، ANNOT-NO-CONTENTS:3) متبوع بوصف قابل للقراءة البشرية. تُعيد سلسلة فارغة عند عدم العثور على مشكلات. مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.28.5 2026-05-19
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق FileAttachment على إدخال Contents ولا حقل /T، يُستخدم الآن اسم الملف من مواصفات الملف المضمّن للتعليق (/FS /UF أو /F) بوصفه الوصف البديل القابل للوصول. يُكمل هذا سلسلة احتياط Contents للتعليقات: /T → Link URI → اسم Stamp → اسم ملف FileAttachment. تتلقى قارئات الشاشة اسم الملف المرفق بدلاً من الصمت، مما يلبي ISO 14289-1 §7.18.1 لأنواع التعليقات الأكثر شيوعًا.
v3.28.4 2026-05-19
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق Stamp على إدخال Contents (أو يحتوي على إدخال فارغ) ولا حقل /T، يُستخدم الآن اسم نوع الختم من إدخال /Name للتعليق بوصفه الوصف البديل القابل للوصول (مثل "Approved" أو "Draft" أو "Confidential" أو "Final"). يوسّع هذا سلسلة احتياط Contents للتعليقات التي قُدّمت في v3.28.3 لتغطية تعليقات الأختام، الشائعة في تدفقات العمل التي تتضمن مستندات قيد المراجعة أو الموافقة عليها والتي تفتقر بشكل متكرر إلى قيمة Contents صريحة.
v3.28.3 2026-05-19
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق Link على إدخال Contents (أو يحتوي على إدخال فارغ) ولا حقل /T، يُستخدم الآن URI من إجراء URI للتعليق بوصفه الوصف البديل القابل للوصول. ينطبق هذا فقط أثناء معالجة SetPDFUAMode وفقط على تعليقات Link التي تحمل إجراء /URI. تتلقى قارئات الشاشة عنوان URL كتسمية أخيرة، مما يلبي ISO 14289-1 §7.18.1 في الحالة الشائعة حيث يُنشئ المؤلفون ارتباطات تشعبية دون توفير وصف قابل للقراءة البشرية.
v3.28.2 2026-05-19
- SetEmbeddedFileAFRelationship هي API جديدة لتعيين قيمة AFRelationship صراحةً على قاموس مواصفات الملف الخاص بملف مضمّن. مطلوب وفقًا لـ ISO 14289-1 (PDF/UA-1) §7.11، يسمح هذا للمستدعين بتحديد العلاقة الدلالية للملف المضمّن بمحتوى المستند عن طريق الاختيار من القيم الخمس الصالحة: Source أو Data أو Alternative أو Supplement أو Unspecified. عندما يكون SetPDFUAMode نشطًا، يُخصص أي ملف مضمّن بدون مفتاح AFRelationship تلقائيًا قيمة Unspecified؛ استخدم هذه الدالة لتجاوز هذا الافتراضي قبل الحفظ. مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
v3.28.1 2026-05-19
- عند استدعاء SetPDFUAMode على مستند تحمل بيانات XMP الوصفية الخاصة به العنوان العام الافتراضي للمكتبة بدلاً من عنوان خاص بالمستند، يُستبدل العنوان الآن تلقائيًا بالقيمة من إدخال /Info Title للمستند (إن وُجدت). يضمن هذا أن تعكس حزمة XMP الخاصة بـ pdfuaid:part-1 العنوان الفعلي للمستند بدلاً من عنصر نائب، مما يلبي توقعات مدقق PDF/UA-1.
- يقرأ محلل XMP (LoadFromString) الآن قيمة dc:title من بيانات XMP الوصفية الموجودة عند تحميل المستند، بحيث تحافظ دورة round-trip لمستند PDF يحتوي بالفعل على dc:title بشكل صحيح على هذا العنوان بدلاً من العودة إلى عنصر نائب افتراضي.
v3.28.0 2026-05-19
- BeginArtifactEx(ArtifactType, ArtifactSubtype) هي API جديدة لـ PDF الموسوم تُوسّع BeginArtifact للتعبير عن كل من /Type للقطعة الأثرية و /Subtype للترقيم في استدعاء واحد. عندما يكون كلا المعاملين غير فارغين، يكون المُشغّل المكتوب /Artifact << /Type /T /Subtype /S >> BMC، مما يُمكّن قطع أثرية للترقيم محددة بالكامل مثل الترويسات والتذييلات وفقًا لـ ISO 32000-1 §14.8.2.2.1. إذا كان معامل واحد فقط غير فارغ، تُستخدم الصيغة المقابلة ذات المفتاح المفرد. تُصدَّر نقاط دخول DLL باسم DLBeginArtifactEx و DLBeginArtifactExA أيضًا.
v3.27.2 2026-05-19
- تميّز BeginArtifact الآن بشكل صحيح بين أنواع القطع الأثرية وأنواع التصنيف الفرعي للترقيم. عندما يكون المُعامل Pagination أو Layout أو Page (أنواع قطع أثرية وفقًا لـ ISO 32000-1 §14.8.2.2.1 Table 330)، يكتب مُشغّل المحتوى المعلّم /Type بدلاً من /Subtype. تستمر القيم الأخرى مثل Header و Footer و Watermark في الكتابة بوصفها /Subtype. يُصحّح هذا الإخراج السابق غير الصحيح الذي كان يكتب /Subtype /Pagination عندما كان المستدعي يقصد وضع علامة على قطعة أثرية للترقيم.
v3.27.1 2026-05-19
- عندما يكون وضع PDF/UA نشطًا ويحتوي المستند على ملفات مضمّنة، يتلقى كل قاموس مواصفات ملف يفتقر إلى إدخال AFRelationship واحدًا تلقائيًا في وقت الحفظ. القيمة المكتوبة هي /Unspecified، مما يلبي متطلب ISO 14289-1 §7.11 بأن يحمل كل ملف مضمّن مفتاح AFRelationship. ينطبق هذا على كل من الملفات المُضافة عبر EmbedFile والملفات المضمّنة الموجودة بالفعل في مستند تم تحميله.
v3.27.0 2026-05-19
- AddRoleMap(CustomType, StandardType) هي API جديدة لـ PDF الموسوم تُسجّل ربط اسم نوع عنصر بنية مخصص (غير قياسي) بنوع بنية PDF قياسي. عند الحفظ، تُكتب التعيينات إلى قاموس RoleMap في جذر شجرة البنية، مما يلبي متطلب ISO 14289-1 §7.1 للمستندات التي تستخدم أسماء وسم خاصة بالتطبيق. يمكن تسجيل تعيينات متعددة؛ تتم الكتابة فوق المفاتيح المكررة بالاستدعاء الأخير. تُصدَّر نقاط دخول DLL باسم DLAddRoleMap و DLAddRoleMapA أيضًا.
v3.26.0 2026-05-19
- BeginTagEx(TagType, AltText, ActualText, Lang) هي API جديدة لـ PDF الموسوم تُوسّع BeginTag بسمة لغة طبيعية صريحة. عندما يكون Lang غير فارغ، يُكتب إلى سمة /Lang لعنصر البنية، مما يُمكّن التعليق التوضيحي للغة لكل عنصر المطلوب وفقًا لـ ISO 14289-1 §7.2 للمستندات متعددة اللغات. مرّر سلسلة Lang فارغة للتصرف بشكل مماثل لـ BeginTag. تُصدَّر نقاط دخول DLL باسم DLBeginTagEx و DLBeginTagExA أيضًا.
v3.25.1 2026-05-19
- خطوط TrueType غير المُقسّمة إلى مجموعات فرعية والمُحمّلة بصفحة رموز Windows الافتراضية (WinAnsiEncoding) تتلقى الآن تيار CMap من ToUnicode، مما يُمكّن استخراج نص Unicode موثوق ونسخ/لصق لهذه الخطوط. سابقًا كان تيار ToUnicode يُكتب فقط عندما يكون هناك تجاوز صريح لصفحة الرموز أو مصفوفة Differences؛ كان مسار الترميز الافتراضي الشائع يفتقر إليه.
- ينطبق الإصلاح نفسه على خطوط TrueType المُحمّلة بصفحة رموز غير افتراضية صريحة ولكن بدون مصفوفة Differences، وعلى الخطوط المُحمّلة عبر تنسيق الخط المُحزّم.
v3.25.0 2026-05-19
- عندما يكون وضع PDF/UA نشطًا، تتلقى التعليقات غير المُعفاة (جميع الأنواع باستثناء Widget و PrinterMark و TrapNet) التي تفتقر إلى إدخال Contents غير فارغ واحدًا تلقائيًا في وقت الحفظ. تُستخدم قيمة /T (العنوان / المؤلف) للتعليق بوصفها قيمة الاحتياط، مما يلبي ISO 14289-1 §7.18.1 للتعليقات التي تحمل عنوانًا ولكن بدون وصف صريح قابل للوصول.
v3.24.0 2026-05-19
- عندما يكون وضع PDF/UA نشطًا، تتلقى حقول النماذج التفاعلية التي تفتقر إلى إدخال TU (تلميح / وصف بديل) واحدًا تلقائيًا في وقت الحفظ. يُستخدم الاسم الجزئي للحقل (إدخال /T) بوصفه قيمة الاحتياط، مما يضمن قدرة قارئات الشاشة على تحديد كل حقل. تُستثنى الأزرار الضاغطة بشكل صحيح من هذا المتطلب وفقًا لـ ISO 14289-1 §7.18.4.
v3.23.1 2026-05-19
- تُعيد GetInformation(200) القيمة '1' عندما يكون وضع PDF/UA-1 نشطًا على المستند المحدد، مما يُمكّن المستدعين من الاستعلام عن حالة وضع التوافق في وقت التشغيل.
- تُعيد GetInformation(201) القيمة '1' لـ PDF/A-1a، أو '2' لـ PDF/A-1b، أو سلسلة فارغة عندما يكون وضع PDF/A متوقفًا.
- تُعيد GetInformation(311) و GetInformation(312) الآن بشكل صحيح سلسلة متطلبات الإصدار واسم الميزة من تعارض قفل الإصدار الأخير (مُعلن سابقًا في إدخال v3.20.3 ولكن لم يتم تنفيذه بعد).
- تُعيد GetInformation(313) سلسلة إصدار PDF التي يكون فيها هدف الحفظ مقفولًا حاليًا، أو سلسلة فارغة للمستندات ذات الإصدار الحر.
v3.23.0 2026-05-19
- أصبحت SetMarkInfo(Marked) الآن API عامة، مما يسمح بتعيين علامة MarkInfo.Marked بشكل مستقل عن إعداد PDF/UA-1 الكامل الذي يُجريه SetPDFUAMode. عندما يكون Marked يساوي 1، يُعيَّن أيضًا MarkInfo.Suspects على false وفقًا لـ ISO 14289-1 §7.18.6.
- عندما يكون وضع PDF/UA نشطًا، تتلقى جميع الصفحات تلقائيًا إدخال /Tabs /S في وقت الحفظ، مما يلبي متطلب ترتيب الـ tabs المستند إلى البنية وفقًا لـ ISO 14289-1 §7.18.4.
- تمت إضافة وثائق مرجعية HTML لـ SetPDFUAMode و SetDocumentLanguage و SetMarkInfo و BeginTag و EndTag و BeginArtifact و EndArtifact، مع جداول صيغة كاملة وأمثلة استخدام.
v3.22.0 2026-05-19
- تفتح BeginTag(TagType, AltText, ActualText) عنصر بنية PDF موسوم في تدفق المحتوى الحالي، حيث تكتب مُشغّل BDC مع MCID مُخصص تلقائيًا وتُسجّل العنصر في شجرة بنية المستند. TagType هو أي نوع بنية PDF قياسي (P، H1، Figure، Table، إلخ). AltText و ActualText هما سلاسل إمكانية وصول اختيارية مُرمّزة كسلاسل نصية PDF (UTF-16BE).
- تُغلق EndTag آخر عنصر بنية مفتوح، حيث تكتب مُشغّل EMC المطابق إلى تدفق المحتوى.
- تُعلّم BeginArtifact(SubType) منطقة محتوى بوصفها قطعة أثرية PDF (قطعة أثرية للترقيم، خلفية، إلخ)، حيث تكتب مُشغّل BMC. SubType اختياري؛ عندما يُمرَّر، يُكتب بوصفه /Artifact << /Subtype /SubType >>.
- تُغلق EndArtifact منطقة القطعة الأثرية بمُشغّل EMC.
- في وقت الحفظ، عندما يتم تسجيل أي عناصر بنية موسومة، تبني المكتبة تلقائيًا StructTreeRoot الكامل، وتُخصص مفاتيح StructParents للصفحات المتأثرة، وتكتب شجرة أرقام ParentTree، مما يلبي متطلبات ISO 32000-1 §14.7 لـ PDF الموسوم.
- خطوط Type 1 القياسية (عائلات Helvetica و Times و Courier و Symbol) وخطوط Type 1 المضمّنة بترميز WinAnsi تتلقى الآن تيار CMap من ToUnicode، مما يُمكّن استخراج نص Unicode موثوق ونسخ/لصق لهذه الأنواع من الخطوط.
v3.21.0 2026-05-19
- تُفعّل SetPDFUAMode(Language) وضع توافق PDF/UA-1 (ISO 14289-1): ترفع المستند تلقائيًا إلى PDF 1.7، وتكتب MarkInfo.Marked و MarkInfo.Suspects، وتُمكّن DisplayDocTitle في ViewerPreferences، وتُعيّن Catalog.Lang عندما يكون Language غير فارغ، وتكتب إدخال pdfuaid:part = 1 لمساحة الاسم XMP المطلوب وفقًا لقسم ISO 14289-1 6.7.11.
- تكتب SetDocumentLanguage(Language) إدخال Catalog /Lang مباشرة، مما يسمح بإعلان لغة المستند بشكل مستقل عن وضع PDF/UA.
- أصبح MarkInfo.Suspects الآن مُعيّنًا على false كلما تم تعيين MarkInfo.Marked على true، مما يلبي متطلب بنية PDF الموسومة وفقًا لـ ISO 14289-1 (القسم 7.18.6).
- يفرض Encrypt الآن علامة الإذن CanCopyAccess (نسخ المحتوى لإمكانية الوصول) عندما يكون المستند في وضع PDF/UA، وفقًا لما يتطلبه ISO 14289-1 القسم 7.17.
- لم تعد حقول النماذج من نوع Choice (القائمة المنسدلة) تحمل قيمة تلميح ذات قيمة ثابتة غير ذات معنى؛ يُترك TU غير مُعيّن بحيث يستطيع المستدعي تعيين تسمية ذات معنى عبر API لخاصية حقل النموذج.
v3.20.3 2026-05-19
- تُعيد Encrypt و AddSWFAnnotationFromFile الآن صفرًا فورًا مع LastErrorCode 602 عندما يكون إصدار الحفظ مقفولًا أدنى من الحد الأدنى المطلوب لقوة التشفير المحددة أو نوع التعليق، بدلاً من المضي بصمت والفشل فقط في وقت الحفظ.
- تعكس GetInformation(311) و GetInformation(312) الآن متطلبات الإصدار المتعارضة في وقت الكتابة عندما يحجب إصدار مقفول ميزات على مستوى الامتدادات مثل AES-256 أو تعليقات RichMedia.
v3.20.2 2026-05-19
- ترفع AddU3DAnnotationFromFile الآن إصدار المستند تلقائيًا إلى PDF 1.6 عند إضافة تعليق ثلاثي الأبعاد إلى مستند بإصدار أقل، بما يتسق مع سلوك الرفع التلقائي للإصدار لجميع نقاط دخول API الأخرى لـ PDF 1.6+.
v3.20.1 2026-05-17
- أصبحت أهداف الحفظ لـ PDF 1.2 الآن مفروضة كعقود PDF 1.2 صارمة. يفشل حفظ كائنات PDF 1.3+ مثل بيانات TrimBox للصفحة تحت هدف PDF 1.2 قبل كتابة الإخراج بدلاً من إصدار ملف مختلط الإصدارات.
- أصبح توافق مستوى الامتداد لـ PDF 1.7 من Adobe الآن جزءًا من preflight الحفظ. يتم فحص AESV3 و AES-256 و RichMedia و Projection والقواميس الجغرافية المكانية وأنواع توقيع ETSI الفرعية مقابل ExtensionLevel المطلوب.
- يُعلن تشفير AES-256 وتعليقات RichMedia والقواميس الجغرافية المكانية وأنواع توقيع ETSI الفرعية الآن عن إدخال Adobe Extensions المطابق عندما ترفع PDFlib المستند تلقائيًا إلى محتوى PDF 1.7 الموسّع.
- تستخدم عمليات الحفظ بالإلحاق الآن نفس بوابة توافق الإصدار المستخدمة في الحفظ الكامل.
- تم تحديث مكتبات DLL الاختيارية المدمجة لـ PDFium لـ Win32 و Win64. يظل GDI+ هو المُصيّر الافتراضي؛ يبقى PDFium اختياريًا عبر SetPDFiumFileName و SelectRenderer(3).
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 207/207، واجتاز C++Builder Win64x GoogleTest 61 اختبارًا مع تخطي اختبارين موجودين معتمدين على عينات.
v3.20.0 2026-05-17
- ثماني نقاط دخول إضافية لـ PDFlib writer تُوجَّه الآن عبر Phase 3 EnsureMinVersion بحيث يرفع إصدار المستند تلقائيًا إلى الحد الأدنى المطلوب للميزة الجاري إصدارها: SetDocumentMetadata (PDF 1.4 - تيار XMP /Metadata) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- بالاقتران مع مجموعة v3.15.0 (SetTransparency و SetPageUserUnit و Encrypt و SetPageLayout) ومجموعة v3.17.0 (ثماني إدخالات لـ JavaScript / ملف مضمّن / XFA / SWF)، تغطي PDFlib الآن واحدًا وعشرين نقطة دخول للـ writer من البداية إلى النهاية للرفع التلقائي لـ FVersion.
- كانت NewOptionalContentGroup ترفع FVersion مباشرة سابقًا؛ تمر الآن عبر EnsureMinVersion بحيث يُحترم LockSaveVersion ويُسجَّل الرفع في AutoBumpedFeatures.
v3.19.0 2026-05-17
- يتعرّف توافق إصدار PDF في وقت الحفظ والتحميل الآن أيضًا على أربع ميزات مؤجَّلة سابقًا: Btn /Ff bit 15 NoToggleToOff (radio-button-only) -> PDF 1.4 DeviceN /Subtype /NChannel (color-space refinement) -> PDF 1.6 FontFile3 /Subtype /OpenType (font program type) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7
- تتطابق قاعدة NChannel مع الصيغة المصفوفة لفضاء ألوان DeviceN [/DeviceN names alternateSpace tintTransform attributes] عندما يحمل قاموس attributes في الفهرس 4 الإدخال /Subtype /NChannel.
- تنطلق قاعدة FontFile3 OpenType فقط عندما يتم الوصول إلى التيار عبر مفتاح أبوي اسمه 'FontFile3'، بحيث لا تتم وضع علامة على التيارات غير ذات الصلة التي تحمل بالصدفة /Subtype /OpenType.
- يحمل جدول PDFFeatureRules الآن 103 قواعد (99 + 4 جديدة).
v3.18.6 2026-05-17
- يتعرّف توافق إصدار PDF في وقت الحفظ والتحميل الآن على /AA (الإجراءات الإضافية) مع الوعي بنوع الحاوية: Catalog /AA (مشغّلات على مستوى المستند) -> PDF 1.4 Annot /AA (مشغّلات التعليقات) -> PDF 1.4 Page /AA (مشغّلات الصفحة) -> PDF 1.5
- Form-field /AA (PDF 1.2) يظل مغطى بعقد حفظ PDF 1.3 الحالي؛ لا حاجة لقاعدة.
- يحمل جدول PDFFeatureRules الآن 99 قاعدة (96 + 3 جديدة).
v3.18.5 2026-05-17
- يصنّف توافق إصدار PDF في وقت الحفظ والتحميل الآن بشكل صحيح Page /Tabs بوصفها ميزة PDF 1.5؛ كانت مُصنّفة سابقًا بشكل خاطئ بوصفها PDF 1.4. وثيقة تغييرات مواصفات PDF 1.4 (Adobe TN #5409) لا تُدرج /Tabs، كما أن جدول PDF 1.5 8.10 يُدخل "Tabs (Optional; PDF 1.5)".
- قاعدة جديدة: تُعتبر AcroForm /NeedAppearances ميزة PDF 1.5 وفقًا لجدول PDF 1.5 218.
- يحمل جدول PDFFeatureRules الآن 96 قاعدة (95 + 1 جديدة).
v3.18.4 2026-05-13
- تستخدم PDFlibZLib الآن دائمًا الواجهة الخلفية الكائنية الثابتة المدمجة لـ zlib-ng في إصدارات المكتبة العادية، مما يُزيل مسار الاحتياط المتبقي لـ System.ZLib.
- تشمل تغطية الانحدار لـ zlib-ng الآن حمولات بأحجام حدودية، وبيانات scanline تشبه PNG، وتيارات متعددة الكتل المُخزَّنة، وتيارات zlib المعروفة عبر مُنفذي اختبار Delphi و C++Builder.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 194/194، واجتاز C++Builder Win64x GoogleTest 58 اختبارًا مع تخطي اختبارين موجودين معتمدين على عينات.
v3.18.3 2026-05-12
- تعرّض عروض Delphi و C++Builder التي تُنشئ مخرجات PDF أو نصية الآن المستند المُولَّد تلقائيًا بعد الحفظ الناجح.
- تُبقي حزم التثبيت الآن على artifacts البناء بعيدًا عن مجلدات العرض وتجعل عينات C++Builder بالإضافة إلى وحدات DLL و ActiveX/OCX مكونات اختيارية؛ تُثبَّت الملفات المطابقة فقط عند اختيار المكون.
v3.18.2 2026-05-12
- تمسح الآن عروض EditFormField لـ Delphi و C++Builder قيمة /NeedAppearances قبل تحديث قيم الحقول، بحيث يحصل كل حقل نصي مُحرَّر على تيار مظهر طبيعي مُحدَّث في PDF المحفوظ.
- يُبقي هذا تيار /AP المحفوظ متزامنًا مع قيمة /V المُخزَّنة ويتجنب الاختلافات المعتمدة على العارض حيث يكشف التركيز على الحقل عن نص كان مفقودًا من المظهر الثابت للحقل.
v3.18.1 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ والتحميل الآن أيضًا على علامات /Ff على مستوى البت لحقول النماذج وبت AcroForm /SigFlags AppendOnly: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5
- لا يتم اتباع وراثة /Parent: فقط القواميس التي تحمل /Ff أو /SigFlags صراحةً تُفعّل القواعد.
- يحمل جدول PDFFeatureRules الآن 95 قاعدة (87 + 8 جديدة على مستوى البت).
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 191/191، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.18.0 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ والتحميل الآن أيضًا على تسع ميزات إضافية على مستوى المفاتيح الفرعية والبتات: علامات التعليقات على مستوى البت (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 مفاتيح فرعية مميزة للكتالوج والصفحة: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7
- يحمل جدول PDFFeatureRules الآن 87 قاعدة (78 على مستوى الفصل + 9 على مستوى المفاتيح الفرعية / البتات).
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 189/189، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.17.0 2026-05-10
- ثماني نقاط دخول إضافية لـ PDFlib writer تُوجَّه الآن عبر Phase 3 EnsureMinVersion بحيث يرفع إصدار المستند تلقائيًا إلى الحد الأدنى المطلوب للميزة الجاري إصدارها: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript actions) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - file attachments) SetXFAFromString (PDF 1.5 - XFA forms) AddSWFAnnotationFromFile (PDF 1.7 - RichMedia annotation)
- بالاقتران مع مجموعة v3.15.0 (SetTransparency و SetPageUserUnit و Encrypt و SetPageLayout)، تغطي PDFlib الآن ثلاث عشرة نقطة دخول للـ writer عالية الإصدار من البداية إلى النهاية.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 187/187، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.16.3 2026-05-10
- API جديدة في PDFlib: تُثبّت LockSaveVersion(Version) المستند على Version وتمنع EnsureMinVersion في Phase 3 على جانب الـ writer من الرفع التلقائي فوقه. تمسح UnlockSaveVersion القفل.
- بوابة وقت الحفظ لم تتغير: الميزات الصادرة عن الـ writer فوق الإصدار المقفول لا تزال تُنتج LastErrorCode 602 في وقت الحفظ، بدلاً من رفع الترويسة بصمت.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 184/184، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.16.2 2026-05-10
- تعرض ملفات PDF المُحمَّلة الآن عرضًا يقتصر على المُسهِم لاكتشاف الميزات في وقت التحميل عبر GetInformation(103) ("ContributorFeatures"). تحتوي القائمة فقط على الميزات التي يكون حدها الأدنى المطلوب من الإصدار أكبر تمامًا من HeaderVersion (المفتاح 100)، بحيث تُجيب مباشرة على "لماذا الإصدار الفعلي أعلى من ترويسة الملف؟".
- GetInformation(101) ("DetectedFeatures") لم تتغير ولا تزال تُدرج كل ميزة مطابقة بصرف النظر عن المساهمة.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 181/181، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.16.1 2026-05-10
- وُسِّعت تغطية اختبار اكتشاف جانب اللودر بستة fixtures اصطناعية إضافية: ExtGState شفاف داخل الصفحة (لا رفع للإصدار)، Catalog /MarkInfo (PDF 1.3 -> PDF 1.4)، /OCProperties + محتوى OCG (PDF 1.4 -> PDF 1.5)، /Type /3DStream (PDF 1.5 -> PDF 1.6)، fixture لمزيج ميزات متعدد، وفحص استقرار snapshot.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 179/179، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.16.0 2026-05-10
- تمر مستندات PDF المُحمَّلة الآن عبر مرور اكتشاف للإصدار يعتمد على المحتوى: يتم اجتياز كل كائن غير مباشر عبر جدول الميزة إلى الحد الأدنى للإصدار المستخدم في بوابة وقت الحفظ، ويُرفع FVersion فوق قيمة ترويسة %PDF-X.Y الحرفية عندما يتطلب المحتوى فعلًا إصدارًا أعلى. على سبيل المثال، إدخال /UserUnit للصفحة يرفع الإصدار الفعلي إلى PDF 1.6 حتى لو كانت ترويسة الملف تقول PDF 1.4.
- مفاتيح GetInformation جديدة: 100 تُعيد HeaderVersion (%PDF-X.Y الحرفي)، 101 تُعيد DetectedFeatures (الميزات المطابقة عند التحميل، مفصولة بـ CRLF)، 102 تُعيد AutoBumpedFeatures (الميزات التي فعّلت EnsureMinVersion على جانب الـ writer، مفصولة بـ CRLF).
- لا تتأثر بوابة وقت الحفظ: المستندات التي تم رفع إصدارها الفعلي عند التحميل، ثم تم تخفيضها صراحةً بـ SetInformation(0, ...)، لا تزال تُنتج LastErrorCode 602 في وقت الحفظ.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 173/173، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.15.0 2026-05-10
- نقاط دخول الـ writer التي تُنتج ميزات تتطلب حدًا أدنى معينًا من إصدار PDF تقوم الآن برفع إصدار PDF للمستند تلقائيًا. استدعاء SetTransparency على مستند مُحدد بوصفه PDF 1.3 يُرقّي الآن الترويسة إلى PDF 1.4 بدلاً من فشل الحفظ بـ LastErrorCode 602.
- تم توصيل نفس الرفع التلقائي بـ SetPageUserUnit (>=1.6)، و Encrypt بـ Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 على التوالي)، والمتغيرات ثنائية الصفحة لـ SetPageLayout (>=1.5).
- تغيير سلوك مقارنة بـ 3.14.x: التطبيقات التي كانت تعتمد سابقًا على بوابة v3.12.6 "هدف الحفظ يرفض الميزات الصادرة عن الـ writer" تنجح الآن في الإصدار المرفوع. ملفات PDF المُحمَّلة التي تحتوي بالفعل على ميزات إصدار أعلى لا تزال تمر عبر بوابة وقت الحفظ الحالية، لذلك تحميل PDF موسوم واختيار PDF 1.3 لا يزال يفشل بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 170/170، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.14.3 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ الآن أيضًا على أنواع قاموس PDF 1.6 ثلاثية الأبعاد المتبقية (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) وأنواع التصنيف الفرعي لتعليقات PDF 1.7 Redact و RichMedia و Projection بالإضافة إلى قواميس /Type /Requirement و /ReqHandler المرافقة.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 168/168، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.14.2 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ الآن أيضًا على ميزات PDF 1.5: نماذج /XFA و /AlternatePresentations وشجرة أسماء /Renditions وقواميس الوسائط المتعددة /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers ونوع التصنيف الفرعي لتعليق Screen.
- حفظ بوصفه PDF 1.4 يرفض الآن المستندات التي تحمل هذه الميزات بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 166/166، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.14.1 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ الآن أيضًا على ميزات PDF 1.4: قواميس PDF الموسومة /StructTreeRoot /MarkInfo و StructElem، وإدخالات /Lang للمستند و /Tabs للصفحة، وقواميس /OutputIntents و /OutputIntent، توقيع حقوق الاستخدام /UR3، وأنواع التصنيف الفرعي للتعليقات في PDF 1.4 Polygon و PolyLine و Caret و Ink و Popup و Watermark.
- حفظ بوصفه PDF 1.3 يرفض الآن المستندات التي تحمل هذه الميزات بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 165/165، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.14.0 2026-05-10
- يتعرّف توافق إصدار PDF في وقت الحفظ الآن أيضًا على ميزات PDF 1.3 مثل التظليل السلس وكائنات الدوال وفضاءات ألوان ICCBased و DeviceN وإدخالات الصفحة /TrimBox /BleedBox /ArtBox و /ToUnicode CMaps وإرفاق الملفات وتعليقات /Sound و /Movie وقواميس /Type /Filespec و /Type /EmbeddedFile ومفاتيح /Group /EF /Alternates /Mask وإجراءات JavaScript.
- يقوم المستدعون لـ PDF 1.2 الآن بالحفظ تحت عقد PDF 1.3: تتم الحفاظ على ترويسة %PDF-1.2 الحرفية، ولكن البوابة تقبل ميزات PDF 1.3. ميزات PDF 1.4 وما بعده لا تزال مرفوضة بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 162/162، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.13.0 2026-05-10
- تمت إعادة هيكلة بوابة توافق إصدار PDF التي ترفض ميزات الإصدارات اللاحقة في وقت الحفظ إلى وحدة مخصصة بحيث يمكن لمجموعة القواعد النمو دون اضطراب نواة المستند.
- لا تغيير في السلوك المرئي للمستخدم مقارنة بـ v3.12.7: ميزات خارج الإصدار نفسها لا تزال مرفوضة بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 155/155، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.12.7 2026-05-09
- تم توسيع تغطية الاختبار الآلي لتدفق عمل العرض المباشر PdfToImage في كل من مجموعتي Delphi DUnitX و C++Builder GoogleTest.
- يُسجّل الآن مُنفّذ اختبار Delphi VCL GUI fixtures الخاصة بـ Syntax و XRef، بما يطابق تغطية مُنفّذ الكونسول.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 147/147، واجتاز C++Builder Win64x GoogleTest 57/57.
v3.12.6 2026-05-09
- حفظ المستند بوصفه PDF 1.3 أو 1.4 أو 1.5 أو 1.6 أو 1.7 يفرض الآن الإصدار المُحدد بوصفه عقد إخراج الحفظ الكامل.
- تُزيل عمليات الحفظ الكاملة تجاوزات /Version في الكتالوج، وتُزيل إدخالات الامتداد وبيانات meta-data غير المدعومة في الكتالوج للأهداف الأدنى، وتقمع تيارات XMP metadata لـ PDF 1.4 عند الحفظ بوصفه PDF 1.3.
- تفشل SaveToFile و SaveToString و SaveToStream الآن بـ LastErrorCode 602 عندما يكون إصدار هدف PDF المحدد أقل من الميزات التي لا تزال موجودة في المستند، مثل الشفافية والمحتوى الاختياري و JPX و UserUnit و 3D أو ميزات AES crypt-filter.
v3.12.5 2026-05-09
- تحسين تحليل سلاسل PDF 1.7 الحرفية بحيث تتجاهل تسلسلات الإفلات غير المعروفة الشرطة المائلة العكسية كما تتطلب المواصفة.
- تستهلك إفلاتات السلاسل الحرفية الثُمانية الآن أرقامًا ثُمانية فقط وتُبقي على رقم غير ثُماني تالٍ كبيانات سلسلة عادية.
- تمت إضافة تغطية الانحدار لإفلاتات السلاسل الحرفية غير المعروفة وتسلسلات الإفلات المختلطة الثُمانية/غير الثُمانية.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 141/141.
v3.12.4 2026-05-09
- تحسين التحليل اللغوي لـ PDF 1.7 بحيث تتوقف كائنات الأسماء الآن بشكل صحيح عند فاصل القوس المعقوف الأيمن.
- إصلاح تحميل SmartAccess لإدخالات الكائنات المضغوطة لتيار xref التي يكون رقم تيار كائنها أكبر من طول بايت PDF.
- تمت إضافة تغطية الانحدار لفواصل اسم القوس المعقوف الأيمن وإدخالات xref stream المتناثرة للكائنات المضغوطة.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 139/139.
v3.12.3 2026-05-08
- تحسين توافق المستندات المُشفّرة لـ PDF 1.7 لملفات مُعالج الأمان القياسية التي تستخدم StrF أو StmF أو EFF أو Identity أو None أو crypt filters مُسماة بأسلوب StdCF.
- تحترم تيارات metadata الآن EncryptMetadata=false أثناء تدفقات عمل فك التشفير والتشفير والنسخ/الحفظ بدلاً من معالجتها مثل التيارات العادية.
- تحمل تيارات الملفات المضمّنة الآن /Type /EmbeddedFile وتستخدم مسار قرار crypt-filter للملفات المضمّنة عند تحميل أو حفظ المستندات المشفّرة.
- تروج تيارات الملفات المضمّنة الخارجية الآن FDecodeParms إلى DecodeParms عند ترقية FFilter إلى Filter، مما يُحافظ على معاملات فك ترميز التيار.
- تكتب ملفات PDF المشفّرة الجديدة بـ AES الآن قيم Length لـ crypt-filter بوصفها أطوال بت، بما يطابق عقد قاموس crypt filter لـ PDF 1.7.
- تحافظ قيم Prev/XRefStm لتيار XRef والإزاحات الرقمية الكبيرة الآن على دقة 64 بت عبر مسارات المُحلّل و SmartAccess.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 137/137.
v3.12.2 2026-05-08
- تحسين توافق فك ترميز تيار PDF 1.7. يحترم فك ترميز التيار العام الآن /DP بوصفه اسم بديل لـ DecodeParms، ويحل إدخالات مصفوفة معاملات فك الترميز غير المباشرة، ويقبل اختصارات الـ filter القياسية /AHx و /LZW.
- تكتب الآن مخرجات PDF للملفات الكبيرة إزاحات xref و startxref و linearization و ByteRange للتوقيع الرقمي عبر مسارات تنسيق 64 بت بدلاً من تضييق هذه القيم عبر مساعدات أعداد صحيحة 32 بت.
- تُعامل المستندات المُحمَّلة الآن إدخال /Version في الكتالوج بوصفه إصدار PDF الفعلي عندما يكون أحدث من إصدار ترويسة الملف.
- لم تعد ذيول xref-stream المُعاد كتابتها تحتفظ بمفاتيح DecodeParms الخاصة بالتيار فقط عندما تحفظها PDFlibPas بوصفها قواميس ذيل تقليدية.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 134/134.
v3.12.1 2026-05-06
- تفتح ملفات PDF المُولَّدة الآن مع تحديد حجم الصفحة الأولى وفقًا للارتفاع المتاح لنافذة العارض، بحيث تكون الصفحة الأولى بأكملها مرئية من الأعلى إلى الأسفل بأكبر تكبير يناسب النافذة. قم بتكوين OpenAction مخصص (SetOpenActionDestination أو SetOpenActionMenu أو SetOpenActionJavaScript) على المستند لتجاوز هذا الافتراضي.
v3.12.0 2026-05-06
- تضمن الواجهات الخلفية الثابتة لـ Windows الآن كائنات libjpeg-turbo NASM SIMD لـ Win32 و Win64، بالإضافة إلى كائنات zlib-ng x86 SIMD dispatch لمجموعة zlib-ng الخاصة بـ Win64x.
- أعيد تصميم سكريبتات إعادة بناء zlib-ng بحيث تقوم بنية bcc64x لـ Win64x وبنية MSVC التشخيصية بتجميع ملفات المصدر العامة و SSE2 و SSSE3 و SSE4.1/SSE4.2 و PCLMULQDQ و AVX2 بأعلام ميزة لكل ملف بدلاً من الاعتماد على مفتاح مُجمِّع عالمي واحد.
- تمت إضافة stubs لـ CRT بمحاذاة 32 بايت لـ malloc/calloc/realloc/free للمكتبات C الثابتة وإصلاح TPDFJPEGImage.Compress لتحرير مخازن jpeg_mem_dest عبر نفس مسار free لـ C الذي خصصها.
- تم توسيع ملاحظات التحقق العامة للإشارة إلى التغطية الآلية الصارمة وراء هذا الإصدار: بنيات المكتبة، ودورات ضغط round trips، ومخرجات HelloWorld /FlateDecode، وعرض JPEG، وتدفقات عمل الصور، والخطوط، والنماذج، والأمان، والتوقيع، والطباعة، وتدفقات العمل المشتقة من عروض C++Builder.
v3.11.0 2026-05-05
- تم التبديل لضغط Flate و فك الضغط على Windows إلى zlib-ng في وضع متوافق مع zlib. يربط الآن Win32 و Delphi Win64 و C++Builder Win64x مجموعات كائنات zlib-ng الثابتة المتطابقة مع ABI من Lib\thirdparty\Win32 و Lib\thirdparty\Win64 و Lib\thirdparty\Win64x.
- مسار Win64 لم يعد يمر عبر وحدة Delphi's System.ZLib، لذلك يمكن لضغط/فك ضغط تيار PDF الاستفادة من الواجهة الخلفية zlib-ng تمامًا مثل بنية 32 بت.
- تمت إضافة كائن jisr zlib-ng صغير لبنيات Win64 بحيث يحافظ كود Pascal على نقاط دخول مستقرة متوافقة مع zlib بينما يستهلك Delphi و C++Builder مجموعات الكائنات الخاصة بهما المتوافقة مع الرابط.
- تم تحديث جميع مشاريع عرض C++Builder لتعريف PDFLIB_CPPBUILDER، بما يطابق مُنفّذ GoogleTest ويمنع عروض Win64x من ربط كائنات Delphi Win64 zlib-ng.
v3.10.3 2026-05-01
- تم توسيع مجموعة C++Builder GoogleTest لتغطية كل عرض تحت Demo\C++Builder. نمت تخطيطات المرحلة 1 ذات الـ 7 fixtures إلى 15 fixtures / 52 حالة GoogleTest، جميعها ناجحة على Win64x. العروض المُغطاة حديثًا: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (renderer switch), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging.
v3.10.2 2026-05-01
- تمت إضافة مُنفّذ C++Builder GoogleTest تحت Tests\C++Builder الذي يُمارس Lib\PDFlibrary.pas عبر نفس رؤوس HPP المُصدَّرة بـ {$JPHNE} المستخدمة بواسطة عروض C++Builder. تعكس المرحلة الأولى سبعة سيناريوهات أساسية في Delphi (HelloWorld، DrawShapes، CreateTable، PdfEncrypt، ExtractText، PdfSigning، عرض PdfToImage) كـ 17 حالة GoogleTest، جميعها ناجحة على Win64x.
- تم توسيع مجموعة Delphi DUnitX بـ Tests.Print التي تُغطي عروض PrintPDF و ShowPrinterBins (تعداد الطابعة الافتراضية، إعداد طابعة مخصصة، خيارات الطباعة، مهمة طباعة إعادة توجيه إلى ملف) واختبار renderer-switch في Tests.Render يُمارس اختيار محرك GDI+ / PDFium / Cairo لعرض MultiFunction على نفس مصدر PDF.
v3.10.1 2026-05-01
- تمت إضافة 57 اسم حجم صفحة مُسمى إلى SetPageSize بحيث تعمل أسماء أحجام الصفحات القياسية نفسها هنا أيضًا: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
v3.10.0 2026-04-30
- تمت إضافة إصدارات C++Builder أصلية لكل عينة Delphi تحت Demo. يمكن الآن بناء وتشغيل عروض إنشاء PDF ومعالجة الصفحات والخطوط والصور والأمان والتوقيع والعرض والطباعة من C++Builder دون أي غلاف على جانب Delphi.
- يعيش كل عرض جديد في Demo\C++Builder\<Name>\ كمشروع كونسول يستهلك Lib\PDFlibrary.pas مباشرة ويشحن ملفات الإدخال اللازمة للتشغيل.
- تمت إضافة Readme.txt موجز باللغة الإنجليزية إلى كل مجلد عرض Delphi يصف ما يعرضه العرض وواجهة API التي يُركّز عليها وكيفية تشغيله؛ نظرة عامة HTML على Demo\Delphi\index.html ترتبط بجميعها مُجمَّعة حسب الموضوع.
- مرآة لنفس Readme.txt لكل عرض C++Builder مع قسم Run مُعاد كتابته لتدفق عمل الكونسول (وسائط argv بدلاً من Open/SaveDialogs)؛ Demo\C++Builder\index.html مطابق يُدرج كل عرض C++Builder بنفس مجموعات الموضوع.
- إصلاح تسرب ذاكرة في عرض ImportEMF (تم إنشاء مثيل TPDFlib ولكن لم يتم تحريره أبدًا).
v3.9.14 2026-04-30
- إصلاح عرض نسخ نطاق الصفحات بحيث ينسخ الصفحات فعلًا بدلاً من الإبلاغ دائمًا عن الفشل.
- تم تنظيم عروض النص المُغلَّف وترقيم HTML بحيث يُركّز كل منها على واجهة API الخاصة به ويعمل من زر واحد.
- إعادة تسمية مشروعي عرض (EmbeddedFonts و PdfPermission) بحيث تتطابق الملفات التنفيذية المُجمَّعة مع أسماء المجلدات بدلاً من أسماء النموذج الأولي القديمة.
v3.9.13 2026-04-30
- إصلاح خطأ موضع التيار في قارئ المخزن المؤقت الداخلي: قراءات الكلمة المكونة من بايتين كانت تُقدّم مؤشر القراءة بأربعة بايتات بدلاً من بايتين. في المخازن المؤقتة الأطول من بايتين، كانت القراءات اللاحقة تهبط على الإزاحة الخاطئة وتُعيد بيانات غير صحيحة بصمت. كان التأثير الأكثر وضوحًا عند تحليل هياكل البيانات الثنائية التي تتداخل فيها قراءات البايت والكلمة.
- تقديم مجموعة اختبار DUnitX آلية (مُنفّذو الكونسول و VCL GUI) تُغطي وحدات الأدوات المساعدة — buffer و AES و ZLib و Unicode و digest hashing — وتدفقات العمل على مستوى المكتبة بما في ذلك إنشاء المستند والحفظ إلى ملف والحفظ إلى تيار، ودورات تحميل round-trips، وتشفير AES-128/AES-256.
v3.9.12 2026-04-30
- يستخدم عرض الصور في GDI+ الآن بشكل افتراضي تداخلًا ثنائي التكعيب سلسًا وعالي الجودة عند تحجيم الصور النقطية إلى دقة الشاشة أو دقة التصدير. كان الافتراضي السابق هو nearest-neighbour، الذي ينتج عنه آثار سلم درجي مرئية على الصور الصغيرة (الشعارات والصور المصغرة) المُكبّرة لمعاينة الشاشة أو التصدير عالي DPI. يمكن للمستدعين الذين يفضلون الوضع الأكثر حدة nearest-neighbour استعادة السلوك القديم عبر SetGDIPlusOptions.
v3.9.11 2026-04-30
- إصلاح عرض Cairo لصور PDF التي تستخدم شفافية مفتاح اللون (مصفوفة نطاق لون /Mask في قاموس الصورة). سابقًا، عندما تحتوي الصفحة على صورة بهذا الشكل من الشفافية، كان مُصيّر Cairo يُهمل الصورة تمامًا بدلاً من تركيبها مع خلفية الصفحة. يستمد الإصلاح قناة ألفا لكل بكسل من نطاقات مفتاح اللون المُعلنة ويعرض النتيجة كصورة شفافة، مُنتجًا مخرجات متسقة بصريًا مع مُصيّر GDI+.
v3.9.10 2026-04-30
- إصلاح انحدار عرض Cairo حيث كان كل محتوى الصفحة الذي يلي تسلسل صورة مقصوصة محصورًا بشكل غير صحيح في مستطيل قص الصورة. صفحات PDF التي تحفظ حالة الرسومات، وتطبق مسار قص، وترسم صورة، ثم تُستعيد الحالة — تقنية تخطيط شائعة للصور المؤطرة أو المحدودة — كانت تعرض كل النصوص والأشكال والرسومات اللاحقة داخل المنطقة المقصوصة فقط. تحفظ Cairo state save و restore الآن بشكل صحيح إلى مُشغّلات PDF q/Q، بحيث يتم تجاهل منطقة القص بعد رسم الصورة.
v3.9.9 2026-04-29
- تمت إضافة محرك عرض PDF يعتمد على Cairo بوصفه خيار عرض ثالث جنبًا إلى جنب مع GDI+ و PDFium. استدعِ SelectRenderer(2) قبل العرض لتنشيطه؛ يتطلب المحرك cairo.dll من مجلد DLL\Cairo المُجمَّع. يدعم عرض Cairo نفس أوضاع الإخراج التي يدعمها GDI+: تصدير ملف الصورة النقطية والتيار (BMP و JPEG و PNG و GIF و TIFF و G4 TIFF)، وعرض سياق الجهاز، والإخراج المباشر للطابعة.
- يعرض عرض MultiFunction View/Print الآن أداة اختيار مُصيّر ثلاثي الاتجاهات بحيث يمكن للمستخدمين مقارنة مخرجات GDI+ و PDFium و Cairo جنبًا إلى جنب على نفس المستند دون أي تغييرات في الكود.
v3.9.8 2026-04-29
- تم قمع تشخيصين مُجمِّع زائفين في shim لـ Win32 C-runtime ظهرا على RAD Studio 13.1 وما بعده. تم رفع تحذير إلغاء (W1000) لأن حارس قدرة إصدار المُجمِّع لم يتم نشره إلى مُجمِّعين أحدث من Delphi 2009، مما تسبب في تجميعهم مقابل واجهة API لمدير الذاكرة المُلغاة. تم رفع تلميح متغير غير مستخدم (H2164) لمتغير توافق داخلي يحتاجه فقط بنيات Delphi 7؛ يتم تحديد نطاقه الآن إلى الكتلة الشرطية لذلك الإصدار. كلا المشكلتين تشخيصيتان فقط دون تأثير وقت التشغيل.
v3.9.7 2026-04-29
- تمت إضافة عرض صفحة اختياري يعتمد على PDFium على Windows، بما في ذلك عرض تيار BMP، وعرض سياق الجهاز، وعرض الذاكرة، وإخراج الطابعة.
- تم تحديث عرض Delphi MultiFunction View/Print مع أداة اختيار مُصيّر بحيث يمكن للمستخدمين التبديل بين مُصيّر GDI+ الحالي و PDFium.
v3.9.6 2026-04-29
- تمت إضافة سكريبتات Inno Setup منفصلة لحزمة PDFlibPas الكاملة وحزمة التجربة، مع استثناءات تُركّز على الإصدار للبيانات الوصفية لمراقبة المصدر، ومخرجات البناء، وذاكرة التخزين المؤقت للـ IDE، وملفات الوكلاء المحلية، وأشجار مصدر الطرف الثالث المُجمَّعة التي ليست جزءًا من الحزمة المُشحونة.
- يبني مُثبِّت التجربة الآن ويُحزّم مكتبات ثنائية تجريبية لـ RAD Studio 11.3 و 12.3 و 13.1، بالإضافة إلى عروض Delphi التجريبية، قبل توليد الملف التنفيذي للإعداد.
v3.9.5 2026-04-29
- إصلاح بنيات مكتبة Win32 تحت RAD Studio 9.0 / Delphi XE2. كان سكريبت البناء يُمرر علم دليل إخراج DCU الذي يوجد فقط من Delphi 2010 وما بعده؛ فسّر مُجمِّع XE2 العلم بشكل مختلف، مُنتجًا مسار إخراج مُشوَّش وخطأ فادح قبل معالجة أي ملف مصدر. يختار السكريبت الآن العلم المناسب تلقائيًا بناءً على إصدار المُجمِّع الهدف.
- تصحيح حارس إصدار مُجمِّع ذي صلة في مصدر المكتبة كان يستدعي دالة وقت تشغيل مُؤهَّلة بالاسم تم إدخالها في XE4 تحت شرط XE2+. بنيات تستهدف XE2 و XE3 تحل الآن استيراد التوافق الصحيح بدلاً من ذلك.
v3.9.4 2026-04-29
- إصلاح إعداد الطابعة للطابعات الشبكية والمُشتركة في الخادم بتطبيق إعدادات صينية الورق ووسائط الورق و duplex والجودة وخيارات الطباعة الأخرى عبر مقبض DEVMODE للطابعة بدلاً من مقبض سياق جهاز الطابعة.
v3.9.3 2026-04-29
- تم تحديث الواجهة الخلفية AES المُجمَّعة إلى مصادر Brian Gladman's 2018 AES على كل من Win32 و Win64. تسمح سكريبتات البناء القابلة لإعادة الإنتاج الآن بإعادة بناء كائنات AES الثابتة من المصدر في أي وقت. تم اكتشاف وإصلاح خلل ABI في bindings Pascal أثناء العملية: كانت دوال تشفير وفك تشفير AES-CBC تفتقر إلى إعلان اصطلاح استدعاء C الخاص بها، لذلك مرّرت بنيات Win32 الوسائط بصمت بترتيب سجلات خاطئ، مما قد يُنتج مخرجات مشفّرة غير صحيحة. لم تتأثر بنيات Win64 لأن المنصة تفرض اصطلاح استدعاء موحدًا.
- تم تقوية سكريبتات إعادة بناء الطرف الثالث بحيث يمكن إطلاق سكريبتات zlib و JPEG و CRT-stub القائمة على MSVC من جذر المستودع وكذلك من دليل thirdparty؛ سابقًا كانت تتطلب تعيين دليل العمل إلى مجلد thirdparty.
v3.9.2 2026-04-29
- تم ترقية الواجهة الخلفية لـ JPEG 2000 من OpenJPEG 1.5 القديم إلى OpenJPEG 2.5.4 على كل من Win32 و Win64. تستخدم كلتا المنصتين الآن ربط الكائنات الثابتة، بحيث يعمل تشفير وفك تشفير JPEG 2000 دون DLL وقت تشغيل إضافي. يجلب الكوديك الحديث معالجة ترويسة JP2/J2K الحالية، وواجهة برمجة تطبيقات تيار مُدفوعة بـ callback، وإصلاحات الأخطاء والأمان المتراكمة من المشروع المنبع. واجهة TJpeg2000Bitmap العامة لم تتغير.
v3.9.1 2026-04-29
- إصلاح عرض صفحة JPEG وتصدير الصور بعد ترقية libjpeg-turbo، استعادة تحويل PdfToImage JPG ومخرجات TPDFJPEGImage.SaveToStream على Win32 و Win64.
- تصحيح bindings ABI لـ libjpeg-turbo لـ Win32 بحيث تتطابق callbacks، ومحاذاة الهيكل، وحقول boolean، ووجهات JPEG المدعومة بالذاكرة مع libjpeg-turbo 3.1.90.
- إصلاح فك ضغط تيار FlateDecode في Win32 مع الواجهة الخلفية zlib 1.3.2 المُجمَّعة، استعادة تحميل تيار xref لـ PDF للملفات مثل عينة مستند PdfToImage.
v3.9.0 2026-04-29
- تم ترقية الواجهة الخلفية لـ JPEG 2000 المُجمَّعة من OpenJPEG 1.5 القديم إلى OpenJPEG 2.5.4. يستخدم تحميل وحفظ JPEG 2000 الآن الكوديك الحديث، وواجهة برمجة تطبيقات تيار مُدفوعة بـ callback، ومعالجة ترويسة JP2/J2K الحالية مع الحفاظ على واجهة TJpeg2000Bitmap العامة.
- يختار إخراج JPEG 2000 الآن عدد دقة OpenJPEG صالحًا للصور الصغيرة تلقائيًا، ولم تعد الواجهة الخلفية الثابتة لـ Win32 تعتمد على صادرات مساعد MSVCRT المفقودة.
v3.8.1 2026-04-29
- تم القضاء على جميع تحذيرات W1028 التجميلية الـ 16 "Bad global symbol definition" لـ linker على Win32 و Win64. إعادة التسمية على مستوى المصدر تُزيل التكرارات الزائدة على جانب Pascal (يتم الآن حل jpeg_std_error و jmemnobs allocator stubs فقط من طبقة obj)؛ الرموز obj الثلاثة المتبقية لـ bcc32 / vc64 (jpeg_natural_order و jpeg_aritab و jpeg_nbits_table) التي يجب أن تظل مُحلّلة عبر الرابط مقابل بيانات على جانب Pascal تُجرَّد الآن من أسماء رموز COFF عبر مرور ما بعد المعالجة بواسطة ObjConv خلال thirdparty\build-jpeg-vc64.bat. لا تغيير في واجهة API العامة؛ مخرج linker نظيف لكل من بنيات Delphi Win32 و Win64.
v3.8.0 2026-04-29
- تم ترقية كوديك Win64 JPEG من libjpeg بأسلوب IJG إلى libjpeg-turbo 3.1.90، مكمّلًا هجرة JPEG التي بدأت في v3.7.0 (Win32). يشترك مساري Win32 و Win64 الآن في نفس كوديك JPEG الحديث، مع نفس حلقات SIMD المُحسَّنة وأكثر من 30 إصلاح CVE / fuzz متراكم من المنبع. واجهة API العامة لـ PDFlibPas لم تتغير.
v3.7.0 2026-04-28
- تم ترقية كوديك Win32 JPEG من IJG libjpeg-6b إلى libjpeg-turbo 3.1.90. تشفير/فك تشفير JPEG أسرع بشكل ملحوظ عبر حلقات SIMD المُحسَّنة، بالإضافة إلى أكثر من 30 إصلاح CVE / fuzz متراكم في المنبع libjpeg-turbo. واجهة API العامة لـ PDFlibPas (فئة TPDFJPEGImage، دوال DumpJPEG) لم تتغير؛ تعمل مسارات الكود الحالية لـ PDF/JPEG بشكل أسرع دون أي تغييرات في المصدر.
v3.6.0 2026-04-28
- تم ترقية Win32 zlib من 1.2.x إلى 1.3.2. يشمل أكثر من 25 إصلاح CVE / fuzz قياسي متراكم في المنبع منذ 1.2.8، بالإضافة إلى نقاط دخول inflateBack9 / inflateTree9 الجديدة المستخدمة بواسطة تيارات نافذة 64 بت. واجهة API العامة لـ PDFlibPas (DeflateStr / InflateStr / InflateStrParms) لم تتغير.
- مسار Win64 zlib لم يتغير في هذا الإصدار - لا يزال يستخدم وحدة Delphi-bundled System.ZLib.
- تم تنشيط shim لـ Win64 link-time CRT PDFlibCLibs.pas (المُدخل في v3.5.0) لمسار Win32 zlib، مما يوفر رموز memcpy / memset / malloc / free التي تشير إليها ملفات obj الجديدة لـ zlib 1.3.2.
v3.5.0 2026-04-28
- تم تزويد البنية التحتية لبناء جديد لمكتبات الصور / الضغط C المُجمَّعة: zlib 1.3.2 و libjpeg-turbo 3.1.90 و libtiff 4.7.1. سكريبتات البناء لكل من Embarcadero bcc32 (Win32) و MSVC cl.exe (Win64) تعيش في Lib/thirdparty/ جنبًا إلى جنب مع أشجار المصدر، بحيث يمكن لأي شخص لديه RAD Studio + VS2022 إعادة بناء ملفات obj الثابتة من مصدر نظيف.
- تمت إضافة البنية التحتية للبناء لـ OpenJPEG 2.5.4. يتم جلب شجرة مصدر OpenJPEG نفسها بشكل مستقل بواسطة المستخدم (git clone uclouvain/openjpeg إلى Lib/thirdparty/OpenJPEG/) بحيث يمكن ترقيتها دون لمس تكوين بناء PDFlibPas.
- تمت إضافة Lib/PDFlibCLibs.pas، وهي طبقة CRT وقت الربط لـ Win64 يستخدمها backend Win64. وهي تسد الفجوة بين ملفات C obj المترجمة بواسطة MSVC وروابط Delphi Win64 (dcc64 / Win64x ld.lld / BCB ilink64)، التي لا تجلب msvcrt.dll تلقائيًا.
v3.4.0 2026-04-28
- تم تقوية إنشاء مفتاح التشفير، ومتجه التهيئة لـ AES، وكتلة أذونات Perms ضد مصادر الأرقام العشوائية القابلة للتنبؤ. ملفات PDF المشفّرة المُنتجة على الأنظمة التي بدأت بالقرب من نفس وقت الجدار الزمني لم تعد قابلة للارتباط بشكل تافه؛ مستندات AES-256 تحتفظ الآن بقوة المفتاح الكاملة.
- تم تقوية تحليل قاموس الصورة ضد ملفات PDF المشوَّهة أو المعادية التي تُعلن عن أعداد Width و Height و BitsPerComponent أو مكونات DeviceN غير معقولة. تُقصّ القيم خارج النطاق قبل أي حسابات على المخزن المؤقت للبكسل، مما يمنع الأعطال عند فتح مثل هذه الملفات.
- تم تقوية اجتياز المرجع المتقاطع وشجرة الصفحات ضد المستندات التي تشكّل سلاسل xref /Prev أو روابط /Parent للصفحة حلقة أو تكون عميقة بشكل مفرط. يرفض القارئ الآن الهياكل المشوهة بشكل نظيف بدلاً من التكرار حتى نفاد المكدس.
v3.3.1 2026-04-27
- تم تبسيط سكريبتات بناء Windows لكل مكون. لم تعد مجلدات DLL/ و OCX/ و Dylib/ تحمل متغيرات منفصلة build12-* / build13-*: تحتوي كل منصة الآن على سكريبت build-Win32 / build-Win64 واحد يثبت على أحدث RAD Studio ويقبل وسيطة "debug" اختيارية.
- تمت إضافة تعليقات منطقية مضمّنة حول إصلاحات عرض PDFlibRenderer.pas التي كانت موجودة بالفعل في خط الأساس الأولي لـ Git. توثق التعليقات سبب قيام SetPen بتحجيم عرض الضربات بواسطة التحويل النشط للوحة الرسم، ولماذا يجب على مُشغّلات Type 3 font CharProc d0/d1 استهلاك معاملاتها. لم يتغير سلوك وقت التشغيل.
v3.3.0 2026-04-26
- إصلاح عرض الضربة المُحوَّلة في PDFlibRenderer.pas. يطبق SetPen الآن مقياس التحويل الحالي للوحة الرسم على عروض خطوط PDF قبل استدعاء Picasso، مما يمنع الضربات الكبيرة جدًا أو الصغيرة جدًا على المسارات التي تم تحويل إحداثياتها بالفعل. يُصلح هذا مخططات glyph لـ Type 3 التي يمكن أن تُعرض ككتل سميكة وغير منتظمة.
- إصلاح معالجة CharProc d0/d1 لخط Type 3 في مُحلِّل تيار المحتوى. يستهلك d0 الآن معاملي العرض الخاصين به، ويستهلك d1 معاملات العرض / مربع الإحاطة الستة الخاصة به قبل تشغيل أوامر الرسم اللاحقة، مما يمنع المعاملات القديمة من إفساد هندسة glyph أو المسار.