سجل التغييرات
تاريخ الإصدارات
تاريخ إصدارات مكتبة PDFlibPas. المدخلات مرتبة من الأحدث إلى الأقدم؛ ويتبع كل إصدار نظام الترقيم الدلالي وفقاً لسياسة الإصدار في المشروع.
آخر إصدار
- أحدث إصدار: v3.75.6; تاريخ الإصدار: 2026-06-23
Version 3.333.0
Added
- فحص المراجعات التزايدي. يغطّي التوقيع وحدات بايت المراجعة التي كُتب فيها، وكل ما يُلحق بعدها هو تحديث مستقلّ يقرّر محتواه ما إذا كان التوقيع لا يزال ساريًا للمستند في حالته الحالية. يرتّب كلٌ من
GetDocumentRevisionCountوGetDocumentRevisionStartوGetDocumentRevisionEndتلك المراجعات، ويُخبرGetSignatureRevisionIndexبأيّها ينتهي التوقيع - تُبلِّغ
GetDocumentRevisionKindعمّا فعله تحديثٌ ما، باعتباره الأشدّ تأثيرًا بين الكائنات التي لمسها: حفظ دفتري، مواد تحقق، طابع زمني للمستند، توقيع، حقل نموذج، تعليق توضيحي، أو محتوى المستند. لذا لم يعد إضافة مواد تحقق للتحقق طويل الأمد يبدو كتحرير المستند - تسرد
GetDocumentRevisionChangesكل كائن أضافه التحديث أو غيّره أو حذفه، مع ما هو عليه كلٌّ منها، ولقاموس مُغيَّر أيّ مفاتيح تختلف فعليًا - تُبلِّغ
GetDocumentRevisionsCompleteعمّا إذا كان التاريخ بأكمله قابلًا للاسترداد. تترك سلسلة مقطوعة أو دائرية أو أطول مما سيتبعه القارئ أقدم التحديثات غير مرئية، وعندئذ تكون العدّات حدًا أدنى لا إجابة - يُبلَّغ عن الكائن الذي لا يمكن قراءة نسخته السابقة، أو لم تُقارَن هيكلته مطلقًا، باعتباره غير محدّد بدلًا من كونه غير ضار: التحديث الذي يعيد كتابة صفحة تاركًا قاموسها دون مساس لا يُختلَط عليه بأنه إعادة تعبئة
Version 3.332.0
Added
- تُرقّي
ApplyPAdESLongTermValidationملف PDF موقّعًا بالفعل إلى PAdES-B-LT في استدعاء واحد. إذ تبني مسار شهادة الموقِّع من التوقيع نفسه، وتجمع مواد OCSP وCRL لكل ربطة عبر العناوين التي تسمّيها الشهادات، وتكتب الشهادات وبيانات الإبطال إلى مخزن أمان المستند مع إدخال VRI للتوقيع، في تحديث تزايدي واحد. تكتبApplyPAdESLongTermValidationToStreamالنتيجة إلى دفق بدلًا من ملف - يمكن ضبط السلوك عبر قناع خيارات
PADES_LTV_*: هل يُكتب إدخال VRI، هل تُسأل مجيبات OCSP، هل يُرجع إلى CRLs، هل تُتبع عناوين المُصدِرين لإكمال المسار، وهل يُتخطّى التحقق من الإبطال لجذر مُصدَّر ذاتيًا - يعالج اسم حقل فارغ كل توقيع في مراجعة واحدة؛ أما الحقل المُسمّى فيعالج ذلك التوقيع وحده
- تُبلِّغ
GetPAdESLTVCertificateCountوGetPAdESLTVCRLCountوGetPAdESLTVOCSPCountوGetPAdESLTVErrorعمّا جمعه الاستدعاء الأخير ولماذا توقف مبكرًا، لذا تظهر النتيجة الجزئية عبر مُجيبة يتعذّر الوصول إليها بدلًا من أن تُتجاهل بصمت - تُكتب المواد المطابقة لما هو مُرحَّل بالفعل مرة واحدة ويُشار إليها بكل توقيع يحتاجها، ويُبلَّغ عن التوقيع الذي لا يحمل شهادة قابلة للقراءة بدلًا من تمريره على أنه ترقية ناجحة
Version 3.331.0
Added
- يحمل التوقيع مسار الشهادة الخاص به، لذا يمكن قراءة المواد التي يحتاجها ملف تعريف التحقق طويل الأمد من الملف الموقّع وحده. ترجع
GetSignatureSignerCertificateDERوGetSignatureEmbeddedCertificateCountوGetSignatureEmbeddedCertificateDERالشهادات التي يضمّنها التوقيع، بينما يرتّب كلٌ منGetSignatureCertificateChainLengthوGetSignatureCertificateChainDERإيّاها في مسار يمتد من الموقِّع نحو الخارج - ترجع
GetSignatureContentsHashHexالمفتاح الذي يُعنوَن به إدخالAddPAdESDSSVRI، محسوبًا من التوقيع نفسه - تُطابَق شهادة الموقِّع سواء حدّدها التوقيع بالمُصدِر ورقم التسلسل أم بمُعرّف مفتاح الموضوع، ويتوقف المسار عند آخر مُصدِر يحمله التوقيع فعليًا بدلًا من ادّعاء الاكتمال
Fixed
- يرفض قارئ DER طول عنصر مُصرَّحًا به أكبر من البيانات بدلًا من ترك قيمة قريبة من الحد الأقصى تلتفّ على فحص حدودها، كما لم يعد تجوّل امتدادات الشهادة يقرأ بعد نهاية شهادة مقطوعة أو طويلة جدًا. كلاهما قابل للوصول من مستند مُجهَّز، لذا تبقى الوصولات أعلاه آمنة على مدخلات غير موثوقة
- تقرأ وصولات التوقيع المستند عبر مقبض مشترك، لذا فإنها تجيب بينما يفتح مُتحقِّق أو عارض الملف بالفعل بدلًا أن تفشل وكأن التوقيع غائب
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
- يُنتج كلٌّ من
CreateValidationReportوSaveValidationReportتقرير تحقق مهيكلاً من PDF/A و PDF/UA-1 بصيغة XML أو JSON. ويحمل كل استنتاج معرّف القاعدة، والمعيار الذي يملكها، واسم قاعدة قصير، وبند ISO الذي تفرضه، ومستوى خطورة، وعدد العناصر المتأثرة، ويُغلق التقرير بإحصاءات نجاح/فشل لكل معيار وعلى مستوى المستند - يُبلّغ المعيار غير المطلوب كـ
not-checkedبدلاً من اعتباره نجاحاً صامتاً، بحيث لا يُخطَّأ في تشغيل جزئي بأنه تقرير صحي جيد - يمكن الآن لإطارات عمل البناء أن تحدد بوابة حسب معرّف قاعدة أو بند ISO بدلاً من مطابقة السلاسل الجزئية في النص: إذ تنشئ عائلة تقارير الفحص المسبقي تقريراً للبشر أولاً ثم تحوّل ذلك النص إلى JSON أو HTML أو CSV، بينما يُجمَّع تقرير التحقق من مخرجات الفحص الخام ويبقي الحقول القابلة للقراءة آلياً سليمة
Version 3.322.0
Added
- يوثّق المرجع الآن الأنواع العامة الأربعة المُعلَنة خارجياً والمستخدمة عبر سطح
TPDFlibوالتي لم يكن لها صفحة مخصصة سابقاً:TPDFlibProgressEventوTPDFlibLoggerوTPDFlibCertificateInfoوTPDFlibWatermarkBase، مكمّلاً تغطية أنواع الأحداث العامة والمسجّلات ونتائج العدّ والعلامات المائية
Version 3.321.0
Added
- يُقيِّم
CheckDocumentPolicyالقواعيد البيانية المُعلَنة مثلFonts.NotEmbedded = 0أوSecurity.Encrypted = noأوDocument.Pages <= 500مقابل المستند ويُبلّغ عن كل قاعدة كناجحة أو فاشلة مع القيمة الفعلية، محوّلاً بوابة الاستقبال للناشرين والأرشيفات والمطابع إلى إعداد بدلاً من كود فحص مكتوب يدوياً
Version 3.320.1
Fixed
- لم يعد رسم النص في وضع PDF/A دون تحميل خط أولاً يتسبب في خطأ: PDF/A يتطلب تضمين كل برنامج خط، لذلك رُفض الاختصار الضمني إلى خط مدمج ولم يبقَ أي خط محدد، فانهار
DrawTextوبقية استدعاءات النص بدلاً من الرسم - يحل مسار الخط الضمني الآن خطاً قابلاً للتضمين حقيقياً أثناء نشاط وضع PDF/A، لذلك يُضمَّن النص المرسوم دون استدعاء
AddTrueTypeFontصريح ويبقى متوافقاً؛ ولا يزال الاستدعاء المباشر لـAddStandardFontمرفوضاً تحت PDF/A - على المضيفين الذين يتعذر حل خط قابل للتضمين عليهم، يلجأ الرسم إلى المقاييس المدمجة بدلاً من إحداث خطأ ويُبلّغ عن نقص التوافق عبر
LastErrorCode605، بحيث يمكن التقاط الملف قبل نشره كمتوافق
Version 3.320.0
Added
- يُعيد
GetDocumentFeatureReportتقرير ميزات مهيكل في استدعاء واحد — بيانات المستند الوصفية، وعدد الصفحات والعناصر، وحالة التشفير، وجرد الخطوط والصور، والوسم والخطوط العريضة، وحقول النماذج، والتوقيعات، والمرفقات، وتفصيل البايتات حسب الفئة — ليحل محل عشرات الاستعلامات المنفصلة التي كان على خط أنسنة أو استقبال تجميعها سابقاً
Version 3.319.0
Added
- تنشئ
SetCollectionViewوAddCollectionFieldوSetCollectionSortوSetCollectionItemValueمحافظ PDF فوق المرفقات الموجودة، لذلك تُقدَّم مجموعة الملفات المضمَّنة كحزمة قابلة للتصفح لها أعمدتها وترتيب فرزها وقيمها لكل ملف بدلاً من قائمة مرفقات بسيطة - يُبلّغ
GetCollectionViewوGetCollectionFieldCountعن وضع العرض وعدد الأعمدة المُعلَنة لمحفظة محمَّلة
Version 3.318.1
Fixed
- خيار استخراج النص 12 (تجاهل النص المُدوَّر) يتخلص الآن من المقاطع المُدوَّرة بأي اتجاه تدور به: كان الربع دورة في اتجاه عقارب الساعة والربع دورة عكس عقارب الساعة يُعاملان بشكل مختلف، لذلك تُهمل ملاحظات الهامش الجانبية في اتجاه وتُعادة في الآخر
- يحتفظ نفس الخيار بالنص المائل المتزايد فقط (المقولب)، مثل المائل الاصطناعي، ويتوسع التسامح الآن مع حجم النص وتحويل الصفحة، فلم تعد العناوين المائلة الكبيرة تُهمل وكأنها مُدوَّرة
Version 3.318.0
Added
- يُوسِّع
DecodeAllStreamsالمقاطع المضغوطة لمستند في مكانها، لذلك فإن حفظه يُنتج نسخة يمكن قراءة مقاطع محتواها وبياناتها الوصفية وبنيتها مباشرةً بأدوات الفروق والمراجعة الجنائية وسير عمل الدعم؛ تحتفظ الصور ومقاطع التنبؤ ومقاطع الإحالة المتقاطعة بترميزها، وتُتجسَّد مقاطع العناصر أولاً حتى لا يفقد شيء
Version 3.317.0
Added
- يُعلن
SetTrappedوGetTrappedعن حالة تقييد المستند التي يتطلبها PDF/X ويقرآنها، مكتوبةً كاسم/Trappedالذي تستدعيه المواصفات بدلاً من سلسلة نصية - يعيد
SetOutputIntentSubtypeوGetOutputIntentSubtypeوسم نية الإخراج، فيستطيع ملف لوني محمَّل وصف شرط طباعةGTS_PDFXبدلاً من شرط الأرشفةGTS_PDFA1الذي تنشئه أوضاع PDF/A
Version 3.316.0
Added
- يقتصر
SetEncryptEmbeddedFilesOnlyوGetEncryptEmbeddedFilesOnlyعلى تشفير AES للمفات المضمَّنة: يُفتح المستند ويُعرض في أي قارئ دون مطالبة بكلمة مرور بينما تبقى مرفقاته مشفرة، وهو الترتيب القياسي للفواتير والسجلات الطبية وملفات القضايا التي تكون صفحات غلافها عامة لكن حمولتها ليست كذلك
Version 3.315.0
Added
- خيار استخراج النص 18 يُدير المقاطع المرسومة عند 90 أو 180 أو 270 درجة إلى إطار القراءة الأفقي ويُجمِّع كل ربع دورة على حدة، فيستخرج ملاحظات الهامش المُدوَّرة ورؤوس الجداول وعناوين محاور الرسوم البيانية كأسطر مقروءة بدلاً من التداخل مع النص العمودي أو إهمالها
Fixed
- يقبل
DASetTextExtractionOptionsالخيار 16 (إزالة الواصلات) والخيار 17 (تقسيم الكلمات حسب فجوة الأحرف) بدلاً من رفضهما، ويمرر مسار الاستخراج ذو الوصول المباشر الآن الخيارات 15 و 16 و 17 إلى المستخرِج، لذلك تنطبق إزالة قاعدة الشرطة السفلية وإزالة الواصلات وتقسيم فجوة الأحرف على مقابض الملفات بالطريقة نفسها التي تنطبق بها على مستند محمَّل
Version 3.314.0
Added
- يُبلّغ
GetFontHasToUnicodeعمّا إذا كان الخط المحدد يحمل تعيين Unicode، ويكتسب جرد الخطوط حقلاً مطابقاًHasToUnicodeلكل خط بالإضافة إلى ملخصNoToUnicodeCount، فيمكن التحقق من المستندات بحثاً عن خطوط آمنة للاستخراج وقابلة للتحويل إلى PDF/A-*u أو PDF/UA قبل المعالجة
Version 3.313.0
Added
- يكتسب
SetPDFAModeالوضع 8 لـ PDF/A-2u (ISO 19005-2 Level U)، وهو مستوى التوافق الذي يُعلن تعيينات نص Unicode دون السماح بالملفات المضمَّنة، مكمّلاً عائلة PDF/A-2 إلى جانب أوضاع 2b و 2a الموجودة
Version 3.312.0
Added
- يقرأ
GetObjectByPathوGetObjectByPathCountأي عقدة من شجرة العناصر عبر تعبيرات مسار مثلRoot/Pages/Kids[0]/MediaBox[2]أوpages[0]/Type— الأنواع والقيم القياسية والأشكال المُسلْسَلة وعدد العناصر في استدعاء واحد، ليحل محل اجتياز العناصر المكتوب يدوياً لاستكشاف البيانات الوصفية وفحوصات الامتثال الفورية والتشخيصات الداعمة
Version 3.311.0
Added
- يُعلن
SetBlackPointCompensationعن تعويض النقطة السوداء (ON أو OFF أو Default) للرسم اللاحق عبر حالة الرسوميات/UseBlackPtCompفي PDF 2.0، مُتاحاً لمخرجات المعالجة المسبقة والتجريب تثبيت تحويلات ICC للنغمات الداكنة التي كانت سابقاً خاصة بالعارض؛ يُرفع إصدار المستند تلقائياً وترفض أوضاع PDF/A هذه الحالة
Version 3.310.0
Added
- يُظهر
SetCompressionLevelوGetCompressionLevelمستوى deflate لكل ضغط يقوم به المكتب: 0 يُبقي محرك SIMD المتسارع الافتراضي، و 1 يُفضّل الإنتاجية، و 9 يضغط الأرشيفات إلى أصغر حجم - يُعيد
RecompressStreamsضغط كل مقطع FlateDecode بسيط في المستند المحدد بالمستوى الحالي ويُبقي الترميز الأصغر لكل مقطع، مُقلِّصاً المستندات التي كُتبت أصلاً بإعداد ضغط سريع دون المساس بمحتواها
Version 3.309.0
Added
- يُضيف
SetObjectStreamModeوGetObjectStreamModeتحكماً ثلاثي الحالات في مقطع العناصر: تعطيل، أو توليد (افتراضي)، أو حفظ؛ حيث يُبقي الحفظ على التجميع المضغوط الأصلي للملف المحمَّل ويكتب الحاويات بحرفية، مما يجعل تحويلات ملفات PDF 1.5+ الموجودة أرخص لأنه لا يُفكَّك شيء ولا يُعاد تجميعه
Changed
- في وضع الحفظ، تُرقَّى العناصر المُحرَّرة منذ التحميل إلى عناصر المستوى الأعلى حتى تُحفظ تغييراتها، ويختار أي عضو مضغوط متبقٍ تلقائياً شكل مقطع الإحالة المتقاطعة الثنائي
Version 3.308.0
Added
- يُشغِّل
CheckDocumentStructureفحص صحة هيكلي في استدعاء واحد: تُمر كل عنصر ومقطع عبر مفكك الترميز، وتُتحقق مقاطع Flate البسيطة بدقة من علامة نهاية zlib حتى يُلتقط البيانات المقطوعة، ويُعلّم التقرير مفقود الـ trailers والكتالوجات والصفحات غير القابلة للحل ومعالجات التشفير غير المدعومة والملفات المُصلَحة بمسح البايتات مع استنتاجات لكل عنصر وسطر ملخص
Version 3.307.0
Fixed
- تُصلَح المستندات التالفة التي تستخدم مقاطع الإحالة المتقاطعة بنجاح الآن: يُسترجع إعادة البناء الخام أعضاء مقاطع العناصر المضغوطة، وعندما لا توجد كلمة مفتاحية للـ trailer في أي مكان من الملف، يُركَّب الـ trailer من أحدث كتالوج مستند قابل للوصول، فلم يعد إزاحة startxref المعطوبة تجعل مثل هذه الملفات غير قابلة للفتح
Version 3.306.0
Added
- يكتب
ExportDocumentDataمفاتيح معلومات المستند وشجرة الإشارات المرجعية بأكملها ونطاقات تسمية الصفحات كنص بسيط قابل للتحرير بتنسيق سطر dump_data الكلاسيكي - يطبق
ImportDocumentDataالتنسيق نفسه عكسياً — تُحدَّث مفاتيح المعلومات، وتُعاد بناء شجرة الإشارات المرجعية بمستويات التداخل والصفحات الوجهة، وتُستبدل نطاقات تسمية الصفحات — مما يتيح التحرير المجمع للإشارات المرجعية وهجرة البيانات الوصفية بين المستندات في استدعاء واحد لكل اتجاه
Version 3.305.0
Added
- يُحلِّل
AuditDocumentSpaceاستخدام بايتات المستند حسب الفئة — الصور وبرامج الخطوط والقواميس ومقاطع المحتوى و form XObjects ومقاطع العناصر والملفات المضمَّنة والبيانات الوصفية وشجرة البنية والتعليقات التوضيحية وشجرة الصفحات وغيرها — مع أعداد العناصر وإجماليات البايتات والنسب المئوية، مُجيباً عن سبب كون الملف بحجمه الكبير وأي تحسين يؤتي ثماره أفضل
Version 3.304.0
Added
- يقرأ
StructTreeItemCountوGetStructTreeItemTextوGetStructTreeItemIntPropertyشجرة بنية مستند موسوم كقائمة عناصر مسطّحة بأولوية العمق — أنواع العناصر (الخام والمُعينة للأدوار) والنص البديل والفعلي واللغة والعناوين ومعرّفات المحتوى الموسوم وأرقام الصفحات وعلاقات الأصل/الفرع
Changed
- يحمي قارئ شجرة البنية من المستندات التالفة: تُقطَع دورات الإحالة وأرقام العناصر خارج النطاق والأشجار المتداخلة بعد 64 مستوى بدلاً من الدوران
Version 3.303.1
Fixed
- لم تعد أختام الطبقة السفلية شبه الشفافة التي ينشئها
StampTextوStampImageتُسرّب عتامتها إلى محتوى الصفحة الأصلي — تُحصر حالة الشفاف الآن في الختم نفسه، لذلك تحتفظ الصفحة بعتامتها الكاملة
Version 3.303.0
Added
- يختم
OverlayDocumentPagesصفحات مستند مفتوح آخر على صفحات المستند المحدد، صفحة مصدر واحدة لكل صفحة هدف، فوق أو تحت المحتوى الموجود — ورق ذي رأس مطبوع وخلفيات صفحات مستمرة وقوالب نماذج ممسوحة ضوئياً في استدعاء واحد - نضوب المصدر قابل للإعداد: التوقف، أو المرور الدائري عبر صفحات المصدر، أو الاستمرار في تكرار صفحة المصدر الأخيرة؛ ويمنع خيار آخر الختم من التضخيم إلى ما بعد حجمه الطبيعي
Changed
- تُلاءم أختام المستند مع CropBox للصفحة الوجهة وتُوضع عمودياً على الصفحات الحاملة لإدخال
/Rotate، وتُستورد كل صفحة مصدر مرة واحدة كـ Form XObject مشترك فلا تُكرر القوالب مواردها أبداً
Version 3.302.0
Fixed
- تُعالَج الآن كلمات مرور AES-256 بـ SASLprep (RFC 4013) قبل التجزئة، لذلك تُفتح كلمات المرور التي تحتوي على مسافات غير ASCII أو واصلات لينة أو أحرف توافق أو تسلسلات دمج بشكل صحيح في Acrobat والقارئات المتوافقة الأخرى
- يحاول فتح مستندات AES-256 كلمة المرور المُعدَّة القياسية أولاً ثم يلجأ إلى شكل البايت القديم، لذلك تستمر الملفات التي كتبتها الإصدارات السابقة بكلمات مرور غير ASCII في الفتح
Added
- يُبلّغ رمز الخطأ 604 عن كلمة مرور AES-256 مرفوضة من SASLprep لأنها تحتوي على نقاط رمز محظورة أو تنتهك القواعد ثنائية الاتجاه
Version 3.301.0
Added
- يُفجِّر
SplitDocumentToFilesالمستند المحدد إلى دفعة من ملفات الإخراج بعدد صفحات ثابت لكل ملف، باستخدام عنصر نائب لاسم الملف%p
Changed
- يحلل التقسيم المجمع المستند المصدر مرة واحدة وينسخ كل قطعة من البنية الذاكرة نفسها، ليحل محل إعادة التحليل الكامل المتكررة التي يؤديها تكرار على
ExtractFilePagesلكل نطاق
Version 3.300.0
Added
- يدمج
CollateDocumentsصفحات من عدة مستندات مفتوحة في المستند المحدد بالتناوب، آخذاً عدداً قابلاً للإعداد من الصفحات من كل مصدر لكل جولة (A1، B1، A2، B2، …) - يقبل
CollateDocumentsExقائمة نطاقات صفحات لكل مصدر حيث تعكس النطاقات التنازلية مثل3-1مصدراً، فيدمج تمريرات الماسح الأمامية والخلفية المعكوسة في ترتيب قراءة واحد في استدعاء واحد
Changed
- تستورد الدمج المُجمَّع كل مصدر عبر خريطة عناصر واحدة وتُعرقل حسب إعادة ترتيب الصفحات، لذلك تُكتب الخطوط والصور المشتركة داخل مصدر مرة واحدة فقط بصرف النظر عن حجم المجموعة
Version 3.299.0
Added
- يُحوّل
SetDeterministicDocumentIDوGetDeterministicDocumentIDمعرّف ملف الـ trailer إلى قيمة قابلة للإعادة إنتاجها بحيث تُنتج المدخلات المتطابقة بايتات إخراج متطابقة للتخزين المؤقت للبناء والتخزين القابل للعنونة حسب المحتوى والمقارنة الانحدارية على مستوى البايت - يوفّر
SetDocumentIDSeedبذرة صريحة لمعرّف الملف القابل للإعادة؛ ودون بذرة يُشتق المعرّف من البيانات الوصفية للمستند ورأس الإصدار وعدد الصفحات
Changed
- تُحدَّث معرّفات الملفات القابلة للإعادة عند الحفظ الكامل فقط؛ تحتفظ التحديثات التزايدية والمستندات المشفرة بمعرّفاتها الحالية حتى تستمر التوقيعات والملفات المحمية بكلمة مرور في الفتح بشكل صحيح
Version 3.298.0
Added
- تربط
AddLinkToArticleThreadوSetOutlineArticleThreadالنقاط الساخنة للصفحة والمخططات بخيط مقال أو خرزة عبر إجراءات Thread قياسية - تضيف
AddActionNextArticleThreadوPDF_ACTION_BUILDER_THREADإجراءات Thread إلى تدفقات عمل الإجراءات المتسلسلة والنموذج والصفحة والمستند
Changed
- تستخدم أهداف إجراء Thread مراجع غير مباشرة ثابتة للخيط والخرزة وترفض الفهارس غير الصالحة دون تغيير الحاوية الوجهة
- يرفض بناؤو إجراءات حقل النموذج إجراءات إضافية أثناء كون وضع PDF/A نشطًا، مع الحفاظ على حظر PDF/A لقواميس
/AAللحقل والأداة
Version 3.297.0
Added
- مرجع
DLالمسطّح للـ DLL يوثّق الآن كل نقطة دخول ANSI (char) ذات لاحقةA، مضيفًا 353 صفحة مرجعية تعكس نظيراتها من Unicode بتوقيعات Delphi بدلالةPAnsiCharودلالات Cconst char *دقيقة - أُعيد بناء
BufferUtilitiesوDirectAccessFunctionalityوMiscellaneousFunctionsكصفحات فهرس نظيفة لمجموعات الدوال مدفوعة بمخطط الفئات المشترك، مع إصلاح الترميز المعطوب والأقسام المغلّطة بشكل خاطئ والرقائق المفقودة - يغطي فهرس التنقل وفهرس البحث المشترك الآن سطح DLL بالكامل لكل من مستدعي Unicode وANSI
Fixed
- أُزيل إدخال
SetLoggerالقديم الذي لا يملك رمزًا مطابقًا في المصدر؛ الخاصية الموثّقة هيLogger
Version 3.296.0
Added
- توفر
AddAlternateImageوAlternateImageCountوGetAlternateImageInfoوRemoveAlternateImageتأليفًا وفحصًا مُنمّطًا لمتغيرات الصور للعرض والطباعة - يمكن ربط الصور البديلة بمجموعة محتوى اختيارية أو قاموس عضوية، بينما يمكن اختيار متغير واحد لكل صورة أساسية كافتراضي للطباعة
Changed
- يختار العارض المدمج الآن الصور البديلة للمحتوى الاختياري عندما تكون الصورة الأساسية مخفية ويراعي الافتراضي للطباعة على وجهات الطابعة
- تسجّل
FindImagesالآن كائنات XObject للصور البديلة القابلة للوصول من موارد الصفحة بحيث تتلقى المتغيرات المستوردة مقابض صور قابلة للاستخدام
Version 3.295.0
Added
- تنشئ
AddArticleThreadتنقّلًا للمقالات متوافقًا مع المعايير ببيانات وصفية مُنمّطة ومستطيلات صفحات مرتّبة وروابط خرزية دائرية ومصفوفات خرز لكل صفحة - تفحص
ArticleThreadCountوGetArticleThreadInfoوGetArticleThreadBeadخيوط المقالات المنشأة أو المستوردة بعبور محدود لدورات الروابط التالفة
Changed
- تزيل
DeletePagesالآن خيوط المقالات التي تفقد كل خرزة وتصلح الروابط الدائرية للخيوط الناجية - يحتفظ تتبّع الصفحات المحذوفة الآن بمراجع صفحات غير مباشرة ثابتة حتى لا ينزلق تنظيف المخطط والمقالات مع تحرك مؤشر شجرة الصفحات
Version 3.294.0
Added
- تبحث
SearchTextBatchفي استعلامات نصية متعددة بينما يبقى كل استخراج صفحة مقيمًا وتعيد فهرس الاستعلام الأصلي ذي الأساس الصفري مع كل تطابق - توفر
SearchTextBatchEachنفس بحث المرور الواحد عبر استدعاء خلفي متدفق مع تقارير التقدم والإلغاء
Changed
- يشارك البحث النصي ذو الاستعلام الواحد والدفعي الآن نواة مطابقة واحدة، مع الحفاظ على دلالات حساسية حالة الأحرف والكلمة الكاملة ونطاق الصفحة مع تجنّب تكرار استخراج الصفحات وطيّ النص وعمل هندسة التطابقات
Version 3.293.1
Fixed
- لم يعد تنقيط تظليل الشبكة يفشل في التجميع على أي إصدار Delphi، مما يحل
E2089 Invalid typecastفي تحويلات الحقيقي إلى فاصلة عائمة في رسام GDI+ - يُجمَّع عرض الصفحات الدفعي المتوازي الآن على Delphi XE5 وXE6 حيث
System.Threadingغير متوفرة؛ تعود سلاسل الأدوات الأقدم إلى مسار العرض التسلسلي كما في الأنظمة غير Windows - لم يعد استكشاف قدرات الطابعة يثير خطأ أنواع غير متوافقة على إصدارات Delphi القديمة بمحاذاة استدعاء
SetPrinterمع بقية كود الطباعة - يُبنى تعداد مخزن الشهادات الآن على RAD Studio 10.3 Rio، الذي كان يُجهض سابقًا بخطأ داخلي في المترجم أثناء تحسين روتين التعداد
Version 3.293.0
Added
- يمكن الآن إنشاء قواميس عضوية المحتوى الاختياري وتحديثها وتعدادها مع سياسات توافق
AnyOnوAllOnوAnyOffوAllOff - تعبيرات الرؤية
/VEالمتداخلة في PDF 1.6 تدعمAndوOrوNotعبر تمثيل بادئة مدمج يتشاركه Delphi وC++Builder
Changed
- نطاقات المحتوى الاختياري وتدفقات المحتوى والصفحات الملتقطة والصور وحقول النماذج والتعليقات التوضيحية تقبل الآن إما مقبض مجموعة أو مقبض عضوية
- يقيّم العرض تعبيرات
/VEالصالحة أولًا ويعود إلى/OCGsزائد/Pللتعبيرات المشوّهة أو غير المدعومة
Fixed
- لم يعد المحتوى الاختياري المتداخل قادرًا على جعل المحتوى مرئيًا عندما تكون مجموعة أو عضوية محيطة مخفية
- تترك قواميس العضوية التي بلا مجموعات محتوى اختياري فعّالة الرؤية دون تغيير كما يتطلب مواصفات PDF
Version 3.292.0
Added
- تبرز
EnumAttachmentsالآن تواريخ الإنشاء والتعديل ومجاميع التحقق السداسية عشر وعلاقات الملفات المرتبطة وأرقام كائنات مواصفات الملف لكل من مرفقات المستند والتعليقات التوضيحية - تتحقق
ValidateAttachmentChecksumمن حمولة مرفق مقابل مجموع التحقق المخزّن عند الطلب، بينما تتلقى الملفات المضمّنة حديثًا بيانات مجموع التحقق تلقائيًا
Fixed
- تقبل
SetEmbeddedFileAFRelationshipالآن نفس فهارس الملفات المضمّنة ذات الأساس الواحد ك rest واجهة برمجة المرفقات، بما في ذلك المستندات أحادية المرفق
Version 3.291.0
Added
- تُدمج
DeduplicateResourcesالآن تدفقات الصور وForm والأنماط والتظليلات والدوال وملفات تعريف ICC وبرامج الخطوط وCMap وCharProc من Type 3 والملفات المضمّنة والبيانات الوصفية وPostScript المكررة تمامًا عبر مستند محمّل - يوفر إزالة تكرار الموارد أعلام أنواع مستقلة وتحليل جاف ومجموع أيتام اختياري وإحصاءات مفصّلة للتجزئة والمقارنة والحمولة والمرجع ولكل فئة
Changed
- يكشف التكرار قواميس التدفق الكاملة بصرف النظر عن ترتيب المفاتيح، ويجزّئ كل حمولة مرشّحة مرة واحدة بـ SHA-256، ويؤكد الدلاء المطابقة بايتًا بايتًا قبل إعادة توجيه المراجع
- تحتفظ مجموعات التكافؤ التام بأقل رقم كائن وإصدار لمخرجات حتمية، بينما تظل دورات الكائنات المباشرة المشوّهة وفروقات القاموس الدلالية غير مدمجة
Version 3.290.0
Changed
- تحسب
PurgeUnusedResourcesالآن إغلاقًا تبعيًّا عابرًا عبر أنماط التبليط ورموز Type 3 وحالات مظهر التعليقات التوضيحية ومجموعات القناع الناعم ExtGState والصور والتظليلات والمساحات اللونية المتداخلة - تُفعّل خيارات التنظيف الافتراضية الآن تحليل تبعية النمط وType 3 والمظهر والقناع الناعم والصورة، مع أعلام مستقلة للمستدعين الذين يحتاجون مسحًا أضيق
- تُخزّن برامج المحتوى المتداخلة ومدخلات التبعية مؤقتًا، وتُخصخص نطاقات الموارد المشتركة قبل التقليم، وتُحدّ الدورات المشوّهة بحرّاس التيار النشط والعمق
Fixed
- موارد الصفحة المستخدمة فقط عبر مساحات لون الصورة وقواعد Indexed وبدائل Separation أو DeviceN والمساحات الأساسية لـ Pattern وبدائل ICCBased أو قواميس التظليل لم تعد تُزال كغير مستخدمة
- الموارد المستخدمة فقط بواسطة CharProcs من Type 3 وخلايا نمط التبليط ومظاهر التعليقات التوضيحية أو مجموعات القناع الناعم للشفافية لم تعد تُزال من نطاقها الخاص أو الموروث
Version 3.289.0
Added
- تزيل
PurgeUnusedResourcesالآن موارد الصفحة المسماة غير المُشار إليها بطبقات المحتوى المحددة ويمكن أن تعيد إحصاءات مفصّلة لكل فئة - يدعم تنظيف الموارد الآن نطاقات الصفحات وتقارير الجاف والتقدم والإلغاء وتحليل Form XObject المتكرر وإزالة ProcSet المهمل وجمع كائنات أيتام اختياري
Changed
- يتبع تحليل الموارد الآن حساسية حالة أحرف اسم PDF وموارد Form الموروثة ومساحات ألوان الصور المضمّنة المخصّصة وجميع فئات الموارد القياسية السبع
- تُخزّن برامج Form المتكررة مؤقتًا، وتستخدم مجموعات الموارد المستخدمة بحثًا مرتّبًا، وتُزال مدخلات القاموس بترتيب تنازلي لأداء تنبؤي على المستندات الكبيرة
Fixed
- إزالة مدخلات القاموس تبطل الآن فهارس مفاتيح القواميس الكبيرة حتى لا تستطيع عمليات البحث اللاحقة إعادة مدخلات قديمة
- تحافظ التدفقات المشوّهة والعوامل غير المعروفة على نطاق مواردها الكامل افتراضيًا، بينما تُستنسخ قواميس الموارد المشتركة أو الموروثة قبل التحوّل
Version 3.288.0
Added
- يمكن للتوقيعات الرقمية الآن إصدار هياكل شهادات DocMDP وقفل حقول FieldMDP كاملة، مع تقارير أذونات هيكلية لكل توقيع محدد
- لدى طوابع زمنية للمستند RFC 3161 وطوابع زمنية للتوقيع وحقن رموز PAdES-B-T والتحقق من سلسلة الشهادات وأدلة OCSP ومواد التحقق DSS أو VRI الآن تدفقات عمل تأليف وتحقق كاملة
- تدعم تعليقات RichMedia التوضيحية الآن الأصول المضمّنة وإعدادات التفعيل وإلغاء التفعيل ومظاهر الملصقات والتعداد والاستخراج والإزالة
- يدعم طباعة الملصقات الآن فرض صفحات متجهي وعلامات تداخل وقص ووضع واعٍ بالهامش الصلب وخطط تبليط قابلة لإعادة الاستخدام
- تبثّ الجداول الموسومة الآن هياكل Table وTR وTH وTD دلالية بمعرّفات ثابتة وارتباطات رؤوس وامتدادات ورؤوس متكررة وزخارف مؤقتة
- يوفر العارض الآن تحرير AcroForm متاحًا بلوحة المفاتيح لحقول النص والاختيار ومربع الاختيار والراديو وزر الضغط أثناء إرسال الإجراءات إلى تطبيق المضيف
Changed
- تُعرض تظليلات Type 1 القائمة على الدوال وتظليلات الشبكة من Type 4 إلى 7 الآن عبر تقييم دوال أصلي وتقسيم شبكي محدود
- يشارك عرض ألوان ICCBased الآن تحويلات مخزّنة مؤقتًا عبر الصور والتظليلات مع الحفاظ على سلوك مساحة اللون المعايرة
- تعيد الحفظ التزايدي الآن بناء تدفقات الكائنات وتدفقات المراجع المتقاطعة باستمرار، ويتم التحقق من التوقيعات المحددة مقابل مراجعتها الموقّعة الخاصة
Fixed
- تقوم طلبات الطابع الزمني للتوقيع SHA-1 الآن بتجزئة قيمة توقيع الموقّع بـ SHA-1 بدلًا من العودة إلى SHA-256
- استبدالات قفل الحقل المرفوضة لم تعد تتجاهل تكوين قفل حقل صالح سابق
- عناصر واجهة الراديو ذات أسماء حالة المظهر المكررة تحتفظ الآن بالعنصر المحدد وتبقي العناصر الشقيقة مطفأة
Version 3.287.0
Changed
- تتبع قواميس الصور المضمّنة الآن حدود تعليقات وفواصل وحرفية وسداسية عشر ومصفوفات وقواميس PDF مع تداخل محدود
- تستخدم حمولات الصور المضمّنة الآن إنهاءً واعيًا بالتنسيق لبيانات raw وDCT وASCII85 وASCIIHex وRunLength وFlate
- ينفّذ اكتشاف حمولة Flate الآن نفخًا محدودًا واحدًا من إزاحة تدفق المحتوى بمحاسبة بايت مضغوط دقيقة، بينما تتشارك المرشحات غير الفاقدة المتسلسلة سقف مخرجات من الطرف إلى الطرف
- تفرض تدفقات ASCII85 وASCIIHex وLZW والمتنبئ وملف تعريف اللون والصور المساعدة الآن مخرجات وسيطة محدودة دون تخصيصات مؤقتة مفرطة في الحجم
Fixed
- لم تعد الصور المضمّنة المشوّهة أو المقتطعة تقرأ بعد بيانات المصدر، أو تدور في حلقة على قيم غير منتهية، أو تحتفظ بحالة قديمة عبر إعادة استخدام مفكك الترميز
- تحسب صفوف الصور المعبّأة الآن وحدات البت المكوّنة قبل تقريب البايت، مما يمنع الأطوال غير الصحيحة لصور RGB منخفضة البت ولصور متعددة الصفوف
- تحافظ مساحات ألوان الموارد الآن على أسمائها الأصلية أثناء اشتقاق أعداد مكوّنات Lab وICCBased غير المباشرة وDeviceN وفك تشفير تدفقات لوحة Indexed تحت حدود صارمة
- ترفض حدود الصور المضمّنة الآن الأبعاد وأعماق البت والمرشحات غير المدعومة وسلاسل المرشحات غير الآمنة والتدفقات المضغوطة وعلامات النهاية الغامضة بشكل متناسق
- يتحقق عرض ألوان Indexed الآن من كل وصول للوحة ويرفض بيانات البحث المقتطعة بدلًا من القراءة بعد الجدول المفكوك
- يفك المتنبئون PNG من 10 إلى 15 الترميز الآن بشكل صحيح لتدفقات Flate وLZW، ويرفضون مرشحات الصفوف غير الصالحة، ويتحققون من جميع أحجام الصفوف والحالات قبل التخصيص
- تتحقق حمولات JPEG وJPEG 2000 الآن من أبعادها المشفّرة ومكوّناتها ودقتها وبنية العلامة وأطوال الصناديق وأثر التخزين المفكوك قبل تخصيص الصورة
- يحدّ التحقق من الصور المضمّنة الآن من كل من تخزين الصور النقطية المعبّأة والموسعة ويقيّد ملفات تعريف ICC والمتغيرات الشاملة لـ JBIG2 ومعاملات المرشح الطرفية
- تستمر حمولات مرشح ثنائي تحتوي على نص علامة نهاية مضمّن الآن حتى أول مرشّح يجتاز التحقق من التنسيق المحدود
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Added
- تمت إضافة عرض تجريبي لمصفوفة حراسة PDF/A في Delphi يختبر قرارات الرفض المبكر أو المسارات المسموح بها لإعداد وضع PDF/A والشفافية وأنماط المزج والتشفير وJavaScript والوسائط المتعددة والملفات المضمّنة وسير عمل الملفات المرتبطة بـ PDF/A-3، مع تقارير PDF وCSV وHTML مولّدة
Version 3.163.0
Added
- تمت إضافة مصفوفة جسر ReportAdapter صريحة لمسارات التصدير في FastReport وQuickReport وReportBuilder وDBGrid ومسارات لوحة الرسم المخصصة، مع مخرجات CSV وHTML للتعيين وصفحة PDF تعرض استراتيجية المهايئ القابلة لإعادة الاستخدام
Version 3.162.0
Added
- تمت إضافة مصفوفة عروض توضيحية لسير عمل متقدم تولّد مخرجات فعلية لترحيل اللوحة واستيراد EMF ومقارنات ضغط الصور وسير عمل إجراءات AcroForm والتواقيع الفارغة المرئية وأذونات الأمان وفحوص PDF/A-1b والمحتوى الاختياري وأنماط التبليط وForm XObjects وتصدير الجداول على نمط DBGrid وإبلاغ ذروة الذاكرة للملفات الكبيرة
Version 3.161.0
Added
- تمت إضافة أدوات مساعدة في Delphi لبناء إجراءات فتح المستندات المختصرة، وإجراءات ظهور حقول النموذج، ومبدلات ألوان TColor والرمادي، وإدراج محتوى خام مباشر في تيار المحتوى للنص والمسار والمصفوفة
Version 3.160.0
Added
- تمت إضافة أدوات مساعدة في Delphi لضغط الصور الممسوحة إلى JBIG2، وإعداد قناع الصورة والشفافية بمفتاح اللون بضغطة واحدة، وتسلسل إجراءات GoTo، وأسماء أحداث AcroForm القابلة للقراءة لـ JavaScript أو إسناد الإجراءات القائمة
- تم توسيع ImportEMFFromFileEx وImportEMFFromStreamEx بحيث يمكن لأعلام Options فرض استيراد البت ماب، وتمكين إعادة ضغط صور EMF بصيغة JPEG، وطلب عناصر تحكم معالجة GDI+
Version 3.159.1
Changed
- تحسّن SaveToStream وحفظ تيار الإخراج المرتبط، بحيث تُكتب كائنات تيار PDF الكبيرة على دفعات محدودة بدلاً من نسخ كل كائن تيار إلى سلسلة إخراج وسيطة واحدة
Version 3.159.0
Added
- تمت إضافة أدوات وضع الصورة التي ترسم صورة محددة أو تضبطها ثم تُحرر المقبض مباشرة بعد ذلك، مع نقاط دخول Delphi وDLL وActiveX لخفض ذروة الذاكرة في تدفقات إنشاء الصور أحادية الاستخدام
- تمت إضافة RenderPageToMonochromeFileEx لتصيير BMP بعمق 1 بت مع تحويل العتبة وتنظيف البيكسلات السوداء المعزولة قبل سير عمل ضغط الصور الممسوحة
Version 3.158.1
Added
- تمت إضافة عروض Delphi التوضيحية لسير عمل قابلة لإعادة الاستخدام لتصدير بأسلوب التقارير، واستيراد النص الغني من RichEdit إلى EMF، وسيناريوهات مجمعة للصور المصغرة للصفحة، والتعليقات، وForm XObject، والجداول، والضغط، وJavaScript، وإخراج التيار المرتبط
Version 3.158.0
Added
- تمت إضافة واجهات برمجة تطبيقات للتحكم في تشفير البيانات الوصفية مع نقاط دخول Delphi وDLL وActiveX: يستطيع SetEncryptMetadata كتابة ملفات PDF بأمان Standard مع تدفقات XMP غير مشفرة، بينما يبلّغ GetEncryptMetadata عن حالة /EncryptMetadata المعلقة أو المحمّلة
Version 3.157.0
Added
- تمت إضافة واجهات برمجة تطبيقات مباشرة لرسم أنماط التبليط مع نقاط دخول Delphi وDLL وActiveX: ينشئ BeginTilingPattern سطح رسم مؤقتاً لخلية النمط، ويسجل EndTilingPattern كنمط قابل لإعادة الاستخدام، ويتخلص CancelTilingPattern من الإنشاء من دون ترك نمط مسمّى
Version 3.156.0
Added
- تمت إضافة أدوات مساعدة لربط تيار الإخراج في Delphi: يتيح BeginOutputToStream وEndOutputStream وCancelOutputStream وOutputStreamActive لشفرة البث والويب وتصدير التقارير ربط TStream هدف، وإنهاءه عبر الكاتب المقسّم الموجود، أو إلغاء الهدف المعلّق من دون تحمّل ملكية التيار
Version 3.155.0
Added
- تمت إضافة Abort وAborted وResetAbort لمستخدمي Delphi وDLL وActiveX بحيث تستطيع التطبيقات تعليم المثيل على أنه ملغى ومنع بدء عمليات الحفظ أو الإلحاق حتى تُزال العلامة
Version 3.154.0
Added
- تمت إضافة أدوات مساعدة لمصغرات الصفحات لخيارات استيراد الصور والمصادر في الذاكرة، واستعلامات مجموعة المحتوى الاختياري ومبدّلات الحالة حسب اسم المجموعة، وSetOpenActionNamedDestination للقفز عند فتح المستند إلى وجهات مسماة
Fixed
- يحل GetDestName الآن مقابض مصفوفة الوجهة الصريحة، بما في ذلك المصفوفات المعادة من إجراء فتح مستند مسمّى
Version 3.153.0
Added
- تمت إضافة واجهات برمجة تطبيقات مريحة لإجراءات النماذج المتسلسلة، ومشغلات حقول Hide وImportData، وحالات مجموعة المحتوى الاختياري الأولية، واستيرادات EMF الاختيارية، واستيرادات الصور الشفافة بمفتاح اللون
Version 3.152.0
Added
- تمت إضافة إنشاء تلقائي لروابط URL عند رسم النص، وأدوات مساعدة لاستيراد الصور CCITT Group 3/4، وأدوات مساعدة للصور المباشرة JBIG2، وواجهات استيراد EMF الموسعة، وأدوات إرفاق أقنعة الصور، وإنشاء حقول توقيع مرئية، وأدوات أحداث وإجراءات حقول النماذج لـ JavaScript وSubmitForm وResetForm
Version 3.151.0
Added
- تمت إضافة DrawPie وDrawChord وDrawEllipticPie وDrawEllipticChord لرسم الأقواس الدائرية والبيضاوية المغلقة صراحةً بوضع حدود أو تعبئة أو حد مع تعبئة
Version 3.150.0
Added
- تمت إضافة NewGraphicsState وSetGraphicsState بحيث يمكن للمستدعين إنشاء موارد ExtGState قابلة لإعادة الاستخدام لإعدادات شفافية التعبئة وشفافية الحد وعرض الخط ونهاية الخط ووصلات الخط وحدّ الميل
Version 3.149.1
Fixed
- تم إصلاح معرّفات dispatch مكررة في ActiveX لطرق Form XObject وحدّ الميل بحيث يحل المستدعون COM المرتبطون لاحقاً كل طريقة بلا لبس
Version 3.149.0
Added
- تمت إضافة SetMiterLimit للتحكم في نسب حد الميل للمسارات التي تستخدم وصلات الميل
- أُتيح BeginFormXObject وEndFormXObject وCancelFormXObject عبر واجهات DLL وActiveX
Version 3.148.0
Added
- تمت إضافة واجهات بناء Form XObject قابلة لإعادة الاستخدام: يتيح BeginFormXObject وEndFormXObject وCancelFormXObject للمستدعين رسم قالب قابل لإعادة الاستخدام بأوامر رسم الصفحة العادية ووضعه مراراً عبر واجهات رسم الصفحة الملتقطة
Version 3.147.0
Added
- تمت إضافة SetTextTilingPattern وSetLineTilingPattern بحيث يمكن إعادة استخدام أنماط التبليط الملتقطة للنص والتسطير والرسوم ذات الحد من دون تكرار أوامر الرسم
Fixed
- أصبحت ألوان shader وأنماط التبليط ذات الحد الآن تكتب معامل لون النمط ذي الحد بدلاً من تحديث حالة اللون غير ذي الحد
Version 3.146.0
Added
- تمت إضافة BeginOptionalContent وEndOptionalContent بحيث يمكن للمستدعين تعليم أوامر الرسم اللاحقة فقط بمجموعة محتوى اختيارية من دون إعادة كتابة تيار المحتوى القائم
Fixed
- تُفرَّغ معاملات marked-content الخاصة بإغلاق النطاقات الآن فور إغلاق مجموعات المحتوى الاختياري أو PDF الموسوم أو artifact عند نهاية تيار المحتوى
Version 3.145.0
Added
- تمت إضافة SetTransparencyEx بحيث يمكن للمستدعين تعيين قيم شفافية التعبئة والحد منفصلة للنص والرسوم المرسومة لاحقاً مع الحفاظ على سلوك الترقية التلقائية إلى PDF 1.4
Version 3.144.0
Added
- تمت إضافة AddLinkToNamedDestination بحيث يمكن لمنطقة ارتباط في الصفحة القفز إلى وجهة مسماة داخل المستند نفسه من دون حل صفحة الهدف عند إنشاء الرابط
Fixed
- تُرجع قارئات إجراءات التعليقات الآن لا إجراء للصفحات من دون تعليقات بدلاً من فك مرجع ذاكرة تعليقات فارغ
Version 3.143.0
Added
- تمت إضافة واجهات إدارة إجراءات حقول النماذج بحيث يمكن للمستدعين ربط إجراء موجود بمشغّل حقل، وفحص الإجراء المشغّل المطبّع، وإزالة إجراءات الحقول الأساسية أو الإضافية
Fixed
- يرفض FormFieldJavaScriptAction الآن مستندات PDF/A وأسماء المشغلات غير الصالحة بدلاً من كتابة قواميس إجراءات حقول غير مطابقة
Version 3.142.0
Added
- تمت إضافة واجهات برمجة تطبيقات لتسلسل الإجراءات بحيث يمكن للمستدعين إلحاق إجراءات URI وnamed وJavaScript التالية بإجراء تعليق أو مخطط أو حقل نموذج موجود وفحص الإجراءات المتسلسلة عبر GetActionNextCount وGetActionNextInfo
Version 3.141.0
Added
- Added
AddLinkToSubmitFormandAddLinkToResetFormso page hotspots can submit or reset AcroForm fields through standard PDF actions without JavaScript
Version 3.140.0
Added
- Added
AppendToStreamso incremental update workflows can write directly to a caller-provided stream instead of first materialising the update as anAnsiString
Changed
SaveToStreamnow serializes directly into the target stream, andAppendToString(1)now returns only the incremental update section without copying the original source bytes into a temporary buffer
Version 3.139.0
Added
- Added
GetAnnotReplyToandGetAnnotReplyTypeso threaded annotation replies can be inspected through named read-side accessors instead of generic annotation property tags
Version 3.138.0
Added
- Added the Delphi
DocumentInspectionWorkbenchsample to batch-inspect PDFs with combined font diagnostics, image sampling, color-space discovery, load timing, and JSON, CSV, and HTML reports
Version 3.137.0
Added
- Added the Delphi
ImageDecodeBenchmarksample to measure page image discovery, decoded image bytes, and page color-space discovery with CSV and HTML timing reports
Version 3.136.0
Added
- Added
GetDocumentFontDiagnosticsandTPDFlibFontDiagnosticsto summarize document font embedding, subsetting, Standard 14, CID, Type3, and unknown-font counts in one call
Version 3.135.0
Added
TPDFlibSignatureVerifier.VerifySignerCertificateChainnow builds the embedded signer certificate chain with Windows CryptoAPI and returnsvsValidonly when the chain satisfies the Windows base trust policy, while self-signed or otherwise untrusted signer certificates returnvsInvalidwithout changingVerifySignature's content-integrity result
Version 3.134.0
Fixed
TPDFlibSignatureVerifier.VerifySignaturenow validates legacyadbe.pkcs7.sha1signatures, returningvsValidwhen the signed digest matches the covered/ByteRangebytes andvsInvalidafter covered content changes
Version 3.133.0
تمت الإضافة
- إضافة
RenderPagesToFilesوDARenderPagesToFilesلتصيير نطاقات صفحات عشوائية إلى ملفات إخراج مرقمة مع إعادة استخدام إعداد المُصيّر عبر الصفحات المحددة
Version 3.132.0
تمت الإضافة
- إضافة أداتي الختم المريحتين
AddPageHeaderوAddPageFooterاللتين تضعان النص في هامش علوي أو سفلي ثابت على كل صفحة في نطاق معين، مع محاذاة إلى اليسار/الوسط/اليمين وتوسيع الرموز (&Pالصفحة الحالية،&Nإجمالي الصفحات،&Dالتاريخ،&Tعنوان المستند،&&علامة العطف الحرفية) - يضع الآن كل من
StampTextوStampImageمعsoUnderlayالمحتوى فعلياً أسفل محتوى الصفحة الحالي عن طريق إضافة طبقة محتوى جديدة في البداية (سابقاً كان يرسم في الأعلى مثلsoOverlay)؛ مدعوماً بطريقة شجرة صفحات جديدةPrependContentLayer
Version 3.131.0
تمت الإضافة
- إضافة
ScalePage(ScaleX, ScaleY, Anchor)التي تقوم بتحجيم محتوى الصفحة المحددة عن طريق تغليف كل طبقة محتوى في كتلة حالة رسوميةq sx 0 0 sy tx ty cm ... Qوتغيير حجم MediaBox و CropBox؛ تحافظ نقطة الارتساء على الأصل في الأسفل لليسار (0)، أو توسّط المحتوى (1)، أو تحافظ على الأعلى لليسار (2) - توسيع
EnumPageElementsبنوع عنصر جديدekPath: تُبلغ كل صفحة الآن أيضاً عن مساراتها المتجهة باستخدام مربع إحاطة، وعدد النقاط، وعلامة الإغلاق، ومُعامل الرسم، والمستخرجة من تدفقات المحتوى عبر نموذج المحتوى المهيكل
Version 3.130.0
تمت الإضافة
- إضافة ثلاث واجهات برمجة تطبيقات لتحسين حجم الملف تقوم بتقليص المستندات المحملة عند إعادة الحفظ: تقوم
SubsetEmbeddedFontsبإعادة كتابة كل برنامج خط TrueType مضمن (FontFile2) وصولاً إلى أحرف Unicode التي يصيّرها المستند فعلياً عبر خدمةCreateFontPackageالخاصة بـ FontSub.dll؛ وتقومDownsampleImages(MaxDPI, Quality, Filter)بفك تشفير كل كائن XObject لصور أعلى من نقطة لكل بوصة (DPI) المستهدفة، وإعادة أخذ عينات منه (box أو bilinear) وإعادة تشفيره كـ JPEG أو PNG؛ وتقومNormalizeLZWStreamsبإعادة كتابة كل تدفق لا يزال مصفى باستخدام LZWDecode إلى FlateDecode من خلال وحدة فك تشفير LZW ووحدة تشفير Flate الحالية، مع الحفاظ على معلمات Predictor
Version 3.129.0
تمت الإضافة
- إضافة واجهات برمجة تطبيقات لإنشاء تظليل الشبكة لأنواع التظليل الأربعة التي كانت تدعم القراءة/التحليل فقط في السابق:
NewRGBFreeFormTriangleMesh(التظليل من النوع 4، مثلثات Gouraud حرة الشكل)، وNewRGBLatticeTriangleMesh(التظليل من النوع 5، شكل شبكة Gouraud)، وNewRGBCoonsPatchMesh(التظليل من النوع 6، شبكة رقعة Coons)، وNewRGBTensorPatchMesh(التظليل من النوع 7، شبكة رقعة منتج الموتر) — يبني كل منها نمط تظليل شبكة مسمى من قائمة رؤوس أو رقع مسطحة بعمق بتات الإحداثيات/الألوان قابل للتحديد ومربع إحاطة، قابل للتحديد باستخدامSetFillShader/SetLineShader/SetTextShaderمثل المظللات المحورية والشعاعية الحالية
Version 3.128.0
تمت الإضافة
- إضافة شريط صور مصغرة للعارض: يعرض
TPDFlibThumbnailBarصورة مصغرة لكل صفحة، يتم عرضها لاحقاً عند التمرير بحيث تصبح الصفوف مرئية، مع وجود رقم الصفحة في الأسفل؛ يؤدي النقر فوق صورة مصغرة إلى انتقال العارض المرفق إلى تلك الصفحة — مما يكمل مجموعة عناصر تحكم العارض (العارض، لوحة الإشارات المرجعية، لوحة البحث، الصور المصغرة)
Version 3.127.0
تمت الإضافة
- إضافة لوحة بحث للعارض: يبحث
TPDFlibSearchPanel.RunSearchفي المستند المرفق بأكمله ويسرد صفاً واحداً لكل نتيجة مع رقم صفحتها والنص المطابق؛ يؤدي النقر فوق نتيجة إلى انتقال العارض إلى تلك الصفحة
Version 3.126.0
تمت الإضافة
- إضافة لوحة إشارات مرجعية للعارض: يسرد
TPDFlibOutlineViewerشجرة مخطط المستند مع مسافة بادئة وينقل العارض المرفق (عبرAttachViewer) إلى الصفحة الوجهة للإشارة المرجعية عند النقر؛ تم بناؤه على فئة أساسية للوحة قابلة لإعادة الاستخدام تتشارك فيها اللوحات الجانبية اللاحقة
Version 3.125.0
تمت الإضافة
- إضافة إمكانية تحديد النص إلى عنصر تحكم العارض: اسحب بزر الماوس الأيسر للتحديد، واضغط على Ctrl+C أو استدعِ
CopySelectedTextلنسخ التحديد إلى الحافظة؛ يتوفر النص الملتقط من خلال خاصيةSelectedText، مرتباً من أعلى إلى أسفل مع فواصل أسطر بين النطاقات - إضافة
GetTextInRegion، الذي يعيد نص منطقة صفحة مستطيلة مباشرةً — نفس البحث المستند إلى الكتلة الذي يستخدمه تحديد الماوس، متاح لواجهات التحديد المخصصة
Version 3.124.0
تمت الإضافة
- يقوم عنصر تحكم العارض الآن بالعرض المسبق للصفحات المجاورة في سلسلة رسائل في الخلفية، بحيث يؤدي التنقل للأمام أو للخلف إلى إظهار الصفحة التالية على الفور؛ يستخدم العامل مثيل المستند الخاص به ويسلم العروض النهائية إلى ذاكرة التخزين المؤقت دون حظر واجهة المستخدم
- إضافة تفاعل الروابط إلى العارض: يؤدي النقر فوق تعليق توضيحي للرابط إلى إطلاق
OnLinkClickمع رقم الصفحة ونفس ملخص الإجراء المكتوب الذي ينتجهGetAnnotActionInfo(عنوان الويب، وجهة المستند، الإجراء المسمى وما إلى ذلك)؛ يعرضLinkActionAtPagePointاختبار الإصابة الأساسي للمعالجة المخصصة
Version 3.123.0
تمت الإضافة
- اكتسب عنصر تحكم العارض تمريراً مستمراً: يبدّل
SetDisplayModeالتحكم فيTPDFlibViewerبين عرض الصفحة الواحدة والتمرير العمودي المستمر عبر المستند بأكمله، مع عرض الصفحات المرئية في منفذ العرض فقط وتتبع الصفحة الحالية لموضع التمرير (إطلاقOnPageChangeعند ظهور الصفحات) - يتم الآن الاحتفاظ بالصفحات المعروضة في ذاكرة تخزين مؤقت للصور النقطية الأقل استخداماً مؤخراً، لذلك لا يؤدي التمرير ذهاباً وإياباً إلى إعادة العرض؛ تبلغ ميزانية الذاكرة الافتراضية 128 ميجابايت وتتغير باستخدام
SetCacheLimit، مما يؤدي إلى إخلاء أقدم الصفحات عندما تتقلص الميزانية أو تمتلئ - إضافة التمرير بعجلة الماوس والتنقل بلوحة المفاتيح إلى العارض: PageUp/PageDown (خطوات الصفحة في وضع الصفحة الواحدة، وخطوات منفذ العرض في الوضع المستمر)، ومفاتيح الأسهم، وHome، وEnd
Version 3.122.0
تمت الإضافة
- إضافة عنصر تحكم عارض PDF تفاعلي:
TPDFlibViewerهو عنصر تحكم تمرير VCL يفتح مستنداً من ملف أو يُرفق بمثيلTPDFlibموجود، ويعرض الصفحات من خلال محرك العرض المحدد (GDI+، أو Cairo، أو PDFium)، ويوفر التنقل في الصفحة (GoToPage/NextPage/PrevPageمع حدثOnPageChange) والتحكم في التكبير والتصغير — نسبة مئوية ثابتة، أو الملاءمة للعرض، أو الملاءمة للصفحة، والتي يُعاد حسابها تلقائياً عند تغيير حجم عنصر التحكم؛ الصفحات الأعرض من منفذ العرض يتم تمريرها، والصفحات الأضيق يتم توسيطها - إضافة حزمة وقت التصميم (
Package\PDFlibViewerPkg.dpk) التي تسجل عنصر التحكم في صفحة لوحة losLab PDF لاستخدامه بالسحب والإفلات في بيئة التطوير المتكاملة (IDE)
Version 3.121.0
تمت الإضافة
- التشكيل التلقائي للنصوص المعقدة في
DrawText: يتم الآن اكتشاف وتشكيل النص الذي يحتوي على أحرف عربية أو عبرية أو هندية أو نصوص معقدة أخرى تلقائياً — حيث تظهر أشكال الحروف السياقية والوصلات الإلزامية والترتيب من اليمين إلى اليسار بشكل صحيح دون تغييرات في التعليمات البرمجية؛ يتم تعيين الأسماء الأساسية الـ 14 القياسية إلى الخطوط المثبتة المتوافقة قياسياً (Helvetica إلى Arial، وTimes إلى Times New Roman، وCourier إلى Courier New) ويقيسGetTextWidthمن خلال مسار التشكيل نفسه بحيث يظل المحاذاة متسقاً؛ بينما تحتفظ النصوص اللاتينية والسيريلية واليونانية والصينية واليابانية والكورية بمسار رسمها الحالي بايت ببايت - إضافة
SetTextShapingلتبديل التوجيه التلقائي (مُمكّن افتراضياً؛ مرر 0 لاستعادة السلوك الدقيق قبل التشكيل)
Version 3.120.0
تم التغيير
- يتم الآن تجميع الخطوط المصاحبة للنص المُشكل فرعياً في وقت الحفظ بحيث تقتصر فقط على الصور الرمزية (glyphs) التي يُظهرها المستند، مما يؤدي إلى تقليص ملفات الإخراج بشكل كبير (ينخفض حجم برنامج الخط الكامل الذي يزيد عن ميغابايت إلى الصور الرمزية المستخدمة فقط)؛ يحتفظ الخط الفرعي بترقيم صوره الرمزية، ويحمل اسم
BaseFontموسوماً بعلامة المجموعة الفرعية، ويحتوي على عروض فعلية للصورة الرمزية/W، ويكتسب خريطة ToUnicode تترجم كل صورة رمزية مُشكلة مرة أخرى إلى أحرفها المصدرية — لذلك فإن نسخ أو استخراج إخراجDrawShapedTextيعيد السلسلة الأصلية، بما في ذلك كلا الحرفين وراء الوصلة المركبة لام-ألف
Version 3.119.0
تمت الإضافة
- إضافة إمكانية رسم نصوص الكتابة المعقدة: يُشكل
DrawShapedTextالسلاسل النصية العربية والعبرية والنصوص المعقدة الأخرى قبل رسمها — وتظهر أشكال الحروف السياقية والوصلات الإلزامية مثل لام-ألف، والترتيب من اليمين إلى اليسار بشكل صحيح تماماً — ويكتب الصور الرمزية المُشكلة من خلال خط النوع 0 المصاحب (Identity-H) بتضمين برنامج الخط بالكامل، بحيث تُعرض الأشكال التي ليس لها رمز حرف خاص بها بدقة؛ يتم إنشاء خط مصاحب واحد لكل وجه نص ويُعاد استخدامه عبر الاستدعاءات - إضافة
GetShapedTextWidth، والذي يقيس النص من خلال دورة التشكيل ذاتها بحيث يتم قياس النص المتصل بعرض الرسم الفعلي له — يُستخدم لمحاذاة الفقرات المُشكلة إلى اليمين أو توسيطها
Version 3.118.0
تمت الإضافة
- تمت الإضافة the foundation for complex-script text shaping: a new Uniscribe (usp10.dll) binding turns Arabic, Hebrew and other complex-script strings into correctly ordered and shaped glyph runs — contextual Arabic forms, mandatory ligatures such as lam-alef, and right-to-left ordering — reporting each glyph's font glyph index, advance and source-character cluster; this is the shaping engine that later versions build the drawing path on, and it is loaded lazily so platforms without Uniscribe simply keep the existing per-character path
Version 3.117.0
تمت الإضافة
- تمت الإضافة ICC profile introspection:
GetOutputIntentICCInfoparses the ICC profile attached to the document's OutputIntent and reports its version, device class, data colour space, profile connection space, rendering intent and component count — useful for inspecting the print condition of PDF/A and PDF/X files; the renderer's ICCBased colour-space handling now also derives the component count from the profile header itself when a shading's colour space carries neither/Alternatenor/N
Version 3.116.0
تمت الإضافة
- تمت الإضافة a table-aware text extraction mode:
GetPageTextoption 10 clusters the left edges of the page's text blocks into global column positions and emits tab-separated rows, so tabular layouts extract as ready-to-import TSV with vertically aligned cells staying aligned across rows
Version 3.115.0
تمت الإضافة
- تمت الإضافة page imposition:
ImposePagesNUplays every page of the document out on new sheets in an n-up grid (2-up, 4-up, 9-up or any Columns x Rows arrangement) with each page aspect-fit and centred in its cell as live vector content, or — with the booklet option — produces saddle-stitch sheets whose page pairing folds into a booklet when printed duplex and stacked
Version 3.114.0
تمت الإضافة
- تم توسيع قارئات الإجراءات المكتوبة
GetAnnotActionInfoوGetOutlineActionInfoإلى أربعة أنواع أخرى من الإجراءات — إخفاء (مع عدد الأهداف المخفية وعلامة الإخفاء/الإظهار)، SubmitForm (عنوان URL للإرسال وعدد الحقول)، ResetForm (عدد الحقول) و ImportData (الملف المصدر) — ولعرض حمولة الاسم للإجراءات المسماة (مثلNextPage)؛ يشترك كلا القارئين الآن في محلل واحد، لذا تبلغ روابط التعليقات التوضيحية والإشارات المرجعية عن معلومات متطابقة
Version 3.113.0
تمت الإضافة
- تمت الإضافة form-field formatting helpers:
SetFormFieldNumberFormat(decimal places, separator style, negative style and currency placement),SetFormFieldPercentFormatandSetFormFieldDateFormat(Acrobat date picture strings such asmm/dd/yyyy) each write the standard Acrobat formatting JavaScript pair onto the field's additional actions — a keystroke filter plus a display formatter — so conforming viewers validate input and render formatted values without hand-written JavaScript
Version 3.112.0
تمت الإضافة
- تمت الإضافة Sound annotation creation:
AddSoundAnnotationFromFilereads an uncompressed PCM WAV file (8 or 16 bit, mono or stereo) and embeds its samples behind a speaker-icon annotation as a/Soundstream in the signed encoding the PDF sound machinery expects, completing the round trip with the existingGetAnnotSoundToFile/GetAnnotSoundToStringreaders
Version 3.111.0
تمت الإضافة
- تمت الإضافة threaded annotation replies (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyappends a reply to any existing annotation as a hidden Text annotation whose/IRTreferences the target with the/RTreply relationship, so Acrobat and other viewers show it threaded under the target in the comment panel; combine withAddAnnotationStateand the FDF comment interchange for complete collaborative-review round trips
Version 3.110.0
تمت الإضافة
- تمت الإضافة mesh and function-based shading rendering, completing coverage of all seven PDF shading types: free-form Gouraud triangle meshes (type 4), lattice-form Gouraud meshes (type 5), Coons patch meshes (type 6) and tensor-product patch meshes (type 7) are decoded from their bit-packed data streams — including shared-edge patch flags,
/Decodevalue mapping and optional colour/Functionramps — and painted through the Cairo engine's native mesh gradients; function-based shadings (type 1) are approximated by sampling the shading function over its domain into a fine patch grid; supported colour spaces cover DeviceRGB, DeviceGray, DeviceCMYK and ICCBased alternates (the GDI+ engine has no mesh gradient primitive and leaves mesh-shaded areas unpainted)
Version 3.109.0
تمت الإضافة
- تم الانتهاء من إطار عمل تحرير المحتوى (المرحلة 4) من خلال التحرير على مستوى النص: يقوم
TPDFContentProgram.GetTextRunsبسرد إرشادات عرض النص لصفحة مع مورد الخط والحجم النشط في كل منها (تتبع حالة الخط من خلال تداخل الحفظ/الاستعادة)، ويقومReplaceTextRunبتبديل النص المعروض في مكانه — استبدال حقيقي لتيار المحتوى يحافظ على الموضع والخط واللون الأصليين، على عكس الأساليب القائمة على التراكب التي تخفي النص القديم وتعيد الرسم في الأعلى
Version 3.108.0
تمت الإضافة
- تمت الإضافة an object model for page geometry to the content editing framework (phase 3):
TPDFContentProgram.LiftPathraises a path object (move/line/curve/rectangle construction operators plus the clipping and painting operators that end it) into an editableTPDFPathof subpaths and segments;TPDFPath.Transformapplies an affine matrix to every point (move, scale, rotate or skew existing artwork);LowerPathwrites the modified geometry back over the original instructions, ready forWritePageContentLayer
Version 3.107.0
تمت الإضافة
- تم توسيع إطار عمل تحرير المحتوى (المرحلة 2) مع وسائل الراحة على مستوى التعليمات على
TPDFContentProgram: يحللInsertFromSourceمقتطف محتوى ويوصل تعليماته في أي موضع؛ يعيدSetOperandكتابة معامل واحد من بناء جملة المصدر (إعادة ترقيم إحداثي، إعادة تلوين تعبئة)؛ يقرأOperandTextمعاملاً مرة أخرى؛ يتنقلInstructionGroupوFindNextOpوFindNextGroupفي قائمة التعليمات بواسطة المشغل أو بواسطة فئة مشغل ISO 32000-1
Version 3.106.0
تمت الإضافة
- تمت الإضافة the first phase of the structured content editing framework:
ParsePageContentLayerdecodes a page content layer into an editableTPDFContentProgram— a list of instructions, each one PDF content operator (all 73 operators of ISO 32000-1 Table 51) with its decoded operand objects — andWritePageContentLayerserialises the program back into the page, so callers can parse, inspect, delete or reorder drawing instructions and rewrite the page;GetPageContentLayerCountreports the number of content layers, which are edited independently; the emitter is behaviour-preserving (an unmodified round trip renders pixel-identically), unknown operators survive unchanged and inline images are carried verbatim
Version 3.105.0
تمت الإضافة
- تمت الإضافة a reading-order text extraction mode:
GetPageTextoption 9 returns the page text in visual reading order using recursive whitespace analysis (XY-cut), so multi-column layouts come out column by column — a full-width heading first, then the whole left column, then the right column — instead of interleaving the columns line by line as the geometric top-then-left orderings do
Version 3.104.0
تمت الإضافة
- تمت الإضافة signer-certificate introspection to the signature verifier:
GetSignerCertificatedecodes the PKCS#7 payload of the first signature field and returns a typed summary of the embedded signer certificate — subject and issuer display names, the serial number in conventional hex form, the UTC validity window (NotBefore/NotAfter) and a convenience flag reporting whether the certificate is currently within that window; the signer is matched among the embedded certificates by issuer and serial number
Version 3.103.0
تمت الإضافة
- تمت الإضافة
NewRGBRadialShader, the radial counterpart ofNewRGBAxialShader: registers a named two-circle radial gradient (ShadingType 3, ISO 32000-1 §8.7.4.5.3) blending between two RGB colours, with optional colour extension beyond the circles; select it with the existingSetFillShader,SetLineShaderorSetTextShaderto paint circular “glow” fills, strokes and text
Version 3.102.0
تمت الإضافة
- تمت الإضافة radial (ShadingType 3) gradient rendering (ISO 32000-1 §8.7.4.5.4): the page renderer now paints two-circle radial shadings used by
shoperators and shading-pattern fills, in addition to the previously supported axial (ShadingType 2) gradients; supported through both the GDI+ and Cairo raster engines with multi-stop colour functions, DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased colour spaces and/Extendhandling
Version 3.101.0
تمت الإضافة
- تمت الإضافة cloudy border effects (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectturns the border of a Square, Circle, Polygon or FreeText annotation into a “revision cloud” of connected semicircles by writing the/BEborder effect dictionary, with intensity 1 or 2 matching Acrobat's Cloudy styles and 0 removing the effect again;GetAnnotCloudyEffectreads the setting back (0 = no cloud, else the 1..2 intensity)
Version 3.100.0
تمت الإضافة
- تمت الإضافة annotation review states (ISO 32000-1 §12.5.6.3):
AddAnnotationStaterecords a review status change for an existing annotation by appending a hidden Text annotation whose/IRTpoints at the target and whose/State+/StateModelcarry the status, supporting theReviewmodel (None/Accepted/Rejected/Cancelled/Completed) and theMarkedmodel (Unmarked/Marked) used by Acrobat's comment-review workflow;GetAnnotStateandGetAnnotStateModelread the recorded strings back from any annotation (empty when absent)
تم الإصلاح
- تم الإصلاح a load-time failure that prevented applications built with recent development versions from starting (a Windows certificate-name lookup was bound to a non-existent DLL entry point), and repaired compile regressions in the FDF comment import, page-range rotation and signature-flag paths
Version 3.99.0
تمت الإضافة
- إضافة واجهات API لقراءة بصمة المستند والانتقال: يعيد
GetDocumentFileIDمعرّف المستند الدائم من مصفوفة/IDفي التذييل (العنصر الأول المشفر بالنظام الست عشري)، وهو مفيد كمفتاح ذاكرة تخزين مؤقت مستقر أو بصمة مستند؛ يُعدGetPageTransitionالنظير من جانب القراءة لـSetPageTransition، حيث يعيد نمط الانتقال كقيمة ذات نوعTPDFlibPageTransitionبالإضافة إلى مدة العرض ومدة الانتقال عن طريق التعيين العكسي لمدخلات/Transو/Sو/Dmو/Mالمخزنة
Version 3.98.0
تمت الإضافة
- إضافة واجهات API لتدوير نطاق الصفحات واستبطان الصور المصغرة: يطبق
RotatePageRangeدورانًا بمقدار 0/90/180/270 على كل صفحة ضمن نطاق (مغلفًا لـRotatePageالحالية للصفحة الواحدة بحيث لا يحتاج المستدعون بعد الآن إلى حلقة لكل صفحة)؛ يُبلغHasPageThumbnailعما إذا كانت الصفحة تحمل مدخلًا من نوع/Thumb؛ يقرأGetPageThumbnailInfoالعرض والارتفاع والبتات لكل مكون لصورة XObject المصغرة
Version 3.97.0
تمت الإضافة
- إضافة قارئات خصائص التعليقات التوضيحية الموسعة: يقرأ
GetAnnotColorمصفوفة الألوان/C(0..1 RGB، مع علامة HasColor التي تميز بين “بدون لون صريح” و“أسود صريح”)؛ يقرأGetAnnotBorderWidth/BS /W، متراجعًا إلى مصفوفة/Borderالقديمة؛ يقرأGetAnnotOpacityقيمة ألفا لخط الرسم/CA(الافتراضي 1.0)؛ يقرأGetAnnotCreationDateالطابع الزمني لـ/CreationDate؛ يقرأGetAnnotFlagsبايت علامات الرؤية/الطباعة/F
Version 3.96.0
تمت الإضافة
- إضافة واجهات API لاستبطان الأمان من جانب القراءة: يُبلغ
IsEncryptedعما إذا كان المستند المحمل يحمل قاموس/Encrypt؛ يعيدGetEncryptionLevelقوة ذات نوع (0=none، 1=RC4-40، 2=RC4-128، 3=AES-128، 4=AES-256، 5=AES-256 Acrobat X) مطابقة لخيارات التشفير من جانب الكتابة؛ يعيدGetUserPermissionsكلمة الصلاحيات/Pالخام لاختبار البتات المباشر؛ يُبلغIsOwnerPasswordعما إذا كان قد تم فتح المستند باستخدام بيانات اعتماد المالك
Version 3.95.0
تمت الإضافة
- إضافة واجهات للطباعة المتقدمة واستبدال النصوص: يُشغّل
PrintDocumentAdvancedإعدادات الطابعة الكاملة DEVMODE (مزدوج، الاتجاه، اللون، جودة الطباعة، حجم الورق، درج الورق) بالإضافة إلى النسخ/الترتيب عبر سجلTPDFlibPrintSettingsذي نوع، مُطبقًا كل حقل غير افتراضي من خلال آلية ملف تعريف الطابعة المخصص الحالية؛ يُجريSearchAndReplaceTextبحثًا عبر نطاق صفحات، ولكل تطابق، يُخفي كتلة النص الأصلية بمستطيل أبيض غير شفاف ويُعيد رسم النص البديل عند نقطة بداية الكتلة بالخط الذي حدده المستدعي، ليطابق سلوك التراكب-الاستبدال الخاص بـ SearchAndReplace في PDFtoolkit
Version 3.94.0
تمت الإضافة
- إضافة تبادل التعليقات التوضيحية بصيغة FDF (وظيفة “Export/Import Comments” في Acrobat): ينتقل
ExportAnnotationsToFDFStringوExportAnnotationsToFDFعبر مدخلات/Annotsلكل صفحة ويقومان بتسلسل كل تعليق توضيحي كمدخل/Type /Annotداخل مصفوفة/Annotsفي FDF، مع تضمين/Subtypeو/Contentsو/Rectوتسمية المؤلف/Tو/Subjوفهرس/Pageالذي يبدأ من الصفر؛ يقومImportAnnotationsFromFDFStringوImportAnnotationsFromFDFبتحليل ملف FDF هذا باستخدام آلة حالة صغيرة وإعادة إنشاء كل مدخل كتعليق توضيحي جديد في الصفحة المطابقة، مع الحفاظ على قاموس التعليق التوضيحي بالكامل بدلاً من طيه إلى ملاحظة لاصقة
Version 3.93.0
تمت الإضافة
- إضافة واجهات API لشهادات التوقيع وخصائص حقول النماذج: يُحوّل
SetSignProcessDocMDPالتوقيع التالي الناتج عن عملية التوقيع إلى توقيع تصديق (مؤلف) عن طريق إرفاق تحويل DocMDP/Referenceعند المستوى 1/2/3 (بدون تغييرات / تعبئة النموذج / التعليقات التوضيحية) وتعيين بت AppendOnly في/SigFlagsالتابع لـ AcroForm؛ يقرأ ويَكتبGetSigFlags/SetSigFlagsبايت/SigFlagsالخام لـ AcroForm مباشرةً؛ تكشف دوالGetFormFieldIsCombوGetFormFieldIsMultiLineوGetFormFieldJustificationوGetFormFieldAllowedValuesعن بتات نمط/Ffالخاصة بكل حقل، وتنسيق النص/Qومصفوفة الخيارات/Optكقيم ذات نوع
Version 3.92.0
تمت الإضافة
- إضافة واجهات API لتصدير المرفقات والملاءمة لحقول النماذج: ينتقل
SaveAllAttachmentsعبر قائمة المرفقات الموحدة (التعليقات التوضيحية للملفات على مستوى المستند/EmbeddedFilesبالإضافة إلى التعليقات التوضيحية للصفحة/FileAttachment) ويكتب كل تدفق إلى دليل باستخدام اسم ملفه المحدد، مزيلًا الغموض عند التعارض باستخدام لاحقة رقمية؛ يحلRemoveFormFieldByNameاسم الحقل المؤهل بالكامل إلى فهرسه ويحذفه؛ يعيدRenameFormFieldتسمية حقل بالاسم دون إجراء بحث منفصل عن الفهرس
Version 3.91.0
تمت الإضافة
- إضافة واجهات API للتعداد على مستوى المستند: ينتقل
EnumDocumentFontsعبر كل قاموس خط (مستدعيًاFindFontsأولاً إذا لزم الأمر) ويعيد كائنTPDFlibDocumentFontواحدًا لكل خط مع رقم الكائن الخاص به، واسم/BaseFont، والنوع، والترميز، وحالة التضمين/المجموعة الفرعية، مما يزيل الحاجة إلى استدعاءSelectFontلكل مدخل والاستعلام عن دوال الجلب العددية؛ يُوحّدEnumAttachmentsشجرة أسماء/EmbeddedFilesعلى مستوى المستند مع التعليقات التوضيحية/FileAttachmentلكل صفحة في قائمةTPDFlibAttachmentواحدة، مسجلاً مصدر كل مدخل، وفهرس المصدر الذي يبدأ من 1، واسم الملف، والنوع الفرعي MIME، والوصف، وحجم البايت
Version 3.90.0
تمت الإضافة
- إضافة واجهات API للاستبطان للقراءة فقط للتعليقات التوضيحية، والإشارات المرجعية، وإصدار المستند: يعيد
GetPDFVersionسلسلة إصدار PDF الفعالة (مثل1.7)؛ تكشفGetAnnotTypeوGetAnnotTitleوGetAnnotSubjectوGetAnnotContentsExوGetAnnotModifiedDateوGetAnnotNameوGetAnnotRectExعن حقول التعليق التوضيحي كمغلفات مسماة (بحيث لا يحتاج المستدعون بعد الآن إلى أرقام خاصية Tag السحرية) فوق ذاكرة التخزين المؤقتAnalyseAnnotالحالية؛ يعيدGetOutlineLevelعمق الإشارة المرجعية بالنسبة لجذر المخطط ويُبلغGetOutlineIsOpenعما إذا كانت موسعة في العارض (الرقم السالب في/Countيعني أنها مطوية)، ليعكس حالة التخطيط التي سيعرضها جزء الإشارات المرجعية
Version 3.89.0
تمت الإضافة
- إضافة وحدة تشفير صور JBIG2
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray)، تم نقلها من منتج HotPDF الشقيق، مع نهايتين خلفيتين: على Win64 يُربط المشفّر الحسابي C++jbig2enc(ITU-T T.88) بشكل ثابت عبرPDFlibJBIG2EncC+HPDFCLibs(228 كائن leptonica/jbig2enc ضمنthirdparty/Win64x/) ويُسجّل كخلفية افتراضية، ليطابق مسار إنتاج HotPDF؛ على الأهداف الأخرى، أو عندما يكونUseExternalEncoderخطأ (False)، تضغط عملية احتياطية MMR من Pascal الخالص خطوط المسح ثنائية المستوى بمشفّر CCITT G4 وتغلفها برؤوس أجزاء JBIG2 (معلومات الصفحة نوع 48 + منطقة عامة فورية نوع 38) - إضافة وحدة تشفير LZW
PDFlibLZWEnc(TPLLZWEncoder.Compress)، وهي النظير المشفّر لمفكّك الشفرةPDFlibLZWالحالي: تنتج تدفق/LZWDecodeوفق مواصفات PDF برموز متغيرة العرض من 9 إلى 12 بت، ودلالات ClearCode/EOI وEarlyChange الافتراضية في PDF، بالإضافة إلى TIFF Predictor 2 (التفاضل الأفقي) اختياريًا بحيث تعيد دورة كاملة عبر مفكّك الشفرة إنتاج البايتات الأصلية
Version 3.88.0
تمت الإضافة
- إضافة وحدة تشفير صور ثنائية المستوى CCITT Group 3 / Group 4 (T.6) باسم
PDFlibCCITTEnc(TPLCCITTEncoder)، وهي النظير المشفّر لمفكّك الشفرةPDFlibCCITTالحالي: تقوم بتشفير صورة نقطيةpf1bitإلى تدفق بايتات CCITT G3 1D / G3 2D / G4 (T.6) عبرCompressImage/Execute، تم نقلها من منتج HotPDF الشقيق (كلاهما يشتركان في ترخيص losLab)؛ ويوفر هذا المشفّر المفقود حتى يمكن إنتاج بيانات صور أحادية اللون لمخرجاتCCITTFaxDecode، مع تكامل كامل لمسار الصورة ومخرجاتRenderPageToMonochromeFileG4 لاحقًا
Version 3.87.0
تمت الإضافة
- تنفيذ التحقق التشفيري من التوقيعات لتوقيعات PKCS#7 المنفصلة: يقوم
TPDFlibSignatureVerifier.VerifySignature(الذي كان سابقًا مجرد كعب يعيدvsUnknown) الآن بإعادة حساب ملخص المستند عبر جزئي/ByteRangeوالتحقق منه مقابل سمةmessageDigestالموقعة والمفتاح العام للمُوقّع عبر Windows CryptoAPI (CryptVerifyDetachedMessageSignature)، ويعيدvsValid/vsInvalidللمرشحات الفرعيةadbe.pkcs7.detachedوETSI.CAdES.detached؛ هذه هي طبقة التحقق الأولى وتغطي سلامة الملخص والتوقيع فقط (سلسلة الشهادات وإلغاء CRL/OCSP والتحقق من الرمز المميز للطابع الزمني RFC 3161 تظل خارج النطاق وستُضاف في طبقات لاحقة)
Version 3.86.0
تمت الإضافة
- إضافة استدعاء خلفي لكل إشارة مرجعية في وقت الدمج: يُطلق حدث
OnMergeOutlineلكل مخطط مصدر من المستوى الأعلى بينما تقومMergeFileList/MergeFileListFast/MergeFileListStrictبربط شجرة المخطط المدمجة، مما يسمح للمستدعي بإعادة تسمية (Title) أو إسقاط (Skip=True) إشارة مرجعية واردة قبل أن تهبط في المستند الهدف؛ يتلقى الاستدعاء الخلفي فهرس المستند المصدر الذي يبدأ من الصفر حتى يتمكن المستدعون من تطبيق سياسات خاصة بكل مستند
Version 3.85.0
تمت الإضافة
- إضافة التوقيع من مخزن شهادات نظام Windows: يحل
SetSignProcessCertFromStoreشهادة التوقيع من مخزن مُسمى ("MY"/"Root"/...) بواسطة اسم عرض الموضوع البسيط (عادةً CN، بمطابقة غير حساسة لحالة الأحرف؛ الاسم الفارغ يختار أول شهادة تحتوي على مفتاح خاص) ويعيد استخدام مسار توقيع PKCS#7 الحالي، بحيث يمكن توقيع مستند دون توفير ملف.pfx/.p12؛ قم بدمجه معSetSignProcessKeysetلاختيارCURRENT_USER(1) مقابلLOCAL_MACHINE(2)
Version 3.84.0
تمت الإضافة
- إضافة دمج برنامج الخط للمستندات المحملة بالفعل: يفحص
EmbedMissingFontsكل قاموس خط، ويقرأ برنامج خط النظام المثبت المطابق بواسطة اسم BaseFont ويكتبFontFile2أوFontFile3مرة أخرى، ويعيد عدد الخطوط التي اكتسبت برنامجًا؛ يدمجEmbedFontProgramخطًا واحدًا بالاسم باستخدام خط النظام المثبت؛ يدمجEmbedFontProgramFromFileخطًا واحدًا باستخدام ملف.ttfأو.otfمقدّم من المستدعي للخطوط غير المثبتة على النظام - إضافة
SetEmbedAllFonts، وهو حارس من جانب الكاتب يرقّيAddTrueTypeFontEmbed=0إلىEmbed=1بحيث لا يمكن للمستندات المنشأة حديثًا الإشارة عن طريق الخطأ إلى خطوط نظام غير مدمجة خارج وضع PDF/A أيضًا
Version 3.83.0
تمت الإضافة
- إضافة واجهات API مساعدة للتصيير: يقوم
RenderPageToMonochromeFileبتصيير الصفحة إلى صورة نقطية أحادية اللون بتنسيق 1 بت (لسيناريوهات الفاكس/الأرشفة/OCR) من خلال تخفيض اللون من 24 بت باستخدام التردد النصفي لـ GDI، دون تعديل نواة التصيير؛ يقومRenderPageRegionToFileبتصيير مستطيل فرعي محدد من الصفحة فقط (“Left,Top,Width,Height”) كصورة نقطية، وقد تم ربط مسار Clip السابق المفصول لـRenderPageToDCClip
Version 3.82.0
تمت الإضافة
- إضافة تصدير بيانات نموذج FDF: يكتب
ExportFormDataToFDFجميع أسماء وقيم حقول النموذج للمستند الحالي إلى ملف FDF مستقل (مصفوفة/Fieldsمغلفة بـ%FDF-1.2)، ويعيدExportFormDataToFDFStringسلسلة نصية بنفس الهيكل، مما يسهل تخزين بيانات النموذج بشكل منفصل عن PDF أو دمجها لاحقاً؛ ويتم تهريب البايتات غير ASCII باستخدام التنسيق الثماني من ثلاثة أرقام وفقاً لمعيار ISO 32000-1
Version 3.81.0
تمت الإضافة
- إضافة واجهات API مساعدة للصفحات والهيكل: يكتب
SetPageTransitionتأثير انتقال العرض التقديمي للصفحة المحددة (17 انتقالاً قياسياً لـ/Trans، بما في ذلك Split/Blinds/Wipe/Dissolve/Glitter وغيرها) ومدة عرض الصفحة؛ يقوم كل منGetPageFontCountوGetPageFontIDبتعداد الخطوط المشار إليها في صفحة معينة؛ يقبلSetMeasurementUnitتعداد وحدات ذي نوع (يضيف twips و points إلى بكسل/ملم/بوصة الحالية)، بالإضافة إلى واجهات مساعدة لتحويل الوحداتConvertToPointsوConvertFromPoints؛ يستخدمSaveToFileOptionsسجلاً واحداً لتجميع خيارات الحفظ مثل الضغط والتخطيط الخطي والاحتفاظ بتاريخ التعديل
Version 3.80.0
تمت الإضافة
- إضافة واجهات API مساعدة للأمان والتواقيع: يقبل
EncryptFileExمجموعة صلاحيات مسماة ذات نوع (TPDFlibUserPermissions، تميز بين 8 بتات صلاحيات مسماة مثل الطباعة بدقة منخفضة والطباعة بدقة عالية) بدلاً من عدد صحيح لبتات الصلاحيات الأصلية؛ يقرأTPDFlibSignatureVerifier.GetSignatureMetadataمباشرة من قاموس التوقيع اسم الحقل، Filter، SubFilter، وقت التوقيع، السبب، الموقع، معلومات الاتصال، الموقّع والتحقق من هيكل ByteRange، دون الحاجة إلى فك تشفير PKCS#7؛ يحددPrintDocumentExعدد النسخ للطباعة وطريقة الفرز في استدعاء واحد
Version 3.79.0
تمت الإضافة
- إضافة واجهات API مساعدة للتحرير: يرسم
MaskRectمستطيل تعبئة غير شفاف لتغطية منطقة (تظليل/تنقيح) في صفحة محددة؛ يعلقSetPageThumbnailFromFileالـ/Thumbللصفحة مباشرة من ملف صورة دون تلويث حالة رسم تدفق المحتوى؛ يقومFlattenFormFieldsOnPageRangeبتسطيح جميع حقول النموذج ضمن نطاق أرقام الصفحات (تُخبز المظاهر كمحتوى ثابت وتُزال الحقول النشطة)؛ يدرجInsertAnnotationقاموس تعليقات توضيحية تم إنشاؤه مسبقاً في موقع محدد؛ ينشئNewMarkupAnnotationتعليقات توضيحية للتمييز من نوع التمييز/يتوسطه خط/تسطير/خط متعرج في خطوة واحدة ويكتب نقاط quad، اللون والشفافية؛ يضيف كل منStampTextوStampImageعلامات مائية عبر نطاق أرقام الصفحات، مع دعم الشفافية وزاوية الدوران وموضع التراكب
Version 3.78.0
تمت الإضافة
- إضافة واجهات API للاستعلام عن النص وتعداد عناصر الصفحة: يبحث
SearchTextعن مصطلح استعلام في نطاق محدد من الصفحات، ويعيد رقم الصفحة والمستطيل المحيط لكل تطابق، ويدعم خيارات حساسية حالة الأحرف ومطابقة الكلمة بأكملها؛ يعددEnumPageElementsجميع كتل النصوص وعناصر الصور المضمنة في صفحة معينة، ويعيد بشكل موحد نوع العنصر، المستطيل، النص، اسم الخط ومعرّف الصورة؛ يمثلGetTextInAreaExالإصدار المزوّد بمستطيل لـGetTextInArea، حيث يعيد كل كتلة نصية والمستطيل المحيط بها ضمن المنطقة
Version 3.77.0
تمت الإضافة
- إضافة واجهات API للاستبطان للقراءة فقط، لتكملة عدم التماثل السابق المتمثل في "القدرة على الكتابة دون القراءة": يبحث
FindOutlineByTitleعن إشارة مرجعية بواسطة العنوان (يدعم ثلاثة أعماق: الإخوة فقط/الأبناء فقط/الشجرة بأكملها)؛ يعيد كل منGetOutlineActionInfoوGetAnnotActionInfoهيكلًا ذا نوع يحتوي على نوع الإجراء للإشارة المرجعية أو التعليق التوضيحي (GoTo/GoToR/URI/Launch/Named/JavaScript) مع حمولات URI أو JavaScript أو اسم الملف؛ يعيدGetOutlineDestinationInfoالصفحة الهدف ونوع Fit (بما في ذلك XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) مع الإحداثيات؛ يعددEnumSignaturesوGetSignatureFieldCountوGetSignatureFieldInfoحقول التوقيع ويبلغ عما إذا كانت قد وُقّعت بالفعل
Version 3.76.3
تغييرات
- أصبح ملف تعريف Factur-X EXTENDED في عرض E-Invoice يستخدم قيمة conformance القياسية ومعرّف guideline القياسي، وتضيف فاتورة ZUGFeRD 1.0 عناصر الجمع
ChargeTotalAmountوAllowanceTotalAmount؛ جميع الملفات الستة تنتج الآن مخرجات PDF/A-3b وPDF/A-3u تجتاز كلًّا من veraPDF (توافق PDF/A) وMustang (قواعد العمل للفوترة الإلكترونية)
Version 3.76.2
إصلاحات
- تصرّح بيانات XMP الوصفية للفواتير الهجينة Factur-X/ZUGFeRD الآن بمخطط امتداد PDF/A (
pdfaExtension:schemas) لوصف خصائص الفاتورةfx:؛ كان غياب هذا التصريح سابقًا يجعل ملف PDF/A-3 الناتج يُحكم عليه بأنه غير مطابق من قبل أدوات التحقق مثل veraPDF
تغييرات
- أصبح XML الفاتورة في عرض E-Invoice يتضمّن العناوين الإلكترونية للبائع والمشتري وكذلك هاتف البائع، مما يتيح لملفات تعريف أكثر اجتياز التحقق من قواعد عمل ZUGFeRD/Factur-X
- أُخرجت قائمة الملفات التعريفية وبناء XML وتدفق توليد PDF/A-3 في عرض E-Invoice إلى وحدة مشتركة يعيد استخدامها كلٌّ من واجهة GUI وأداة اختبار المدقق الخارجي الجديدة
Version 3.76.1
إصلاحات
- إصلاح انهيار في عرض E-Invoice عند النقر على إنشاء: الخطوط القياسية المدمجة غير متاحة في وضع PDF/A، لذلك أصبح العرض يضمّن خط TrueType لعرض صفحة الفاتورة
تغييرات
- يزيل عرض E-Invoice خيار PDF/A-3a (نادر الاستخدام في الفوترة الإلكترونية)، وأصبح الملف التعريفي XRechnung يستخدم PDF/A-3u افتراضيًا
Version 3.76.0
تغييرات
- أصبحت واجهة GUI لعرض E-Invoice مدفوعة بالبيانات: رقم الفاتورة وتاريخ الإصدار والمشتري والبائع وصافي المبلغ ونسبة الضريبة والعملة قابلة للتحرير، ويتطابق XML الفاتورة تمامًا مع المبالغ الظاهرة في الصفحة بدلًا من استخدام محتوى ثابت مخصص كحامل مكان
- ينشئ العرض XML فاتورة صحيح بنيويًا لكل ملف تعريفي: تستخدم Factur-X وXRechnung وZUGFeRD 2.0 بنية
CrossIndustryInvoice، بينما يستخدم ZUGFeRD 1.0 COMFORT بنيته الخاصةCrossIndustryDocumentمع بنود الأصناف ومجاميع الضرائب وشروط الدفع - تُكتب المبالغ إلى XML بتنسيق النقطة العشرية الإنجليزي الثابت لتجنب أن تكسر فواصل الآلاف المترجمة أو الفواصل المخطط، وتُهرب مدخلات المستخدم قبل الكتابة
- يضيف العرض معاينة XML حيّة وعمليات تحقق ذاتي للمحتوى على مستوى الملف التعريفي وتحليلًا لتقرير التحقق الخارجي
.validation.jsonالذي يحمل الاسم نفسه، ويحمّل صراحةً intent مخرجات sRGB ICC من المستودع عند التوليد
Version 3.75.6
تمت الإضافة
- يضيف
SetPDFAModeالوضع7لإنشاء بيانات تعريف PDF/A-3u مع الاستمرار في السماح بالملفات المرتبطة PDF/A-3؛ كما يوفر عرض E-Invoice بواجهة GUI خيار PDF/A-3u، ويستخدم ملف التعريف ZUGFeRD 2.0 BASIC الآن PDF/A-3u افتراضياً
Version 3.75.5
تمت الإضافة
- يضيف عرض Delphi E-Invoice بواجهة GUI يمكنه اختيار ملفات تعريف Factur-X وZUGFeRD وXRechnung، وإنشاء فواتير هجينة PDF/A-3، وتضمين اسم ملف XML وguideline ID المطابقين، وتشغيل تحقق container في الواجهة، وعرض معلومات فاتورة XMP ومشكلات التحقق وملف XML المستخرج
Version 3.75.4
تمت الإضافة
- يضيف دعماً للملفات المرتبطة PDF/A-3 وXML الفواتير الإلكترونية: يستطيع
AddPDFA3AssociatedFileFromStringإنشاء ملفات مرتبطة Catalog/AFمباشرة من بايتات الذاكرة، ويستطيعAddFacturXAssociatedFileFromStringكتابة XML خاص بـ Factur-X وZUGFeRD وXRechnung، ومزامنة بيانات XMP التعريفية، والتحقق من تركيبة اسم الملف والملف التعريفي ومساحة أسماء XMP وguideline ID في XML، بينما يضيف جانب القراءة APIs للكشف والتحقق وقائمة المشكلات واستخراج XML
Version 3.75.3
تم الإصلاح
- دالة دمج PDF: كانت المتغيرات المحلية
GlobalRootObjNumوGlobalRootGenNumوStructRootGlobalObjNumوStructRootGlobalGenNumتُسند فقط داخل الكتل الشرطية، مما تسبب في تحذيرات W1036 “قد لا يكون المتغير مهيأً” على مترجمات Delphi Win64 26 و29 (RAD Studio 12 و16)؛ أُضيفت تهيئة صفرية عند دخول الدالة
Version 3.75.2
تم الإصلاح
- توافق البناء متعدد الإصدارات: كانت حلقة
forفي محلل السلاسل الست عشرية (PDFlibStruct) تستخدم متغير تحكم من نوعInt64، وهو ما ترفضه Delphi XE3/XE5 (المترجمات 26/27) باعتباره غير ترتيبي؛ أُعيدت كتابتها كحلقةWhileلاستعادة التوافق مع RAD Studio 12 و14 - مدقق Reference XObject (
PDFlibPDFUA): لم يكن المؤشر القاموسيDمهيأً في الفرع غير المتدفق/غير القاموسي، مما تسبب في تلميح من المترجم على جميع الأهداف؛ أُعيدت هيكلة الفرع بحيث يُسندDدائمًا قبل فحصAssigned - غلاف
CreateFontPackage(PDFlibFont): جرى كتم تحذير W1035 الزائف “قد تكون قيمة الإرجاع غير معرّفة” على Delphi ≤ XE8 مع تجنب التلميح H2077 المقابل حول إسناد ميت على المترجمات الأحدث، عبر حارس{$IF CompilerVersion} - كاتب BMP DPI ومسار الحفظ التزايدي لـ PDF: استُبدلت استدعاءات
TStream.Seek(Longint, Word)المهجورة بإسناداتPosition :=(PDFlibPDFiumوPDFlibDocument)
Version 3.75.1
تم الإصلاح
- محلل TIFF متعدد الصفحات: كان حارس إنهاء الحلقة ضد أعداد الصفحات الكبيرة جدًا غير فعّال لأن
FPageCountكان معرّفًا على أنهWord(الحد الأقصى 65 535)، مما جعل المقارنة> 65535دائمًا خاطئة؛ غُيّر إلىIntegerبحيث يعمل الحارس الآن بشكل صحيح على الملفات الشاذة - محلل charset لـ CFF/Type 2 (Format 1 وFormat 2): أزيلت إسنادات
Done := Trueالميتة التي سبقت مباشرةBreakوبالتالي لم تكن تُقرأ أبدًا، مما أزال تلميحات المترجم
Version 3.75.0
الأمان
- تم تعزيز تحليل الخطوط المضمنة غير الموثوقة (TrueType وType 1 وCFF وCMap) ضد عمليات الكتابة خارج الحدود، والاستدعاء التتابعي غير المحدود في charstring، وتخصيصات الذاكرة المفرطة الناتجة عن بيانات خط معطوبة
- تم تعزيز مفككات الصور (PNG وGIF وTIFF وJBIG2 وCCITT Group 3 و4) ضد القراءات والكتابات خارج الحدود، وفيض الأعداد الصحيحة في حسابات العرض والارتفاع، وإلغاء الإشارة إلى لوحات فارغة الناتجة عن صور خبيثة
- تم تعزيز مرشحات التدفق (LZW وASCII85 وFlate predictors) ضد قراءات المخزن المؤقت الزائدة، والقسمة على صفر، والحلقات غير المنتهية عند معالجة بيانات تدفق مُصاغة خصيصًا
- تم تعزيز تحليل المرجع المتقاطع وإعادة بناء المستندات وشجرة الأسماء ضد الوصول خارج الحدود والحلقات اللانهائية الناتجة عن بيانات مرجع متقاطع معطوبة أو دائرية
- يفحص فك التشفير AES-CBC الآن محاذاة كتل النص المشفر ويصفّر مخزن الإخراج، مما يمنع تسرب ذاكرة heap غير مهيأة إلى السلاسل والتدفقات المفكوكة
تم الإصلاح
- تُنتَج الآن بصمات التوقيع المنفصلة SHA-256 وSHA-384 وSHA-512 بواسطة موفر التشفير الصحيح؛ وكانت تُرجع سابقًا بصمة فارغة وتؤدي إلى توقيعات غير صالحة
- لم يعد فك ترميز ASCII85 وRC4 يعيد بيانات غير مهيأة أو يرمي استثناءً عند الإدخال المبتور أو المفتاح الفارغ
- يُقرأ لون خلفية GIF الآن بالقناة الزرقاء الصحيحة بدلًا من تكرار القناة الخضراء
Version 3.74.1
تم الإصلاح
- إصلاح خطأ تجميع E2010 من نوع غير متوافق في دعم بيانات التحقق من توقيع PAdES (VRI) الذي كان يمنع المكتبة من التجميع
- أُزيل آخر تحذير للمترجم وتلميحات المتغيرات غير المستخدمة؛ أصبحت جميع بنيات مكتبة trial وrelease لـ Win32 وWin64 تُجمَّع الآن بدون تحذيرات
Version 3.74.0
تمت الإضافة
- تقرأ المسارات المباشرة للملفات في
EncryptFileوDecryptFileالآن ملفات PDF التي توجد بيانات المرجع المتقاطع فيها داخل تدفقات المرجع المتقاطع، بما في ذلك السلاسل المحدثة تدريجيًا وملفات المرجع الهجين ذات القسم الجانبي/XRefStm، بدلًا من الرجوع إلى القارئ الكامل الأبطأ: انخفضت حماية AES-256 لمستند اختبار بحجم 1.25 GB من نحو 4.4 إلى 2.5 ثانية، وانخفض فك التشفير من نحو 1.7 إلى 1.3 ثانية - تُصدر عمليات إعادة الكتابة التي تحمل كائنات مخزنة في تدفقات كائنات مضغوطة الآن تذييلًا على شكل تدفق مرجع متقاطع، مما يبقي تلك الكائنات قابلة للوصول في الناتج المشفّر أو المفكك
تم الإصلاح
- لم يعد أي إصدار يفتقر إلى مستند
/IDفي ملف مُحدَّث تدريجيًا يمحو المعرّف الموروث من إصدار أقدم أثناء إعادة كتابة مباشرة
Version 3.73.2
تم التغيير
- يجمع
DASaveAsFileالآن كتابات الإخراج ويحدد كلمة الإغلاق لكل كائن من دون تخصيصات سلاسل في كل خطوة، مما خفّض إعادة كتابة مستند اختبار بحجم 2 GB يضم أكثر من مليون كائن من نحو 57 إلى 11 ثانية
Version 3.73.1
تم التغيير
- تقرأ المسارات المباشرة للملفات في
EncryptFileوDecryptFileالمصدر الآن عبر نافذة منزلقة وتجمع كتابات الإخراج، بحيث تعمل حماية AES-256 لملفات PDF الضخمة جدًا ذات ملايين الكائنات أسرع عدة مرات: في مستند اختبار بحجم 2 GB، انخفض التشفير من نحو 123 إلى 32 ثانية، وانخفض فك التشفير من نحو 127 إلى 23 ثانية - لم تعد أجسام الكائنات التي تناسب نافذة القراءة تُجلب من القرص مرتين أثناء إعادة كتابة مباشرة باستخدام AES-256
تم الإصلاح
- تعود إعادة الكتابة المباشرة باستخدام AES-256 لملفات PDF ذات المرجع الهجين (الملفات التي تحمل إدخال تذييل
/XRefStm) الآن إلى القارئ الكامل بدلًا من المخاطرة بفقدان الكائنات المضغوطة - لم يعد تحليل المرجع المتقاطع في المسار المباشر للملف يقرأ كل شيء من قسم المرجع المتقاطع إلى نهاية الملف دفعة واحدة، وهو ما كان يمكن أن يستنفد الذاكرة في الملفات متعددة الجيجابايت التي تشير سلسلة
/Prevفيها قرب بداية الملف، كما أن سلسلة/Prevالمعطوبة تعود الآن إلى القارئ الكامل بدلًا من إنتاج مستند غير مكتمل
Version 3.73.0
تمت الإضافة
- ينفذ عرض SigningWorkbench الآن تحققًا تشفيريًا كاملًا من بصمات التوقيع المنفصل CMS (
adbe.pkcs7.detachedوETSI.CAdES.detached) عبر Windows CryptoAPI: تُعاد هاشاة نطاقات البايت الموقعة وتُفحص مقابل توقيع CMS، ويُبلَّغ عن المستند المعدّل برمز الفشل الجديد SG203، ويحمل كل توقيع حقلdigestValidثلاثي الحالات في تقارير JSON وCSV وHTML - مفاتيح الأتمتة الجديدة لـ SigningWorkbench: يطبع
--quietفقط ملخص الدفعة ومسارات التقارير، ويوقف--fail-fastالدفعة عند أول ملف فاشل، ويسجل تقرير JSON الآن إصدار المكتبة
Version 3.72.0
تمت الإضافة
- يكتسب عرض ComplianceWorkbench سير عمل دفعات احترافية: يحمّل
--policy-fileسياسة التدقيق من ملف JSON بحيث تستطيع الفرق إصدار ومشاركة قواعد المستندات الخاصة بها، ويقارن--baselineالتشغيل بتقرير compliance-report.json أقدم ويسرد الإخفاقات الجديدة والملفات التي جرى إصلاحها والملفات التي ما زالت تفشل، ويدمج--preflight-detailsأسطر مشكلات preflight داخل تقارير JSON وHTML - مفاتيح الأتمتة الجديدة لـ ComplianceWorkbench: يطبع
--quietفقط ملخص الدفعة ومسارات التقارير، ويوقف--fail-fastالدفعة عند أول ملف فاشل، ويسجل تقرير JSON الآن إصدار المكتبة
Version 3.71.2
تم الإصلاح
AppendToFileيضيف مرة أخرى التحديثات التزايدية إلى ملف PDF نفسه الذي جرى تحميله باستخدامLoadFromFile؛ ويحافظ محمل التدفق الآن على إمكانية قراءة ملف المصدر دون حجب مقبض الكتابة اللازم للتحديث
Version 3.71.1
تمت الإضافة
- تتضمن تقارير ComplianceWorkbench وSigningWorkbench الآن تسميات شدة النتائج، وحقول أعلى شدة لكل ملف، وملخصات تكرار الشدة على مستوى الدفعة، ومخرجات JSON وCSV وHTML ووحدة التحكم المطابقة لتسريع فرز السياسات
Version 3.71.0
تمت الإضافة
- يعرض فحص عرض SigningWorkbench الآن ترتيب المراجعات ومستوى اعتماد DocMDP لكل توقيع، ويعلّم خوارزميات توقيع الشهادة الضعيفة MD5/SHA-1 والـ SubFilter القديم adbe.pkcs7.sha1 باستخدام
--forbid-weak-digest(SG303/SG405)، والشهادات الموقعة ذاتيًا باستخدام--forbid-self-signed(SG406)، والمستندات التي لا تحتوي على توقيع اعتماد باستخدام--require-certified(SG304)، ويتحقق دائمًا مما إذا كان وقت التوقيع يقع داخل فترة صلاحية الشهادة (SG407) - يستخدم وضع التوقيع في SigningWorkbench الآن واجهة برمجة تطبيقات عملية التوقيع مع مفاتيح جديدة
--subfilter(sha1 أو detached أو cades لتواقيع أساس PAdES) و--digest(auto حتى sha512)، وأصبحadbe.pkcs7.detachedالحديث مع SHA-256 هو الإعداد الافتراضي الجديد للتوقيع - يعيد ملحق القراءة الجديد
TPDFlibSignDoc.GetSignatureDocMDPLevelByNameمستوى اعتماد DocMDP لحقل توقيع وفق ISO 32000-1 §12.8.2.2
Version 3.70.0
تمت الإضافة
- يفرض عرض ComplianceWorkbench الآن أيضًا سياسات الأذونات والبيانات الوصفية والحجم: يتحقق
--require-print-allowedو--require-copy-allowedمن بتات أذونات المستند (PC205/PC206)، ويتحقق--require-authorو--require-creation-dateمن اكتمال البيانات الوصفية (PC306/PC307)، ويحد--max-pagesو--max-file-sizeمن حجم المستند (PC308/PC309) - يتطلب ملف تعريف archive الآن أيضًا مؤلفًا وتاريخ إنشاء، ويتطلب ملف تعريف accessible إذن النسخ الذي تعتمد عليه تقنيات الإتاحة
- تجمع تقارير ComplianceWorkbench الآن ملخص تكرار رموز الفشل عبر الدفعة، وتشمل المقاييس لكل ملف المؤلف وتاريخ الإنشاء وحجم الملف وحالتي إذن الطباعة والنسخ
Version 3.69.1
تم الإصلاح
DecryptFileيزيل التشفير مرة أخرى من المستندات المحمية بـ AES-128 وRC4، بما في ذلك المستندات التي تحمل فقط كلمة مرور مالك؛ فمنذ v3.67.4 كان المسار السريع للملفات الكبيرة يبلغ خطأً عن هذه المستندات باعتبارها ذات كلمة مرور خاطئة (الخطأ 404) بدلًا من تمريرها إلى مسار فك التشفير العادي، بينما لم تتأثر مستندات AES-256
Version 3.69.0
تمت الإضافة
- عرض Delphi الجديد لـ SigningWorkbench: أداة وحدة تحكم لمراجعة التوقيع والشهادة تفحص حقول التوقيع في ملف PDF واحد أو في دليل كامل (SubFilter، وقت التوقيع، تغطية ByteRange، والشهادة الموقعة مع فحوصات انتهاء الصلاحية)، وتوقّع ملفات PDF دفعات باستخدام شهادة PKCS #12، وتدقق ملفات PFX؛ ويُطابق كل انتهاك رمز فشل سياسة ثابتًا (SG101–SG501)، وتُكتب النتائج كتقارير JSON وCSV وHTML مع أدلة عرض محلية لجميع لغات التوثيق الـ 18
- الملحقات الجديدة للقراءة على
TPDFlibSignDoc: يسردGetSignatureFieldNamesحقول التوقيع في المستند، ويعيدGetSignatureTextValueByNameقيم /M الخاصة بوقت التوقيع و/Name و/Reason و/Location و/ContactInfo و/Type (مع فك التشفير في المستندات المشفّرة)، ويعيدGetSignatureValueByNameالقيم /Filter و/SubFilter و/Contents وإدخالات ByteRange حسب اسم الحقل
تم الإصلاح
- إصلاح استيراد
CertCloseStoreمن Windows CryptoAPI، الذي كان معرّفًا من دون وسيط flags ويمكن أن يفسد مكدس المستدعي على Win32 عند إغلاق مخزن شهادات
Version 3.68.0
تمت الإضافة
- عرض Delphi الجديد لـ ComplianceWorkbench: أداة وحدة تحكم لتدقيق السياسات على دفعات تتحقق من ملف PDF واحد أو دليل كامل مقابل سياسة امتثال قابلة للتهيئة تغطي PDF/A وPDF/UA preflight وقواعد التشفير ونطاق إصدار PDF وTagged PDF وlinearization وعنوان المستند، وتبلغ عن كل مخالفة كرمز فشل سياسة ثابت (PC101–PC501)، وتكتب تقارير JSON وCSV وHTML مع رموز خروج مناسبة للأتمتة
- يأتي العرض الجديد مع ملفات تعريف سياسات تجمع مجموعات المتطلبات الشائعة—archive وaccessible وsecure وweb—مع مفاتيح سطر أوامر صريحة تتجاوز قيم الملف التعريفي، ويشمل أدلة عرض محلية لجميع لغات التوثيق الـ 18
Version 3.67.4
تم التغيير
EncryptFileوDecryptFileتستخدمان الآن مسار إعادة كتابة مباشرًا باستخدام AES-256 لملفات PDF الكبيرة ذات المرجع المتقاطع الكلاسيكي، مع بث البيانات المشفرة بين الملفات بدلًا من تحميل كل كائن وإعادة تسلسله؛ وأصبح ملف الاختبار بحجم 2 GB يُكمل الآن التشفير وفك التشفير من ملف إلى ملف عبر Direct File API مع رمز نتيجة 1 وLastErrorCode0
تم الإصلاح
- إصلاح معالجة رموز السلاسل المباشرة في AES-256 بحيث لا يُخلط بين فواصل القواميس والسلاسل الست عشرية، وتُفك السلاسل الفارغة المشفّرة بشكل صحيح
Version 3.67.3
تغييرات
- تم توسيع عروض Delphi و C++Builder الخاصة بـ DrawShapes و CreateWithImage و CreateTable و EditFormField و EmbeddedFonts بحيث تعرض ملفات PDF الناتجة الآن سير عمل عملياً للرسم ووضع الصور وتخطيط الجداول وتنسيق حقول النماذج ومقارنة تضمين الخطوط، بدلاً من إخراج محدود لعملية واحدة
إصلاحات
- تم إصلاح عرض CreateTable ليعيّن حجم صفحة A4 صريحاً قبل رسم الجدول، متجنباً متغير حجم الصفحة غير المهيأ سابقاً في مثال Delphi
Version 3.67.2
إصلاحات
- تم إصلاح تراجع ناتج عن الكشف الكسول في جهة التحميل الذي أُدخل في v3.67.0: كان يمكن لكشف ميزات المحتوى أن يعمل أثناء الحفظ وأن يستبدل إصدار حفظ مطلوباً صراحة (SetInformation 0) أو إصداراً مقفلاً (LockSaveVersion)، لذلك لم يعد الحفظ الصارم إلى إصدار أدنى يرفض محتوى يتطلب إصداراً أعلى، كما كان يمكن للإصدار المقفل أن يرتفع؛ يعمل الكشف الآن قبل أي إصدار مضبوط صراحة ولا يعمل أبداً للمستندات المنشأة بدلاً من المحملة، مما يعيد سلوك التحكم في الإصدار السابق لـ v3.67.0 مع الحفاظ على مكاسب وقت التحميل الكسول
Version 3.67.1
تغييرات
- يقرأ كشف الميزات الآن كائنات stream بتحليل سطحي يفحص قاموس الكائن فقط ويتجاوز جسم stream، لأن الفحص لا يقرأ محتويات stream أبداً؛ في المستندات التي تحتوي على streams صور كبيرة، يتجنب ذلك قراءة بايتات الجسم أثناء الكشف، مما يخفض زمن قراءة الكائنات في مرور الكشف بنحو 40% (حوالي 13 s بدلاً من 20 s في ملف حجمه 2 GB ويحتوي على 1.6 مليون كائن)، بينما تبقى قائمة الميزات المكتشفة وإصدار PDF الفعلي متطابقين
Version 3.67.0
تم التغيير
- أصبح اكتشاف ميزات المحتوى في جانب المُحمِّل الآن مؤجَّلاً (lazy) – فبدلاً من فحص المستند بأكمله أثناء التحميل، يُنفَّذ عند أول استخدام، أي عند الاستعلام عن إصدار PDF الفعّال أو قائمة الميزات المكتشفة أو عند حفظ المستند؛ أما عمليات القراءة فقط مثل عدّ الصفحات واستخراج النص أو الصور والعرض التي لا تستعلم عن الإصدار ولا تعيد الحفظ فتتخطى الفحص بالكامل، مما يقلّص زمن تحميل المستندات الكبيرة جدًا بنحو 80% (نحو 10 ثوانٍ بدلاً من 56 ثانية لملف بحجم 2 GB يحتوي على 1.6 مليون كائن)، بينما تظل مجموعة الميزات المكتشفة وإصدار PDF الفعّال متطابقَين بعد تشغيل الاكتشاف
Version 3.66.1
تم التغيير
- أصبح تحميل المستندات الكبيرة جدًا المتعددة الصفحات الآن أسرع بكثير: إذ يتخطى اكتشاف ميزات المحتوى في جانب المُحمِّل عمليات فحص القواعد التي لا يمكن أن تغيّر النتيجة – سواء القواعد التي سبق أن تطابقت أو القواعد التي لا تنطبق على كائن معيّن – مما يقلّل زمن تحميل الملفات الضخمة إلى النصف تقريبًا مع إبقاء الميزات المكتشفة وإصدار PDF الفعّال متطابقَين
Version 3.66.0
تغييرات
- يستهلك تحميل المستندات الكبيرة جدًا متعددة الصفحات الآن ذاكرة ذروة أقل بكثير. لم تعد عملية الكشف عن ميزات المحتوى في جانب المُحمِّل تُجسِّد نموذج الكائنات بالكامل دفعةً واحدة – بل تقرأه عبر القارئ العشوائي كائنًا تلو الآخر – مما يخفض working set القصوى بنسبة 90 % تقريبًا على الملفات الضخمة مع الحفاظ على الميزات المُكتشفة وإصدار PDF الفعلي دون تغيير.
Version 3.65.0
إضافات
- أصبح من الممكن الآن فتح المستندات التي يزيد حجمها على 2 GB. وقد تمت إزالة المخزن المؤقت السابق في الذاكرة الذي كان يحد من حجم المستند إلى نحو 2 GB.
تغييرات
- عند تحميل ملف PDF من ملف، تُقرأ بيانات الكائنات الآن عند الطلب من المصدر بدلاً من تخزين المستند بأكمله مؤقتًا في الذاكرة، مما يقلل بشكل كبير من ذروة استخدام الذاكرة مع الملفات الكبيرة.
- يُبقي المستند المُحمَّل من ملف هذا الملف مفتوحًا بوصول قراءة مشتركة حتى يتم إغلاق المستند أو مسحه.
إصلاحات
- تحسين المتانة عند تحميل المستندات التي تحتوي على بايتات في البداية قبل ترويسة %PDF- وعند معالجة بيانات cross-reference غير صحيحة التنسيق.
Version 3.64.0
تم التغيير
- أصبحت عمليات Direct API على ملفات PDF كبيرة جدًا أو ذات عدد كبير من الكائنات – EncryptFile وDecryptFile وDASaveAsFile – أسرع بشكل كبير ولم تعد تتوقف. فمستند بحجم 2 GB يحتوي على نحو 1.6 مليون كائن لم يكن من الممكن إكماله سابقًا أصبح الآن يُشفَّر في غضون دقيقة تقريبًا، ويتناسب وقت المعالجة خطيًا تقريبًا مع حجم المستند بدلاً من الانهيار مع تزايد عدد الكائنات.
- أصبح تشفير المستندات الكبيرة أسرع بكثير – إذ إن عملية كانت تستغرق سابقًا دقائق عديدة تكتمل الآن في ثوانٍ إلى دقيقة تقريبًا – دون أي تغيير في قوة التشفير أو توافق النص المشفَّر أو المخرجات.
Version 3.63.0
تم الإصلاح
- تم إصلاح تعطّل في العملية عند تحميل ملفات PDF الكبيرة التي تتجاوز إزاحات البايت الداخلية فيها حد 32 بت (نحو 2 GB)؛ يستخدم المُحمّل الآن إزاحات 64 بت في كل المواضع، بحيث تُحمّل الملفات القريبة من 2 GB بشكل موثوق وتُبلّغ الملفات بحجم 2 GB أو أكثر عن خطأ تحميل بشكل سليم بدلاً من التعطّل.
Version 3.62.0
تغييرات
- أصبح تشفير وفك تشفير AES-256-CBC يسلك الآن مسار AES-NI المسرّع بالعتاد على نظام Windows 32-بت أيضًا، وليس فقط 64-بت، مع الإبقاء على الرجوع التلقائي إلى تنفيذ C المحمول على المعالجات التي لا تدعم AES-NI. ويبقى النص المشفّر دون تغيير على جميع المنصات.
Version 3.61.0
تغييرات
- يستخدم تشفير وفك تشفير AES-256-CBC الآن واجهة خلفية AES-NI مسرّعة بالعتاد على نظام Windows 64-بت، مع رجوع تلقائي إلى التنفيذ البرمجي المحمول على المعالجات التي تفتقر إلى AES-NI. النص المشفّر متطابق على جميع المنصات؛ تتغيّر فقط سرعة تشفير PDF بمعيار AES-256 المعتمد على كلمة المرور.
Version 3.60.0
إضافات
- أصبح
MergeFileListالآن يدمج أشجار البنية المنطقية (Tagged PDF) لمستندات الإدخال في شجرة بنية واحدة يمكن الوصول إليها، بدلاً من الاحتفاظ بشجرة المستند الأول فقط وترك البقية ككائنات لا يمكن الوصول إليها. تُدمج عناصر البنية ذات المستوى الأعلى، وparent tree (مع إعادة تعيين مفاتيح الصفحة/StructParentsومفاتيح التعليق التوضيحي/StructParent)، و/RoleMapو/ClassMapو/IDTree، ويُعلَّم الكتالوج المدمج على أنه Tagged (/MarkInfo /Marked true).
تغييرات
- عند دمج المستندات التي تحتوي على مفاتيح
/RoleMapأو/ClassMapأو/IDTreeمتعارضة، يُحتفظ بأول ظهور. ويستمر المسار السريع (MergeFileListFast) في إسقاط معلومات البنية.
Version 3.59.0
تغييرات
MergeFileListيدمج الآن المستندات في تمريرة واحدة (O(N) بدلاً من O(N²))، مما يجعل دمج العديد من الملفات أسرع بكثير؛ كما يكتسب دمج الإشارات المرجعية متعدد المستندات المُضاف إلى المسار السريع.- بشكل افتراضي، يتخطى
MergeFileListالآن ملفات الإدخال غير القابلة للقراءة أو المشفرة ويواصل دمج البقية، بدلاً من إيقاف العملية بأكملها عند أول ملف تالف. استخدمMergeFileListStrictالجديد لاستعادة السلوك السابق المتمثل في التوقف عند أول فشل. - يتم الآن الحفاظ على كائنات البنية المنطقية (Tagged PDF) من المدخلات بواسطة
MergeFileList(يواصل المسار السريع تجاهلها).
إضافات
- يدمج
MergeFileListStrictقائمة ملفات لكنه يتوقف عند أول ملف غير قابل للقراءة أو مشفر، مع الحفاظ على دلالات التوقف الصارمة عند الفشل من الإصدارات السابقة.
Version 3.58.0
إضافات
MergeFileListFastيدمج الآن الإشارات المرجعية (المخططات التفصيلية) للمستند من جميع ملفات الإدخال، بحيث يحافظ مسار الدمج السريع على الإشارات المرجعية بالإضافة إلى حقول نماذج AcroForm.- تحتفظ الإشارات المرجعية المدمجة بتسلسلها الهرمي ووجهات الصفحات؛ ويساوي عدد الإشارات المرجعية ذات المستوى الأعلى في المخرجات المدمجة مجموع المدخلات.
Version 3.57.1
تغييرات
- أصبح الحفظ عبر Direct File API (
DASaveAsFileوDASaveToStreamوDASaveCopyToStream) أسرع بكثير في المستندات الكبيرة جدًا: تُنسخ الكائنات غير المتغيّرة مباشرة من بايتات المصدر بدلاً من إعادة تحليلها وإعادة تسلسلها. انخفض زمن إعادة حفظ مستند يضم 60٬000 صفحة / 883 ميغابايت من نحو 33 ثانية إلى نحو 23 ثانية.
Version 3.57.0
تغييرات
- تم تحسين أداء
TPDFlib.MergeFileListFastبشكل أكبر لعمليات دمج المستندات المتعددة: يتم الآن إعادة استخدام الكائنات غير المعدّلة وغير المتدفقة في المستندات الملحقة مباشرةً من بايتات مصدرها الأصلية مع إزاحة مرجعية غير مباشرة على مستوى البايت، متجاوزةً دورة التحليل وإعادة التسلسل ومحسّنةً الإنتاجية في المستندات متعددة الصفحات. يبقى مخرج الدمج دون تغيير، مع أعداد صفحات متطابقة. - تواصل الكائنات التي تحتوي على تدفقات أو تنتمي إلى شجرة البنية استخدامَ مسار فك التشفير الحالي، لذا يُطبَّق مسار البايت الأسرع فقط حيث يثبت أنه آمن.
Version 3.56.44
تغييرات
- تم تحسين
TPDFlib.MergeFileListFastعبر حجز بيانات الدمج الوصفية مسبقاً وكتابة كائنات المستند الأول غير المتغيرة من بياناتها المصدرية الأصلية، مما يقلل ضغط الذاكرة وأعمال فك ترميز/إخراج الكائنات غير الضرورية في عمليات الدمج السريعة متعددة الملفات. - تقوم واجهة Delphi
MergePDFالآن بتجميع تسجيل نتائج الوضع السريع وتجنب الفحص المتكرر لكل نص memo، مما يحافظ على استجابة أفضل لقوائم الإدخال الكبيرة بعد اكتمال الدمج.
Version 3.56.43
تغييرات
- تم تحسين مسار الدمج العادي في
TPDFlib.MergeFileListعبر التناوب بين الملفات المؤقتة الوسيطة بدلا من نسخ ملف PDF المدمج المتزايد قبل كل إدخال إضافي، مما يقلل عمليات إدخال/إخراج القرص في تدفقات العمل متعددة الملفات مع الحفاظ على عقد عدد الإرجاع الحالي.
Version 3.56.42
إضافات
- أضيفت تغطية اختبار تراجعي AES للحالات التي يكون فيها مخزن الإدخال ووجهة النتيجة نفس الكائن أثناء استرجاع streams المشفرة عند الحفظ، بما في ذلك payloads كبيرة بحجم 504 KB كانت تكشف الفشل سابقا.
تغييرات
- أصبح مسار API العادي
LoadFromFileوEncryptوSaveToFileثم إعادة التحميل وDecryptوSaveToFileيكتمل مرة أخرى مع ملفات PDF الكبيرة المحملة، مع الاحتفاظ بتحسين فك تشفير AES-CBC ذي النسخ الأقل.
إصلاحات
- تم إصلاح مسار فك تشفير AES-256 المعتمد على المخزن المؤقت والمضاف في v3.56.41، بحيث يمكن للجهة المستدعية إسناد نتيجة فك التشفير إلى نفس
AnsiStringالذي وفّر مخزن النص المشفر من دون حدوث انتهاكات وصول.
Version 3.56.41
إضافات
- تمت إضافة
TPDFlib.DACopyFileلتدفقات عمل Direct Access التي تحتاج إلى عدد الصفحات ونسخة ملف غير معدلة من دون بناء مخطط الكائنات العادي الكامل. - تتضمن demo Delphi
HugeFileBenchmarkالآن صفdirect-copyإضافة إلى مرشحات--opsو--skipلتشغيلات مركزة على الملفات الكبيرة.
تغييرات
- تم تحسين فك تشفير AES-256 بإضافة مسارات فك تشفير AES-CBC المعتمدة على المخزن المؤقت واستخدامها عند فك تشفير السلاسل و stream المحملة، مما يقلل نسخ النص المشفر الإضافية في stream المشفرة الكبيرة.
Version 3.56.40
تغييرات
- تنشئ عروض
HelloWorldفي Delphi و C++Builder الآن ملف PDF تمهيديا أكثر اكتمالا يتضمن معلومات المستند، وإخراج خط قياسي محدد، وكتلة عنوان منسقة، ورسما متجهيا بسيطا، وإرشادات للخطوات التالية، مع الحفاظ على سير عمل البناء والتشغيل نفسه. - تم استبدال جميع ملاحظات عروض Delphi و C++Builder بصفحات
Readme.htmlمناسبة للقراءة في المتصفح، بما في ذلك ملاحظات كلمات المرور والملفات المقيدة ونتائج التوقيع، وأصبحت فهارس العروض توجه المستخدمين إلى ملاحظات HTML.
Version 3.56.39
تغييرات
- تقوم مسارات الحفظ في واجهة API للملفات المباشرة الآن ببناء جداول بحث المراجع المتقاطعة بشكل خطي، مما يجعل
DASaveAsFileومسارات الحفظ المباشر المرتبطة بها أسرع بكثير في ملفات PDF ذات العدد الكبير جدا من الكائنات أو أشجار الصفحات الكثيفة. - يحافظ الكاتب المحسن على نفس دلالات سلسلة الكائنات الحرة، مع تجنب الفحص المتكرر لأرقام الكائنات أثناء إنشاء xref الكامل، مما يحسن مهام الحفظ المباشر الكبيرة دون تغيير API العامة أو عقد الإخراج.
Version 3.56.38
تغييرات
- يحافظ سير العمل في واجهة API العادية
LoadFromFileوEncryptوSaveToFileثم إعادة التحميل وDecryptوSaveToFileالآن على حالة التشفير قبلDecryptالصريح، بما يطابق سلوك واجهة الملفات المباشرة مع ملفات PDF القديمة الكبيرة.
إصلاحات
- تم إصلاح إخراج التشفير في واجهة API العادية بحيث يقوم
Encryptبإنشاء أو الحفاظ على معرف المقطع الختامي/IDقبل كتابة بيانات أمان AES-256، مما يبقي ملفات PDF المشفرة قابلة للاكتشاف عند إعادة التحميل عبرEncryptionStatus.
Version 3.56.37
إضافات
- تمت إضافة
TPDFlib.ComparePreflightReports، وهو مقارن سطر بسطر لتقارير preflight النصية العادية، يتجاهل أسطر الطابع الزمني المتغيرةGenerated:ويعيد سلسلة فارغة عندما يتطابق محتوى التقرير المستقر. - يدعم مثال Delphi
PreflightReportالآن--compare <file>في وضع الملف الواحد، ويكتب تقرير UTF-8 بامتداد.diff.txtويعيد رمز الخروج 2 عندما يختلف التقرير النصي الناتج عن baseline.
Version 3.56.36
إضافات
- يدعم مثال Delphi
PreflightReportالآن تشغيل المجلدات دفعة واحدة عبر--input-dirو--output-dirو--recursive، مع كتابة تقرير لكل ملف PDF باسم<basename>.preflight.<ext>.
تغييرات
- يكتب وضع الدفعات ملف UTF-8 باسم
preflight-summary.csvيسجل كل PDF مصدر، وحالة pass/fail، وعدد المشاكل، ومسار التقرير الناتج، مع الحفاظ على عقد رموز الخروج الحالي للأتمتة.
Version 3.56.35
إضافات
- يضيف
ReportFormat = 3إخراج CSV إلىTPDFlib.CreatePreflightReportExوTPDFlib.SavePreflightReportEx، مولدا صفوف UTF-8 لبيانات التقرير الوصفية، ولكل فحص توافق محدد، ورموز المشاكل ورسائلها، والملخص النهائي. - يدعم مثال Delphi
PreflightReportالآن--format csvو--csv، بحيث يمكن لتشغيل preflight من سطر الأوامر تغذية جداول البيانات أو محللات CI البسيطة دون معالجة JSON لاحقا أو استخراج النص.
Version 3.56.34
إضافات
- تمت إضافة واجهتي API المدركتين للتنسيق
TPDFlib.CreatePreflightReportExوTPDFlib.SavePreflightReportExلإنشاء تقارير preflight لـ PDF/A و PDF/UA-1 كنص عادي أو JSON أو HTML مستقل، مع الحفاظ على واجهات التقارير النصية الحالية. - يدعم مثال Delphi
PreflightReportالآن--format text|json|htmlإضافة إلى الاختصارين--jsonو--html، بحيث يمكن لسير عمل سطر الأوامر نفسه إنتاج تقارير قابلة للقراءة أو مخرجات CI قابلة للمعالجة آلياً.
Version 3.56.33
إضافات
- تمت إضافة
TPDFlib.CreatePreflightReportوTPDFlib.SavePreflightReportحتى تتمكن التطبيقات من إنشاء تقارير نصية قابلة لإعادة الاستخدام من فحوصات توافق PDF/A و PDF/UA-1 المدمجة من دون تعداد مقابض قوائم السلاسل يدوياً.
تغييرات
- أصبح مثال Delphi
PreflightReportيستدعي واجهات تقارير المكتبة مباشرة، لذلك يبقى المثال مركزاً على سير عمل سطر الأوامر، والفحوصات المختارة، ووضع أول مشكلة، ورموز الخروج المناسبة للأتمتة.
Version 3.56.32
إضافات
- تمت إضافة مثال وحدة تحكم Delphi جديد باسم
PreflightReportيشغّل فحوص PDF/A وPDF/UA-1 باستخدامCheckFileCompliance، ويسرد قوائم المشكلات عبرGetStringListCountوGetStringListItem، ثم يكتب تقرير preflight بنص عادي.
تغييرات
- يدعم المثال خيارات
--inputو--outputو--pdfaو--pdfuaو--bothو--first-issue، إضافة إلى رموز خروج مناسبة للأتمتة لحالات النجاح، والعثور على مشكلات، وخطأ وقت التشغيل.
Version 3.56.31
تغييرات
GetCustomKeys(2)الآن يخفي إدخالات نظام "Catalog" التي تتم إدارتها بواسطة المكتبة بشكل متسق، بما في ذلك /OutputIntents، و/Extensions، و/Requirements، و/Collection، و/NeedsRendering.
إصلاحات
- تمت إزالة ظهور نوايا الإخراج PDF/A التي تم إنشاؤها بواسطة
SetPDFAModeكمفاتيح مخصصة في القاموس الرئيسي، مما يحافظ على فصل تعداد بيانات التعريف الخاصة بالتطبيق عن هياكل الامتثال لملف PDF.
Version 3.56.25
تغييرات
- تتيح 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.
Version 3.56.24
تغييرات
- يضيف فحص PDF/UA-1 الجديد فحصًا لـ ISO 14289-1 §7.4.4 لضمان التفرد لعلامات H. يبلغ
10044عن أي عقدة هيكلية تحتوي على أكثر من عنصر فرعي مباشر من النوع H —، حيث يحظر هذا الإجراء وفقًا للمواصفات في المستندات ذات الهيكل القوي، وينطبق نفس القيد على أي عقدة في شجرة العلامات بغض النظر عن وضع الهيكل العام. يتطلب الشرط الآخر §7.4.4 SHALL (يجب أن يكون المستند إما منظمًا بقوة أو بشكل ضعيف، وليس كلاهما) إرشادات على مستوى المستند وقد تم استبعادها عن قصد من هذا الفحص. - يقوم برنامج المشي الجديد في هيكل الشجرة بترتيب ما قبل الترتيب (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) بحساب العناصر الفرعية المباشرة من النوع H لكل عقدة ويعيد التكرار بترتيب العمق. يعيد استخدام نفس وحدة فك التشفير على شكل K المستخدمة في برامج المشي الحالية للرؤوس والقوائم والملاحظات.
Version 3.56.23
إضافات
- ينفذ الإصدار الجديد
Lib/PDFlibPDFUAFontInspect.pasأداة استعراض مرنة لجدول الدليل ومحلل لجدول فرعي لجدول cmap. تمت إضافة جدول قائمة أحرف Adobe المكون من 4281 اسمًا كإطار عمل في عملية الالتزام في البنية التحتية السابقة وهو الآن متصل عبر فحص الاختلافات. يتم تخطي البرامج التي لا يمكن تحليلها كـ SFNT (برامج PFB / PFA، OpenType مجموعة، قمامة عشوائية) بصمت —. يتم تفضيل القيم السلبية الكاذبة على القيم الإيجابية الكاذبة في طبقة التدقيق.
تغييرات
- تضيف عملية التدقيق 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.
Version 3.56.22
تغييرات
- تضيف عملية التدقيق 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.
Version 3.56.21
إضافات
- ينتج الإصدار الجديد
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؛ يجب على المتصل التأكد من عدم تعيين كليهما.
Version 3.56.20
إضافات
- يضيف
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التعرف على الهيكل دون إعادة حل المسار الأصلية.
Version 3.56.19
إضافات
- تمت إضافة سير عمل جديد 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الأصلي. - يوسع
SetSignProcessReserveContentsBytesالجديد موضع/Contentsفي وقت التوقيع الأولي بحيث يتناسب CMS المعزز بعد ذلك دون تجاوز الحجز الأصلي. تضيف سمات TimeStampTokens الصادرة من TSA عادةً 2-6 بايت إلى SignerInfo؛ قم بتمرير 1024-8192 لترك مساحة. إذا لم يكن هناك ما يكفي من الاحتياطي، فإن استدعاء التوسيع يُرجع13(تجاوز الإخراج).
تغييرات
BuildPAdESSignatureTimeStampAttributeهو مساعد غير متزامن يغلف TSA-issued TimeStampToken في سمة CMS التي تتوقعهاSignerInfo.unsignedAttrs، بحيث يمكن للمتصلين الذين لديهم بالفعل مكتبة CMS مفيدة تخطي OID + SET من العمل الإضافي.- لا توفر المكتبة عميل 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 الذي يوفره المتصل بدلاً من ذلك.
Version 3.56.18
إضافات
- تكمل المساعدات الجديدة ASN.1
DER_IntegerFromLittleEndian(التي تتعامل مع ترتيب بايت Win32CRYPT_INTEGER_BLOB) وDER_ContextTagExplicit(التي تغلف حمولة في علامة سياقية مُنشأة خاصة) جهاز الترميزPDFlibASN1الصغير. توفر الإعلانات الجديدةCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTفيPDFlibCryptoAPIوصول مسار التوقيع إلى الحقول التي تم تحليلها من الشهادة.
تغييرات
- تُدمج سمة 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]].
Version 3.56.17
إضافات
- تُوفر وحدة
PDFlibASN1الجديدة مُشفِّرًا مُصغّرًا مُركَّزًا بصيغة DER (X.690) — بادئة الطول، OCTET STRING، SEQUENCE، SET، OBJECT IDENTIFIER — يُستخدم لبناء قيمة سمةSigningCertificateV2. يتبع المُشفِّر القواعد القياسية لأقواس OID بترميز base-128 ويُهمل الحقل الاختياريhashAlgorithmعندما يكون مجرد تكرار للقيمة الافتراضية SHA-256، بما يطابق ما تُصدره OpenSSL و BouncyCastle.
تغييرات
- أصبح مسار التوقيع المدمج
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الناتج السمات المطلوبة فقط ولا شيء سواها. - يُوجّه
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).
Version 3.56.16
إضافات
- يختار
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.
Version 3.56.15
إضافات
- تُحوّل الواجهة الجديدة
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 عن امتداد الكتالوج المطلوب دون الحاجة إلى ربط إضافي.
Version 3.56.14
إضافات
- واجهة 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.
Version 3.56.8
تغييرات
- توافق 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.
Version 3.56.13
تغييرات
- عندما يكون 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أصبحت الآن تُلاحظ أن الإصلاح التلقائي سيُخفي المشكلة في وقت الحفظ، بحيث يفهم المستخدمون كلًا من السمة المفقودة وسلوك الإصلاح التلقائي.
Version 3.56.12
تغييرات
- تحصل عملية تدقيق 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 المنفصلة بنفس طريقة القواميس المضمّنة.
Version 3.56.11
تغييرات
- يتطلب 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 يحتاج إلى واحدة من هذه القيم.
Version 3.56.10
تغييرات
- تحصل عملية تدقيق 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) تبقى خارج النطاق للسبب نفسه — فهي تتطلب فحص برنامج الخط.
Version 3.56.9
تغييرات
- تحصل عملية تدقيق 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الأكثر تحديدًا. هذا يتجنب العد المزدوج لنفس الانتهاك تحت كلا الرمزين.
Version 3.56.7
تغييرات
- عندما يكون 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 يُزيل هذه تلقائيًا في وقت الحفظ.
Version 3.56.6
تغييرات
- تحصل عملية تدقيق 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".
Version 3.56.5
تغييرات
- عندما يكون 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المصحّح.
Version 3.56.4
تغييرات
- 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).
Version 3.56.3
تغييرات
- تحصل عملية تدقيق 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، والعكس بالعكس.
Version 3.56.2
تغييرات
- تحصل عملية تدقيق 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) على عدد الكائنات.
Version 3.56.1
تغييرات
- تحصل عملية تدقيق 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 عام جديد.
Version 3.56.0
إضافات
- تدقيق جديد جانب القارئ
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 الخط) متابَعَة لإصدارات تصحيح متابعة فوق نفس إطار التدقيق.
Version 3.55.6
تغييرات
- كل حزمة 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.
Version 3.55.5
تغييرات
- مستندات 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 صريحًا لترك أي غموض للمُحقّق.
Version 3.55.4
تغييرات
- 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) يُعلّمان أي إخراج غير متوافق في وقت التحقق.
Version 3.55.3
تغييرات
- قواميس خط 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) سيُعلّمان الغياب بحيث يرى المستخدمون المشكلة في وقت التحقق.
Version 3.55.2
تغييرات
- 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) يُوفّر خط دفاع ثانٍ في وقت التحقق لأي مسار غير مباشر لا يزال يُمرّر فلترًا محظورًا إلى الإخراج.
Version 3.55.1
تغييرات
- 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.
Version 3.55.0
تغييرات
- مستندات 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).
Version 3.54.0
تغييرات
- 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.
Version 3.53.0
تغييرات
- قاموس 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.
Version 3.52.0
تغييرات
- 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.
Version 3.51.0
تغييرات
- 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. اكتشاف المجموعة الفرعية يستخدم اصطلاح بادئة الستة أحرف الكبيرة القياسية.
Version 3.50.0
تغييرات
- 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.
- الفحوصات الخاصة بالفلاتر (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.
إصلاحات
- مُحلّل 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 معترف بها الآن من قبل المُحقّق.
Version 3.49.0
تغييرات
- تُنشئ 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).
Version 3.48.0
تغييرات
- تُنشئ 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).
Version 3.47.0
تغييرات
- تُنشئ 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.
Version 3.46.1
تغييرات
- تُنشئ 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 الموجود سابقًا.
Version 3.46.0
تغييرات
- تُنشئ 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 تلقائيًا من النطاق المُجمَّع لجميع الضربات بالإضافة إلى هامش صغير لضمان بقاء الضربات داخل مربع إحاطة التعليق.
Version 3.45.0
تغييرات
- تُنشئ 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 عند الإصدار تحت قفل حد أدنى لإصدار أقل.
Version 3.44.1
تغييرات
- تُنشئ 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 للتعليق من نقطتي النهاية بالإضافة إلى هامش متناسب مع عرض الحد، بحيث تبقى زخارف النهايات داخل مربع إحاطة التعليق.
Version 3.44.0
تغييرات
- تُنشئ 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 تحرير هذه التعليقات بعد الإنشاء.
Version 3.43.0
تغييرات
- تُعيّن 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. يُطبَّق الإصلاح على فرعي السمة بصاحب واحد وبأصحاب متعددين.
Version 3.42.0
تغييرات
- تمت إضافة ثلاثة فحوصات توافق جديدة: الرمز 00006 يُعلّم المستندات المُشفّرة (التشفير محظور في جميع إصدارات PDF/A)؛ الرمز 00007 يُعلّم المستندات التي تفتقر إلى إدخال OutputIntents في الكتالوج (مطلوب لجميع إصدارات PDF/A)؛ الرمزان 00011 و 00012 يُعلّمان المستندات التي تفتقر إلى MarkInfo أو StructTreeRoot عندما يكون مستوى التوافق -a (إمكانية الوصول).
إصلاحات
- تتحقق 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 بالطبقات ولم يعد يتم وضع علامة عليها.
Version 3.41.0
تغييرات
- يفرض وضع 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)، الذي يسمح صراحةً بملفات مضمّنة عشوائية.
Version 3.40.0
إضافات
- تدعم 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 الموسومة المطلوبة لمستوى توافق إمكانية الوصول.
تغييرات
- تُعيد GetInformation(201) القيم من '1' إلى '6' مطابِقة لوضع PDF/A النشط، بما يتسق مع ترقيم الأوضاع الجديد.
إصلاحات
- إصلاح: كانت SetPDFAMode(1) (PDF/A-1a) سابقًا no-op بسبب خطأ توجيه داخلي تم إدخاله في v3.20.0. أصبحت الآن تكتب بشكل صحيح /MarkInfo و /OutputIntents وتُعيّن XMP pdfaid:part=1/conformance=A.
Version 3.39.0
تغييرات
- تُعيّن 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.
Version 3.38.0
تغييرات
- تُعيّن 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 من أجل خلايا جدول موصوفة بالكامل في الجداول المعقّدة أو ذات الرؤوس الممتدة.
Version 3.37.2
تغييرات
- تُبلّغ GetPDFUADiagnostics الآن عن FORM-NO-TOOLTIP:N عندما تكون N من حقول النماذج التفاعلية (تعليقات Widget) تفتقر إلى إدخال TU (تلميح / اسم يمكن الوصول إليه). يتطلب ISO 14289-1 §7.18.4 أن تحمل جميع حقول النماذج التفاعلية إدخال TU بحيث يمكن للتقنيات المساعدة إعلان غرض الحقل للمستخدم عندما يحصل الحقل على التركيز. /TU هو الاسم القابل للوصول الذي يقرأه قارئو الشاشة بصوت عالٍ؛ يختلف عن /T الذي هو الاسم الجزئي للحقل المُستخدم للوصول البرمجي وإرسال النموذج.
Version 3.37.1
تغييرات
- تُبلّغ GetPDFUADiagnostics الآن عن LIST-STRUCT:N عندما تظهر N من عناصر بنية LI أو LBody خارج العنصر الأبوي المطلوب. يتطلب ISO 32000-1 §14.8.4.4 أن يكون LI طفلًا مباشرًا لـ L (list) وأن يكون LBody طفلًا مباشرًا لـ LI (list item). تمنع التداخلات المشوّهة للقوائم التقنيات المساعدة من اجتياز محتوى القائمة وإعلانه بشكل صحيح، ويمكن أن تُسبب فشل التحقق من بنية المستند في مدققات PDF/UA-1.
Version 3.37.0
تغييرات
- 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.
Version 3.36.1
تغييرات
- تُبلّغ 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.
Version 3.36.0
تغييرات
- 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.
Version 3.35.1
تغييرات
- تُبلّغ GetPDFUADiagnostics الآن عن DOCINFO-TITLE-MISSING عندما يكون إدخال /Title في قاموس معلومات المستند غائبًا أو فارغًا. يتطلب PDF/UA-1 (ISO 14289-1) عنوانًا للمستند بحيث يمكن لقارئات الشاشة الإعلان عنه عند فتح المستند. يؤكد فحص DISPLAYDOCTITLE-FALSE الحالي أن العنوان يُعرض في شريط عنوان العارض؛ DOCINFO-TITLE-MISSING مُكمّل — يؤكد أن قيمة العنوان نفسها قد تم تعيينها. استدعِ SetDocumentInfo('Title', ...) لتوفير القيمة.
Version 3.35.0
تغييرات
- 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.
Version 3.34.0
تغييرات
- 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.
Version 3.33.1
إضافات
- تشمل 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) وتُستثنى من التقرير.
Version 3.33.0
تغييرات
- SetStructElemLang هي API جديدة تُعيّن إدخال /Lang على عنصر البنية المفتوح حاليًا (ISO 32000-1 §14.9.2). يتجاوز وسم اللغة لغة المستند على مستوى المستند المُعلنة بواسطة SetDocumentLanguage أو SetPDFUAMode للعنصر وكل أحفاده، مما يُمكّن المستندات متعددة اللغات من وسم كل مقطع بعلامة اللغة BCP 47 الصحيحة الخاصة به (مثل 'en-US' أو 'fr' أو 'zh-Hant-TW'). تستخدم قارئات الشاشة /Lang على مستوى العنصر لاختيار محرك تحويل النص إلى كلام أو الصوت المناسب عند قراءة المستند بصوت عالٍ. الدالة مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
Version 3.32.0
تغييرات
- 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.
Version 3.31.1
تغييرات
- تتحقق 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.
Version 3.31.0
إصلاحات
- أصبحت معرفات عناصر البنية وربط رؤوس الجداول مدعومة الآن. تُعيّن 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.
Version 3.30.1
إضافات
- تشمل 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 تداخل العناوين دون فجوات.
Version 3.30.0
تغييرات
- أصبحت سمات عناصر البنية مدعومة الآن للمستندات الموسومة ومستندات 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.
Version 3.29.1
إضافات
- تشمل GetPDFUADiagnostics الآن فحصين إضافيين: ما إذا كانت أي من عناصر بنية Figure في المستند تفتقر إلى قيمة نص Alt (يُبلّغ عنه كـ FIGURE-NO-ALT:N، وفقًا لـ ISO 14289-1 §7.5 و ISO 32000-1 §14.9.3)، وما إذا كانت أي من عناصر البنية لا تزال مفتوحة لأن EndTag لم يُستدع (يُبلّغ عنه كـ STRUCT-UNCLOSED:N). يُجري فحص Figure مسحًا تكراريًا كاملًا لشجرة عناصر البنية، شاملًا العناصر في جميع أعماق التداخل.
Version 3.29.0
تغييرات
- 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.
Version 3.28.5
تغييرات
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق FileAttachment على إدخال Contents ولا حقل /T، يُستخدم الآن اسم الملف من مواصفات الملف المضمّن للتعليق (/FS /UF أو /F) بوصفه الوصف البديل القابل للوصول. يُكمل هذا سلسلة احتياط Contents للتعليقات: /T → Link URI → اسم Stamp → اسم ملف FileAttachment. تتلقى قارئات الشاشة اسم الملف المرفق بدلاً من الصمت، مما يلبي ISO 14289-1 §7.18.1 لأنواع التعليقات الأكثر شيوعًا.
Version 3.28.4
تغييرات
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق Stamp على إدخال Contents (أو يحتوي على إدخال فارغ) ولا حقل /T، يُستخدم الآن اسم نوع الختم من إدخال /Name للتعليق بوصفه الوصف البديل القابل للوصول (مثل "Approved" أو "Draft" أو "Confidential" أو "Final"). يوسّع هذا سلسلة احتياط Contents للتعليقات التي قُدّمت في v3.28.3 لتغطية تعليقات الأختام، الشائعة في تدفقات العمل التي تتضمن مستندات قيد المراجعة أو الموافقة عليها والتي تفتقر بشكل متكرر إلى قيمة Contents صريحة.
Version 3.28.3
تغييرات
- تحسين إمكانية الوصول لتعليق PDF/UA-1: عندما لا يحتوي تعليق Link على إدخال Contents (أو يحتوي على إدخال فارغ) ولا حقل /T، يُستخدم الآن URI من إجراء URI للتعليق بوصفه الوصف البديل القابل للوصول. ينطبق هذا فقط أثناء معالجة SetPDFUAMode وفقط على تعليقات Link التي تحمل إجراء /URI. تتلقى قارئات الشاشة عنوان URL كتسمية أخيرة، مما يلبي ISO 14289-1 §7.18.1 في الحالة الشائعة حيث يُنشئ المؤلفون ارتباطات تشعبية دون توفير وصف قابل للقراءة البشرية.
Version 3.28.2
تغييرات
- SetEmbeddedFileAFRelationship هي API جديدة لتعيين قيمة AFRelationship صراحةً على قاموس مواصفات الملف الخاص بملف مضمّن. مطلوب وفقًا لـ ISO 14289-1 (PDF/UA-1) §7.11، يسمح هذا للمستدعين بتحديد العلاقة الدلالية للملف المضمّن بمحتوى المستند عن طريق الاختيار من القيم الخمس الصالحة: Source أو Data أو Alternative أو Supplement أو Unspecified. عندما يكون SetPDFUAMode نشطًا، يُخصص أي ملف مضمّن بدون مفتاح AFRelationship تلقائيًا قيمة Unspecified؛ استخدم هذه الدالة لتجاوز هذا الافتراضي قبل الحفظ. مُتاحة في مكتبة Delphi و ActiveX وواجهات DLL.
Version 3.28.1
تغييرات
- عند استدعاء SetPDFUAMode على مستند تحمل بيانات XMP الوصفية الخاصة به العنوان العام الافتراضي للمكتبة بدلاً من عنوان خاص بالمستند، يُستبدل العنوان الآن تلقائيًا بالقيمة من إدخال /Info Title للمستند (إن وُجدت). يضمن هذا أن تعكس حزمة XMP الخاصة بـ pdfuaid:part-1 العنوان الفعلي للمستند بدلاً من عنصر نائب، مما يلبي توقعات مدقق PDF/UA-1.
- يقرأ محلل XMP (LoadFromString) الآن قيمة dc:title من بيانات XMP الوصفية الموجودة عند تحميل المستند، بحيث تحافظ دورة round-trip لمستند PDF يحتوي بالفعل على dc:title بشكل صحيح على هذا العنوان بدلاً من العودة إلى عنصر نائب افتراضي.
Version 3.28.0
تغييرات
- 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 أيضًا.
Version 3.27.2
إصلاحات
- تميّز BeginArtifact الآن بشكل صحيح بين أنواع القطع الأثرية وأنواع التصنيف الفرعي للترقيم. عندما يكون المُعامل Pagination أو Layout أو Page (أنواع قطع أثرية وفقًا لـ ISO 32000-1 §14.8.2.2.1 Table 330)، يكتب مُشغّل المحتوى المعلّم /Type بدلاً من /Subtype. تستمر القيم الأخرى مثل Header و Footer و Watermark في الكتابة بوصفها /Subtype. يُصحّح هذا الإخراج السابق غير الصحيح الذي كان يكتب /Subtype /Pagination عندما كان المستدعي يقصد وضع علامة على قطعة أثرية للترقيم.
Version 3.27.1
تغييرات
- عندما يكون وضع PDF/UA نشطًا ويحتوي المستند على ملفات مضمّنة، يتلقى كل قاموس مواصفات ملف يفتقر إلى إدخال AFRelationship واحدًا تلقائيًا في وقت الحفظ. القيمة المكتوبة هي /Unspecified، مما يلبي متطلب ISO 14289-1 §7.11 بأن يحمل كل ملف مضمّن مفتاح AFRelationship. ينطبق هذا على كل من الملفات المُضافة عبر EmbedFile والملفات المضمّنة الموجودة بالفعل في مستند تم تحميله.
Version 3.27.0
تغييرات
- AddRoleMap(CustomType, StandardType) هي API جديدة لـ PDF الموسوم تُسجّل ربط اسم نوع عنصر بنية مخصص (غير قياسي) بنوع بنية PDF قياسي. عند الحفظ، تُكتب التعيينات إلى قاموس RoleMap في جذر شجرة البنية، مما يلبي متطلب ISO 14289-1 §7.1 للمستندات التي تستخدم أسماء وسم خاصة بالتطبيق. يمكن تسجيل تعيينات متعددة؛ تتم الكتابة فوق المفاتيح المكررة بالاستدعاء الأخير. تُصدَّر نقاط دخول DLL باسم DLAddRoleMap و DLAddRoleMapA أيضًا.
Version 3.26.0
تغييرات
- BeginTagEx(TagType, AltText, ActualText, Lang) هي API جديدة لـ PDF الموسوم تُوسّع BeginTag بسمة لغة طبيعية صريحة. عندما يكون Lang غير فارغ، يُكتب إلى سمة /Lang لعنصر البنية، مما يُمكّن التعليق التوضيحي للغة لكل عنصر المطلوب وفقًا لـ ISO 14289-1 §7.2 للمستندات متعددة اللغات. مرّر سلسلة Lang فارغة للتصرف بشكل مماثل لـ BeginTag. تُصدَّر نقاط دخول DLL باسم DLBeginTagEx و DLBeginTagExA أيضًا.
Version 3.25.1
تغييرات
- خطوط TrueType غير المُقسّمة إلى مجموعات فرعية والمُحمّلة بصفحة رموز Windows الافتراضية (WinAnsiEncoding) تتلقى الآن تيار CMap من ToUnicode، مما يُمكّن استخراج نص Unicode موثوق ونسخ/لصق لهذه الخطوط. سابقًا كان تيار ToUnicode يُكتب فقط عندما يكون هناك تجاوز صريح لصفحة الرموز أو مصفوفة Differences؛ كان مسار الترميز الافتراضي الشائع يفتقر إليه.
- ينطبق الإصلاح نفسه على خطوط TrueType المُحمّلة بصفحة رموز غير افتراضية صريحة ولكن بدون مصفوفة Differences، وعلى الخطوط المُحمّلة عبر تنسيق الخط المُحزّم.
Version 3.25.0
تغييرات
- عندما يكون وضع PDF/UA نشطًا، تتلقى التعليقات غير المُعفاة (جميع الأنواع باستثناء Widget و PrinterMark و TrapNet) التي تفتقر إلى إدخال Contents غير فارغ واحدًا تلقائيًا في وقت الحفظ. تُستخدم قيمة /T (العنوان / المؤلف) للتعليق بوصفها قيمة الاحتياط، مما يلبي ISO 14289-1 §7.18.1 للتعليقات التي تحمل عنوانًا ولكن بدون وصف صريح قابل للوصول.
Version 3.24.0
تغييرات
- عندما يكون وضع PDF/UA نشطًا، تتلقى حقول النماذج التفاعلية التي تفتقر إلى إدخال TU (تلميح / وصف بديل) واحدًا تلقائيًا في وقت الحفظ. يُستخدم الاسم الجزئي للحقل (إدخال /T) بوصفه قيمة الاحتياط، مما يضمن قدرة قارئات الشاشة على تحديد كل حقل. تُستثنى الأزرار الضاغطة بشكل صحيح من هذا المتطلب وفقًا لـ ISO 14289-1 §7.18.4.
Version 3.23.1
تغييرات
- تُعيد GetInformation(200) القيمة '1' عندما يكون وضع PDF/UA-1 نشطًا على المستند المحدد، مما يُمكّن المستدعين من الاستعلام عن حالة وضع التوافق في وقت التشغيل.
- تُعيد GetInformation(201) القيمة '1' لـ PDF/A-1a، أو '2' لـ PDF/A-1b، أو سلسلة فارغة عندما يكون وضع PDF/A متوقفًا.
- تُعيد GetInformation(313) سلسلة إصدار PDF التي يكون فيها هدف الحفظ مقفولًا حاليًا، أو سلسلة فارغة للمستندات ذات الإصدار الحر.
إصلاحات
- تُعيد GetInformation(311) و GetInformation(312) الآن بشكل صحيح سلسلة متطلبات الإصدار واسم الميزة من تعارض قفل الإصدار الأخير (مُعلن سابقًا في إدخال v3.20.3 ولكن لم يتم تنفيذه بعد).
Version 3.23.0
تغييرات
- أصبحت 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، مع جداول صيغة كاملة وأمثلة استخدام.
Version 3.22.0
تغييرات
- تفتح 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 موثوق ونسخ/لصق لهذه الأنواع من الخطوط.
Version 3.21.0
تغييرات
- تُفعّل 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 لخاصية حقل النموذج.
Version 3.20.3
تغييرات
- تُعيد Encrypt و AddSWFAnnotationFromFile الآن صفرًا فورًا مع LastErrorCode 602 عندما يكون إصدار الحفظ مقفولًا أدنى من الحد الأدنى المطلوب لقوة التشفير المحددة أو نوع التعليق، بدلاً من المضي بصمت والفشل فقط في وقت الحفظ.
- تعكس GetInformation(311) و GetInformation(312) الآن متطلبات الإصدار المتعارضة في وقت الكتابة عندما يحجب إصدار مقفول ميزات على مستوى الامتدادات مثل AES-256 أو تعليقات RichMedia.
Version 3.20.2
تغييرات
- ترفع AddU3DAnnotationFromFile الآن إصدار المستند تلقائيًا إلى PDF 1.6 عند إضافة تعليق ثلاثي الأبعاد إلى مستند بإصدار أقل، بما يتسق مع سلوك الرفع التلقائي للإصدار لجميع نقاط دخول API الأخرى لـ PDF 1.6+.
Version 3.20.1
تغييرات
- أصبحت أهداف الحفظ لـ 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 اختبارًا مع تخطي اختبارين موجودين معتمدين على عينات.
Version 3.20.0
تغييرات
- ثماني نقاط دخول إضافية لـ 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.
Version 3.19.0
تغييرات
- يتعرّف توافق إصدار 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 جديدة).
Version 3.18.6
تغييرات
- يتعرّف توافق إصدار 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 جديدة).
Version 3.18.5
إضافات
- قاعدة جديدة: تُعتبر AcroForm /NeedAppearances ميزة PDF 1.5 وفقًا لجدول PDF 1.5 218.
تغييرات
- يحمل جدول PDFFeatureRules الآن 96 قاعدة (95 + 1 جديدة).
إصلاحات
- يصنّف توافق إصدار 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)".
Version 3.18.4
إضافات
- تشمل تغطية الانحدار لـ zlib-ng الآن حمولات بأحجام حدودية، وبيانات scanline تشبه PNG، وتيارات متعددة الكتل المُخزَّنة، وتيارات zlib المعروفة عبر مُنفذي اختبار Delphi و C++Builder.
تغييرات
- تستخدم PDFlibZLib الآن دائمًا الواجهة الخلفية الكائنية الثابتة المدمجة لـ zlib-ng في إصدارات المكتبة العادية، مما يُزيل مسار الاحتياط المتبقي لـ System.ZLib.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 194/194، واجتاز C++Builder Win64x GoogleTest 58 اختبارًا مع تخطي اختبارين موجودين معتمدين على عينات.
Version 3.18.3
تغييرات
- تعرّض عروض Delphi و C++Builder التي تُنشئ مخرجات PDF أو نصية الآن المستند المُولَّد تلقائيًا بعد الحفظ الناجح.
- تُبقي حزم التثبيت الآن على artifacts البناء بعيدًا عن مجلدات العرض وتجعل عينات C++Builder بالإضافة إلى وحدات DLL و ActiveX/OCX مكونات اختيارية؛ تُثبَّت الملفات المطابقة فقط عند اختيار المكون.
Version 3.18.2
تغييرات
- تمسح الآن عروض EditFormField لـ Delphi و C++Builder قيمة /NeedAppearances قبل تحديث قيم الحقول، بحيث يحصل كل حقل نصي مُحرَّر على تيار مظهر طبيعي مُحدَّث في PDF المحفوظ.
- يُبقي هذا تيار /AP المحفوظ متزامنًا مع قيمة /V المُخزَّنة ويتجنب الاختلافات المعتمدة على العارض حيث يكشف التركيز على الحقل عن نص كان مفقودًا من المظهر الثابت للحقل.
Version 3.18.1
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.18.0
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.17.0
تغييرات
- ثماني نقاط دخول إضافية لـ 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.
Version 3.16.3
إضافات
- 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.
Version 3.16.2
تغييرات
- تعرض ملفات PDF المُحمَّلة الآن عرضًا يقتصر على المُسهِم لاكتشاف الميزات في وقت التحميل عبر GetInformation(103) ("ContributorFeatures"). تحتوي القائمة فقط على الميزات التي يكون حدها الأدنى المطلوب من الإصدار أكبر تمامًا من HeaderVersion (المفتاح 100)، بحيث تُجيب مباشرة على "لماذا الإصدار الفعلي أعلى من ترويسة الملف؟".
- GetInformation(101) ("DetectedFeatures") لم تتغير ولا تزال تُدرج كل ميزة مطابقة بصرف النظر عن المساهمة.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 181/181، واجتاز C++Builder Win64x GoogleTest 57/57.
Version 3.16.1
إضافات
- وُسِّعت تغطية اختبار اكتشاف جانب اللودر بستة 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.
Version 3.16.0
إضافات
- مفاتيح GetInformation جديدة: 100 تُعيد HeaderVersion (%PDF-X.Y الحرفي)، 101 تُعيد DetectedFeatures (الميزات المطابقة عند التحميل، مفصولة بـ CRLF)، 102 تُعيد AutoBumpedFeatures (الميزات التي فعّلت EnsureMinVersion على جانب الـ writer، مفصولة بـ CRLF).
تغييرات
- تمر مستندات PDF المُحمَّلة الآن عبر مرور اكتشاف للإصدار يعتمد على المحتوى: يتم اجتياز كل كائن غير مباشر عبر جدول الميزة إلى الحد الأدنى للإصدار المستخدم في بوابة وقت الحفظ، ويُرفع FVersion فوق قيمة ترويسة %PDF-X.Y الحرفية عندما يتطلب المحتوى فعلًا إصدارًا أعلى. على سبيل المثال، إدخال /UserUnit للصفحة يرفع الإصدار الفعلي إلى PDF 1.6 حتى لو كانت ترويسة الملف تقول PDF 1.4.
- لا تتأثر بوابة وقت الحفظ: المستندات التي تم رفع إصدارها الفعلي عند التحميل، ثم تم تخفيضها صراحةً بـ SetInformation(0, ...)، لا تزال تُنتج LastErrorCode 602 في وقت الحفظ.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 173/173، واجتاز C++Builder Win64x GoogleTest 57/57.
Version 3.15.0
تغييرات
- نقاط دخول الـ 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.
Version 3.14.3
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.14.2
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.14.1
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.14.0
تغييرات
- يتعرّف توافق إصدار 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.
Version 3.13.0
تغييرات
- تمت إعادة هيكلة بوابة توافق إصدار PDF التي ترفض ميزات الإصدارات اللاحقة في وقت الحفظ إلى وحدة مخصصة بحيث يمكن لمجموعة القواعد النمو دون اضطراب نواة المستند.
- لا تغيير في السلوك المرئي للمستخدم مقارنة بـ v3.12.7: ميزات خارج الإصدار نفسها لا تزال مرفوضة بـ LastErrorCode 602.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 155/155، واجتاز C++Builder Win64x GoogleTest 57/57.
Version 3.12.7
إضافات
- تم توسيع تغطية الاختبار الآلي لتدفق عمل العرض المباشر PdfToImage في كل من مجموعتي Delphi DUnitX و C++Builder GoogleTest.
تغييرات
- يُسجّل الآن مُنفّذ اختبار Delphi VCL GUI fixtures الخاصة بـ Syntax و XRef، بما يطابق تغطية مُنفّذ الكونسول.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 147/147، واجتاز C++Builder Win64x GoogleTest 57/57.
Version 3.12.6
تغييرات
- حفظ المستند بوصفه 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.
Version 3.12.5
إضافات
- تمت إضافة تغطية الانحدار لإفلاتات السلاسل الحرفية غير المعروفة وتسلسلات الإفلات المختلطة الثُمانية/غير الثُمانية.
تغييرات
- تحسين تحليل سلاسل PDF 1.7 الحرفية بحيث تتجاهل تسلسلات الإفلات غير المعروفة الشرطة المائلة العكسية كما تتطلب المواصفة.
- تستهلك إفلاتات السلاسل الحرفية الثُمانية الآن أرقامًا ثُمانية فقط وتُبقي على رقم غير ثُماني تالٍ كبيانات سلسلة عادية.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 141/141.
Version 3.12.4
إضافات
- تمت إضافة تغطية الانحدار لفواصل اسم القوس المعقوف الأيمن وإدخالات xref stream المتناثرة للكائنات المضغوطة.
تغييرات
- تحسين التحليل اللغوي لـ PDF 1.7 بحيث تتوقف كائنات الأسماء الآن بشكل صحيح عند فاصل القوس المعقوف الأيمن.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 139/139.
إصلاحات
- إصلاح تحميل SmartAccess لإدخالات الكائنات المضغوطة لتيار xref التي يكون رقم تيار كائنها أكبر من طول بايت PDF.
Version 3.12.3
إضافات
- تكتب ملفات PDF المشفّرة الجديدة بـ AES الآن قيم Length لـ crypt-filter بوصفها أطوال بت، بما يطابق عقد قاموس crypt filter لـ PDF 1.7.
تغييرات
- تحسين توافق المستندات المُشفّرة لـ PDF 1.7 لملفات مُعالج الأمان القياسية التي تستخدم StrF أو StmF أو EFF أو Identity أو None أو crypt filters مُسماة بأسلوب StdCF.
- تحترم تيارات metadata الآن EncryptMetadata=false أثناء تدفقات عمل فك التشفير والتشفير والنسخ/الحفظ بدلاً من معالجتها مثل التيارات العادية.
- تحمل تيارات الملفات المضمّنة الآن /Type /EmbeddedFile وتستخدم مسار قرار crypt-filter للملفات المضمّنة عند تحميل أو حفظ المستندات المشفّرة.
- تروج تيارات الملفات المضمّنة الخارجية الآن FDecodeParms إلى DecodeParms عند ترقية FFilter إلى Filter، مما يُحافظ على معاملات فك ترميز التيار.
- تحافظ قيم Prev/XRefStm لتيار XRef والإزاحات الرقمية الكبيرة الآن على دقة 64 بت عبر مسارات المُحلّل و SmartAccess.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 137/137.
Version 3.12.2
تغييرات
- تحسين توافق فك ترميز تيار PDF 1.7. يحترم فك ترميز التيار العام الآن /DP بوصفه اسم بديل لـ DecodeParms، ويحل إدخالات مصفوفة معاملات فك الترميز غير المباشرة، ويقبل اختصارات الـ filter القياسية /AHx و /LZW.
- تكتب الآن مخرجات PDF للملفات الكبيرة إزاحات xref و startxref و linearization و ByteRange للتوقيع الرقمي عبر مسارات تنسيق 64 بت بدلاً من تضييق هذه القيم عبر مساعدات أعداد صحيحة 32 بت.
- تُعامل المستندات المُحمَّلة الآن إدخال /Version في الكتالوج بوصفه إصدار PDF الفعلي عندما يكون أحدث من إصدار ترويسة الملف.
- التحقق: اجتازت مجموعات DUnitX لـ Delphi Win32 و Win64 جميعها 134/134.
إصلاحات
- لم تعد ذيول xref-stream المُعاد كتابتها تحتفظ بمفاتيح DecodeParms الخاصة بالتيار فقط عندما تحفظها PDFlibPas بوصفها قواميس ذيل تقليدية.
Version 3.12.1
تغييرات
- تفتح ملفات PDF المُولَّدة الآن مع تحديد حجم الصفحة الأولى وفقًا للارتفاع المتاح لنافذة العارض، بحيث تكون الصفحة الأولى بأكملها مرئية من الأعلى إلى الأسفل بأكبر تكبير يناسب النافذة. قم بتكوين OpenAction مخصص (SetOpenActionDestination أو SetOpenActionMenu أو SetOpenActionJavaScript) على المستند لتجاوز هذا الافتراضي.
Version 3.12.0
إضافات
- تمت إضافة stubs لـ CRT بمحاذاة 32 بايت لـ malloc/calloc/realloc/free للمكتبات C الثابتة وإصلاح TPDFJPEGImage.Compress لتحرير مخازن jpeg_mem_dest عبر نفس مسار free لـ C الذي خصصها.
- تم توسيع ملاحظات التحقق العامة للإشارة إلى التغطية الآلية الصارمة وراء هذا الإصدار: بنيات المكتبة، ودورات ضغط round trips، ومخرجات HelloWorld /FlateDecode، وعرض JPEG، وتدفقات عمل الصور، والخطوط، والنماذج، والأمان، والتوقيع، والطباعة، وتدفقات العمل المشتقة من عروض C++Builder.
تغييرات
- تضمن الواجهات الخلفية الثابتة لـ 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 بأعلام ميزة لكل ملف بدلاً من الاعتماد على مفتاح مُجمِّع عالمي واحد.
Version 3.11.0
إضافات
- تمت إضافة كائن jisr zlib-ng صغير لبنيات Win64 بحيث يحافظ كود Pascal على نقاط دخول مستقرة متوافقة مع zlib بينما يستهلك Delphi و C++Builder مجموعات الكائنات الخاصة بهما المتوافقة مع الرابط.
تغييرات
- تم التبديل لضغط Flate و فك الضغط على Windows إلى zlib-ng في وضع متوافق مع zlib. يربط الآن Win32 و Delphi Win64 و C++Builder Win64x مجموعات كائنات zlib-ng الثابتة المتطابقة مع ABI من Lib\thirdparty\Win32 و Lib\thirdparty\Win64 و Lib\thirdparty\Win64x.
- تم تحديث جميع مشاريع عرض C++Builder لتعريف PDFLIB_CPPBUILDER، بما يطابق مُنفّذ GoogleTest ويمنع عروض Win64x من ربط كائنات Delphi Win64 zlib-ng.
إصلاحات
- مسار Win64 لم يعد يمر عبر وحدة Delphi's System.ZLib، لذلك يمكن لضغط/فك ضغط تيار PDF الاستفادة من الواجهة الخلفية zlib-ng تمامًا مثل بنية 32 بت.
Version 3.10.3
إضافات
- تم توسيع مجموعة 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.
Version 3.10.2
إضافات
- تمت إضافة مُنفّذ 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.
Version 3.10.1
إضافات
- تمت إضافة 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.
Version 3.10.0
إضافات
- تمت إضافة إصدارات C++Builder أصلية لكل عينة Delphi تحت Demo. يمكن الآن بناء وتشغيل عروض إنشاء PDF ومعالجة الصفحات والخطوط والصور والأمان والتوقيع والعرض والطباعة من C++Builder دون أي غلاف على جانب Delphi.
- تمت إضافة Readme.txt موجز باللغة الإنجليزية إلى كل مجلد عرض Delphi يصف ما يعرضه العرض وواجهة API التي يُركّز عليها وكيفية تشغيله؛ نظرة عامة HTML على Demo\Delphi\index.html ترتبط بجميعها مُجمَّعة حسب الموضوع.
تغييرات
- يعيش كل عرض جديد في Demo\C++Builder\<Name>\ كمشروع كونسول يستهلك Lib\PDFlibrary.pas مباشرة ويشحن ملفات الإدخال اللازمة للتشغيل.
- مرآة لنفس Readme.txt لكل عرض C++Builder مع قسم Run مُعاد كتابته لتدفق عمل الكونسول (وسائط argv بدلاً من Open/SaveDialogs)؛ Demo\C++Builder\index.html مطابق يُدرج كل عرض C++Builder بنفس مجموعات الموضوع.
إصلاحات
- إصلاح تسرب ذاكرة في عرض ImportEMF (تم إنشاء مثيل TPDFlib ولكن لم يتم تحريره أبدًا).
Version 3.9.14
تغييرات
- تم تنظيم عروض النص المُغلَّف وترقيم HTML بحيث يُركّز كل منها على واجهة API الخاصة به ويعمل من زر واحد.
- إعادة تسمية مشروعي عرض (EmbeddedFonts و PdfPermission) بحيث تتطابق الملفات التنفيذية المُجمَّعة مع أسماء المجلدات بدلاً من أسماء النموذج الأولي القديمة.
إصلاحات
- إصلاح عرض نسخ نطاق الصفحات بحيث ينسخ الصفحات فعلًا بدلاً من الإبلاغ دائمًا عن الفشل.
Version 3.9.13
إضافات
- تقديم مجموعة اختبار DUnitX آلية (مُنفّذو الكونسول و VCL GUI) تُغطي وحدات الأدوات المساعدة — buffer و AES و ZLib و Unicode و digest hashing — وتدفقات العمل على مستوى المكتبة بما في ذلك إنشاء المستند والحفظ إلى ملف والحفظ إلى تيار، ودورات تحميل round-trips، وتشفير AES-128/AES-256.
إصلاحات
- إصلاح خطأ موضع التيار في قارئ المخزن المؤقت الداخلي: قراءات الكلمة المكونة من بايتين كانت تُقدّم مؤشر القراءة بأربعة بايتات بدلاً من بايتين. في المخازن المؤقتة الأطول من بايتين، كانت القراءات اللاحقة تهبط على الإزاحة الخاطئة وتُعيد بيانات غير صحيحة بصمت. كان التأثير الأكثر وضوحًا عند تحليل هياكل البيانات الثنائية التي تتداخل فيها قراءات البايت والكلمة.
Version 3.9.12
تغييرات
- يستخدم عرض الصور في GDI+ الآن بشكل افتراضي تداخلًا ثنائي التكعيب سلسًا وعالي الجودة عند تحجيم الصور النقطية إلى دقة الشاشة أو دقة التصدير. كان الافتراضي السابق هو nearest-neighbour، الذي ينتج عنه آثار سلم درجي مرئية على الصور الصغيرة (الشعارات والصور المصغرة) المُكبّرة لمعاينة الشاشة أو التصدير عالي DPI. يمكن للمستدعين الذين يفضلون الوضع الأكثر حدة nearest-neighbour استعادة السلوك القديم عبر SetGDIPlusOptions.
Version 3.9.11
إصلاحات
- إصلاح عرض Cairo لصور PDF التي تستخدم شفافية مفتاح اللون (مصفوفة نطاق لون /Mask في قاموس الصورة). سابقًا، عندما تحتوي الصفحة على صورة بهذا الشكل من الشفافية، كان مُصيّر Cairo يُهمل الصورة تمامًا بدلاً من تركيبها مع خلفية الصفحة. يستمد الإصلاح قناة ألفا لكل بكسل من نطاقات مفتاح اللون المُعلنة ويعرض النتيجة كصورة شفافة، مُنتجًا مخرجات متسقة بصريًا مع مُصيّر GDI+.
Version 3.9.10
إصلاحات
- إصلاح انحدار عرض Cairo حيث كان كل محتوى الصفحة الذي يلي تسلسل صورة مقصوصة محصورًا بشكل غير صحيح في مستطيل قص الصورة. صفحات PDF التي تحفظ حالة الرسومات، وتطبق مسار قص، وترسم صورة، ثم تُستعيد الحالة — تقنية تخطيط شائعة للصور المؤطرة أو المحدودة — كانت تعرض كل النصوص والأشكال والرسومات اللاحقة داخل المنطقة المقصوصة فقط. تحفظ Cairo state save و restore الآن بشكل صحيح إلى مُشغّلات PDF q/Q، بحيث يتم تجاهل منطقة القص بعد رسم الصورة.
Version 3.9.9
إضافات
- تمت إضافة محرك عرض 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 جنبًا إلى جنب على نفس المستند دون أي تغييرات في الكود.
Version 3.9.8
إصلاحات
- تم قمع تشخيصين مُجمِّع زائفين في shim لـ Win32 C-runtime ظهرا على RAD Studio 13.1 وما بعده. تم رفع تحذير إلغاء (W1000) لأن حارس قدرة إصدار المُجمِّع لم يتم نشره إلى مُجمِّعين أحدث من Delphi 2009، مما تسبب في تجميعهم مقابل واجهة API لمدير الذاكرة المُلغاة. تم رفع تلميح متغير غير مستخدم (H2164) لمتغير توافق داخلي يحتاجه فقط بنيات Delphi 7؛ يتم تحديد نطاقه الآن إلى الكتلة الشرطية لذلك الإصدار. كلا المشكلتين تشخيصيتان فقط دون تأثير وقت التشغيل.
Version 3.9.7
إضافات
- تمت إضافة عرض صفحة اختياري يعتمد على PDFium على Windows، بما في ذلك عرض تيار BMP، وعرض سياق الجهاز، وعرض الذاكرة، وإخراج الطابعة.
تغييرات
- تم تحديث عرض Delphi MultiFunction View/Print مع أداة اختيار مُصيّر بحيث يمكن للمستخدمين التبديل بين مُصيّر GDI+ الحالي و PDFium.
Version 3.9.6
إضافات
- تمت إضافة سكريبتات Inno Setup منفصلة لحزمة PDFlibPas الكاملة وحزمة التجربة، مع استثناءات تُركّز على الإصدار للبيانات الوصفية لمراقبة المصدر، ومخرجات البناء، وذاكرة التخزين المؤقت للـ IDE، وملفات الوكلاء المحلية، وأشجار مصدر الطرف الثالث المُجمَّعة التي ليست جزءًا من الحزمة المُشحونة.
تغييرات
- يبني مُثبِّت التجربة الآن ويُحزّم مكتبات ثنائية تجريبية لـ RAD Studio 11.3 و 12.3 و 13.1، بالإضافة إلى عروض Delphi التجريبية، قبل توليد الملف التنفيذي للإعداد.
Version 3.9.5
إصلاحات
- إصلاح بنيات مكتبة Win32 تحت RAD Studio 9.0 / Delphi XE2. كان سكريبت البناء يُمرر علم دليل إخراج DCU الذي يوجد فقط من Delphi 2010 وما بعده؛ فسّر مُجمِّع XE2 العلم بشكل مختلف، مُنتجًا مسار إخراج مُشوَّش وخطأ فادح قبل معالجة أي ملف مصدر. يختار السكريبت الآن العلم المناسب تلقائيًا بناءً على إصدار المُجمِّع الهدف.
- تصحيح حارس إصدار مُجمِّع ذي صلة في مصدر المكتبة كان يستدعي دالة وقت تشغيل مُؤهَّلة بالاسم تم إدخالها في XE4 تحت شرط XE2+. بنيات تستهدف XE2 و XE3 تحل الآن استيراد التوافق الصحيح بدلاً من ذلك.
Version 3.9.4
إصلاحات
- إصلاح إعداد الطابعة للطابعات الشبكية والمُشتركة في الخادم بتطبيق إعدادات صينية الورق ووسائط الورق و duplex والجودة وخيارات الطباعة الأخرى عبر مقبض DEVMODE للطابعة بدلاً من مقبض سياق جهاز الطابعة.
Version 3.9.3
تغييرات
- تم تحديث الواجهة الخلفية AES المُجمَّعة إلى مصادر Brian Gladman's 2018 AES على كل من Win32 و Win64. تسمح سكريبتات البناء القابلة لإعادة الإنتاج الآن بإعادة بناء كائنات AES الثابتة من المصدر في أي وقت. تم اكتشاف وإصلاح خلل ABI في bindings Pascal أثناء العملية: كانت دوال تشفير وفك تشفير AES-CBC تفتقر إلى إعلان اصطلاح استدعاء C الخاص بها، لذلك مرّرت بنيات Win32 الوسائط بصمت بترتيب سجلات خاطئ، مما قد يُنتج مخرجات مشفّرة غير صحيحة. لم تتأثر بنيات Win64 لأن المنصة تفرض اصطلاح استدعاء موحدًا.
الأمان
- تم تقوية سكريبتات إعادة بناء الطرف الثالث بحيث يمكن إطلاق سكريبتات zlib و JPEG و CRT-stub القائمة على MSVC من جذر المستودع وكذلك من دليل thirdparty؛ سابقًا كانت تتطلب تعيين دليل العمل إلى مجلد thirdparty.
Version 3.9.2
إصلاحات
- تم ترقية الواجهة الخلفية لـ JPEG 2000 من OpenJPEG 1.5 القديم إلى OpenJPEG 2.5.4 على كل من Win32 و Win64. تستخدم كلتا المنصتين الآن ربط الكائنات الثابتة، بحيث يعمل تشفير وفك تشفير JPEG 2000 دون DLL وقت تشغيل إضافي. يجلب الكوديك الحديث معالجة ترويسة JP2/J2K الحالية، وواجهة برمجة تطبيقات تيار مُدفوعة بـ callback، وإصلاحات الأخطاء والأمان المتراكمة من المشروع المنبع. واجهة TJpeg2000Bitmap العامة لم تتغير.
Version 3.9.1
إصلاحات
- إصلاح عرض صفحة 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.
Version 3.9.0
تغييرات
- تم ترقية الواجهة الخلفية لـ JPEG 2000 المُجمَّعة من OpenJPEG 1.5 القديم إلى OpenJPEG 2.5.4. يستخدم تحميل وحفظ JPEG 2000 الآن الكوديك الحديث، وواجهة برمجة تطبيقات تيار مُدفوعة بـ callback، ومعالجة ترويسة JP2/J2K الحالية مع الحفاظ على واجهة TJpeg2000Bitmap العامة.
إصلاحات
- يختار إخراج JPEG 2000 الآن عدد دقة OpenJPEG صالحًا للصور الصغيرة تلقائيًا، ولم تعد الواجهة الخلفية الثابتة لـ Win32 تعتمد على صادرات مساعد MSVCRT المفقودة.
Version 3.8.1
إصلاحات
- تم القضاء على جميع تحذيرات 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.
Version 3.8.0
الأمان
- تم ترقية كوديك Win64 JPEG من libjpeg بأسلوب IJG إلى libjpeg-turbo 3.1.90، مكمّلًا هجرة JPEG التي بدأت في v3.7.0 (Win32). يشترك مساري Win32 و Win64 الآن في نفس كوديك JPEG الحديث، مع نفس حلقات SIMD المُحسَّنة وأكثر من 30 إصلاح CVE / fuzz متراكم من المنبع. واجهة API العامة لـ PDFlibPas لم تتغير.
Version 3.7.0
الأمان
- تم ترقية كوديك Win32 JPEG من IJG libjpeg-6b إلى libjpeg-turbo 3.1.90. تشفير/فك تشفير JPEG أسرع بشكل ملحوظ عبر حلقات SIMD المُحسَّنة، بالإضافة إلى أكثر من 30 إصلاح CVE / fuzz متراكم في المنبع libjpeg-turbo. واجهة API العامة لـ PDFlibPas (فئة TPDFJPEGImage، دوال DumpJPEG) لم تتغير؛ تعمل مسارات الكود الحالية لـ PDF/JPEG بشكل أسرع دون أي تغييرات في المصدر.
Version 3.6.0
تغييرات
- مسار 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.
الأمان
- تم ترقية Win32 zlib من 1.2.x إلى 1.3.2. يشمل أكثر من 25 إصلاح CVE / fuzz قياسي متراكم في المنبع منذ 1.2.8، بالإضافة إلى نقاط دخول inflateBack9 / inflateTree9 الجديدة المستخدمة بواسطة تيارات نافذة 64 بت. واجهة API العامة لـ PDFlibPas (DeflateStr / InflateStr / InflateStrParms) لم تتغير.
Version 3.5.0
إضافات
- تمت إضافة البنية التحتية للبناء لـ 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 تلقائيًا.
تغييرات
- تم تزويد البنية التحتية لبناء جديد لمكتبات الصور / الضغط 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 الثابتة من مصدر نظيف.
Version 3.4.0
الأمان
- تم تقوية إنشاء مفتاح التشفير، ومتجه التهيئة لـ AES، وكتلة أذونات Perms ضد مصادر الأرقام العشوائية القابلة للتنبؤ. ملفات PDF المشفّرة المُنتجة على الأنظمة التي بدأت بالقرب من نفس وقت الجدار الزمني لم تعد قابلة للارتباط بشكل تافه؛ مستندات AES-256 تحتفظ الآن بقوة المفتاح الكاملة.
- تم تقوية تحليل قاموس الصورة ضد ملفات PDF المشوَّهة أو المعادية التي تُعلن عن أعداد Width و Height و BitsPerComponent أو مكونات DeviceN غير معقولة. تُقصّ القيم خارج النطاق قبل أي حسابات على المخزن المؤقت للبكسل، مما يمنع الأعطال عند فتح مثل هذه الملفات.
- تم تقوية اجتياز المرجع المتقاطع وشجرة الصفحات ضد المستندات التي تشكّل سلاسل xref /Prev أو روابط /Parent للصفحة حلقة أو تكون عميقة بشكل مفرط. يرفض القارئ الآن الهياكل المشوهة بشكل نظيف بدلاً من التكرار حتى نفاد المكدس.
Version 3.3.1
إضافات
- تمت إضافة تعليقات منطقية مضمّنة حول إصلاحات عرض PDFlibRenderer.pas التي كانت موجودة بالفعل في خط الأساس الأولي لـ Git. توثق التعليقات سبب قيام SetPen بتحجيم عرض الضربات بواسطة التحويل النشط للوحة الرسم، ولماذا يجب على مُشغّلات Type 3 font CharProc d0/d1 استهلاك معاملاتها. لم يتغير سلوك وقت التشغيل.
إصلاحات
- تم تبسيط سكريبتات بناء Windows لكل مكون. لم تعد مجلدات DLL/ و OCX/ و Dylib/ تحمل متغيرات منفصلة build12-* / build13-*: تحتوي كل منصة الآن على سكريبت build-Win32 / build-Win64 واحد يثبت على أحدث RAD Studio ويقبل وسيطة "debug" اختيارية.
Version 3.3.0
إصلاحات
- إصلاح عرض الضربة المُحوَّلة في PDFlibRenderer.pas. يطبق SetPen الآن مقياس التحويل الحالي للوحة الرسم على عروض خطوط PDF قبل استدعاء Picasso، مما يمنع الضربات الكبيرة جدًا أو الصغيرة جدًا على المسارات التي تم تحويل إحداثياتها بالفعل. يُصلح هذا مخططات glyph لـ Type 3 التي يمكن أن تُعرض ككتل سميكة وغير منتظمة.
- إصلاح معالجة CharProc d0/d1 لخط Type 3 في مُحلِّل تيار المحتوى. يستهلك d0 الآن معاملي العرض الخاصين به، ويستهلك d1 معاملات العرض / مربع الإحاطة الستة الخاصة به قبل تشغيل أوامر الرسم اللاحقة، مما يمنع المعاملات القديمة من إفساد هندسة glyph أو المسار.