ملاحظات إصدار PDFiumPas
سجل إصدارات ميزات PDFiumPas الظاهرة للمستخدم، والإصلاحات، وتحسينات العارض، وإنشاء المستندات، وإخراج PDF/A، والعرض، وتحديثات الوثائق
الإصدار الأخير
- أحدث إصدار: 2.10.1؛ تاريخ الإصدار:
Version 2.10.1
تم الإصلاح (Fixed)
- توحيد sid الخاص بـ SignerInfo في PAdES: يستخدم معرّف الموقّع الآن صيغة
issuerAndSerialNumberالخاصة بـ RFC 5652 §5.3 (issuer Name + serialNumber، كلاهما مستخرج كما هو من DER الخاص بشهادة الموقّع)، مما يحل محل صيغةsubjectKeyIdentifier+ full-cert SHA-256 placeholder غير القياسية السابقة التي رفضها Adobe Acrobat وأدوات التحقق المتوافقة الأخرى. يجتاز مُسافِر TbsCertificate DER جديد (ExtractIssuerAndSerial) issuer SEQUENCE وserial INTEGER كـ TLV bytes خام — تتجاوز الأرقام التسلسلية نطاقInt64غالبًا، لذا فإن الـ TLV الخام إلزامي. تبقى صيغةsubjectKeyIdentifierكبديل فقط عندما يفشل تحليل DER الخاص بالشهادة
تم التغيير (Changed)
- تم استبدال
TCmsSignerId.SerialNumber: Int64بـSerialDer: TBytes(serialNumber TLV الخام). يُضمّن منشئ CMS الـ TLV المُقتطع كما هو فيIssuerAndSerialNumber، متجنبًا بذلك تجاوزInt64في الأرقام التسلسلية لـ CA ذات 20 بايت (الحد الأعلى وفق RFC 5280 §4.1.2.2)
Version 2.10.0
أُضيف (Added)
- التحقق طويل الأمد PAdES B-LT: عندما يكون
TPadesSignOptions.Level >= plB_LT، يُلحقSignPadesBytesتحديثًا تزايديًا يحمل قاموس/DSSمع شهادة الموقّع وسلسلة الوسطاء الكاملة (يُستبعد الجذر ذي التوقيع الذاتي وفق RFC 5652 §10.2.3)، بالإضافة إلى علامة/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - طابع زمني للأرشفة PAdES B-LTA: عندما يكون
Level >= plB_LTAويكونTsaUrlمضبوطًا، يُلحق قاموس توقيع Document Time-stamp (/SubFilter /ETSI.RFC3161) يغطي/ByteRangeالخاص به الملف بأكمله؛ تُرقّى علامة ESIC إلى Level 2. يُكمل ذلك مستويات الأساس الأربع لـ PAdES (B-B, B-T, B-LT, B-LTA) - تجميع سلسلة الشهادات: يستدعي
ResolveWinSignerالآنCertGetCertificateChainويملأTPadesResolvedSigner.ChainCertDerبشهادات CA الوسيطة، بحيث يحمل/DSS /Certsالخاص بـ B-LT كل شهادة مطلوبة للتحقق من التوقيع دون عمليات بحث خارجية. أصبحCertFreeCertificateContextالآن مرتبطًا، مما يغلق تسريب سياق واحد لكل توقيع المذكور في v2.8.0 - سير عمل تكامل PDF/A: يحوّل
TPdf.SignPadesWithPdfAالمستند إلى PDF/A أولاً (أعلى مستوى تصدره المكتبة اليوم) ثم يطبّق توقيع PAdES المطلوب — نمط الحاوية طويل الأمد للأرشفة الذي يوصي به EN 319 142-1 الملحق A.7
Version 2.9.0
أُضيف (Added)
- طابع زمني موثوق PAdES B-T: يكتسب
TPadesSignOptionsالحقولLevelوTsaUrlوNonce. عندما يكونLevel >= plB_TويكونTsaUrlمضبوطًا، يستخرجSignPadesBytesقيمة التوقيع من CMS المبني، ويطلب طابعًا زمنيًا RFC 3161 عليها، ويُضمّن TimeStampToken المُعاد كسمة غير موقّعة لـ SignerInfo باسمsignature-time-stamp— خطوة B-T للوقت الموثوق (EN 319 142-1 §6.3 متطلب o) FPdfTsa: عميل RFC 3161 متعدد المنصات —BuildTimeStampReq(الإصدار 1، SHA-256 messageImprint فوق قيمة التوقيع، nonce، certReq=true)،ParseTimeStampResp(يقبل PKIStatus 0/1، يرفض 2+، يستخرج TimeStampToken ContentInfo كما هو)، وRequestTimestamp(تسلسل لمرة واحدة من build+POST+parse). يتحكمPadesTsaAvailableفي الميزة على المنصات التي بدون HTTP backendFPdfTsaWin: backend لـ Windows WinHttp، مرتبط ديناميكيًا من winhttp.dll (صفر تبعيات جديدة وقت الترجمة؛ يتم التفاوض على HTTPS بواسطة مخزن شهادات Windows). يعكس نمط الارتباط الديناميكي الخاص بـFPdfCryptoWinFPdfCms: يجتازExtractSignatureValueCMS مبنيًا لاستعادة octets التوقيع الخام (مدخل التجزئة لـ TSA)، ويعيدAddSignatureTimestampToCmsبناء ContentInfo بـunsignedAttrs [1](0xA1) جديد يحمل سمة الطابع الزمني. يتعرّف مُحقّق المرحلة الأولى على النتيجة كتوقيع B-T
Version 2.8.0
أُضيف (Added)
- مجموعة توقيع PAdES B-B: أربعة لبنات بناء جديدة بلغة Pascal خالصة/متعددة المنصات (
FPdfSha256،FPdfAsn1،FPdfCms،FPdfCrypto) بالإضافة إلى backend لـ Windows CNG (FPdfCryptoWin) تتيح لـTPdf.SignPades/SignPadesToStreamإنتاج توقيع PAdES B-B من البداية للنهاية. تُحلّ شهادة الموقّع عن طريق بصمة SHA-1 من مخزن Current User “MY&rdquo؛ يتم دعم RSA-PSS (موصى به) وRSA PKCS#1 v1.5 وECDSA جميعها عبرNCryptSignHash FPdfSha256: تنفيذ SHA-256 مستقل وفق FIPS 180-4 (Init/Update/Final + دوال مساعدة لمرة واحدة). لا يُجمّع FPC 3.2.2 وحدة SHA-2، لذا تمتلك المكتبة واحدة لإبقاء كل مسار كود CMS على نوعTSHA256Digestواحد دون تفرعات RTLFPdfAsn1: مُرمّز DER (TDerWriter) وقارئ (TDerReader) يغطي SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/context-specific tags، مع ترميز definite-length ومعالجة IMPLICIT-tag التي يتطلبها CMSFPdfCms: منشئ CAdES SignedData (BuildSignedData) يُصدر السمات الموقّعة content-type وmessage-digest وsigning-certificate-v2 التي يفرضها أساس PAdES، مع signing-time وcommitment-type-indication اختيارية. يُحسب هضم signedAttrs عبر الصيغة الموسومة SET (0x31) ويُعاد إصدارها بوسم IMPLICIT [0] (0xA0) وفق RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: تجريد backend تشفيري معPadesCryptoAvailable/ResolvePadesSigner، وتنفيذ Windows الذي يربط crypt32.dll / ncrypt.dll ديناميكيًا (بدون تبعية DLL جديدة وقت الترجمة). تُعاد ترميز توقيعات ECDSA من صيغة IEEE P1363 r¦s الخاصة بـ Windows إلى صيغة DERECDSA-Sig-Valueالتي يتطلبها CMSSignPadesBytes: حقن التوقيع على مستوى البايت — يحجز خانة hex/Contentsبعرض ثابت، يحسب/ByteRangeالمغطّي، يهضم المستند، يبني ويُضمّن CMS، ويُلحق التحديث التزايدي. يتعرّف المُحقّق (v2.7.0) على المخرجات كتوقيع PAdES B-B
Version 2.7.0
أُضيف (Added)
- مُحقّق بنيوي لـ PAdES (ETSI EN 319 142-1 V1.2.1): الوحدة الجديدة
FPdfPadesوالطريقةTPdf.ValidatePadesتفحص قواميس قيمة التوقيع القابلة للوصول من/ByteRange، وتجتاز CMSSignedDataداخل/Contentsبما يكفي لتأكيد صيغة CAdES detached، وتكشف المستويات الأساسية الأربعة (B-B, B-T, B-LT, B-LTA) بالإضافة إلى قواميس Document Time-stamp (/SubFilter /ETSI.RFC3161) - مجموعة مشكلات PAdES على مستوى البند: 26 تعداد
ppei*تغطي قبول/SubFilter(adbe.pkcs7.sha1وadbe.x509.rsa_sha1مُعلّمان كممنوعين)، وتغطية ملف/ByteRange، وحظر/Cert، وصيغة CMSSignedData(موقّع واحد، detached eContent، نطاق إصدار)، والسمات الموقّعة المطلوبة (content-type،message-digest،signing-certificate/v2)، والهضمات الممنوعة (MD5، SHA-1)، والاستبعاد المتبادل بين/Reasonوcommitment-type-indication(متطلب d)، ومتطلب B-T للوقت الموثوق، وعلامة B-LT/DSS+/Certs+ ESIC Level 1، وعلامة B-LTA Document Time-stamp + ESIC Level 2 - حاقن DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamيُلحقان تحديثًا تزايديًا بنسخة من المستند يحمل قاموس/DSS(مع مصفوفات تدفق/Certsو/OCSPsو/CRLs) وعلامة/Extensions /ESIC(Level 1 أو 2)، مع الحفاظ على البايتات الأصلية — خطوة تضمين مادة التحقق لـ B-LT/B-LTA (البند 5.4.2) - مرحلة متعددة المنصات وبدون تبعيات: المُحقّق والحاقن بلغة Pascal خالصة ويعملان على كل IDE مدعوم (Delphi، Lazarus، FPC، C++Builder)؛ لا يُطلب backend تشفيري لهذا الإصدار، ولا تُضاف تبعية DLL جديدة
Version 2.6.0
تم التغيير (Changed)
- إزالة التكرار بين المعايير: سبع دوال مساعدة مكررة إضافية (PdfEnclosingObjNum، PdfDictRefNum، PdfExpandObjectStreams، PdfTextStr، ExtractLiteralString، ExtractXmpAttr) أُزيلت من وحدات المعايير الفردية ودُمجت في
FPdfPdfCommon، مما يقلل عبء صيانة النسخ-اللصق بحوالي 300 سطر - جودة PreflightReport: مشكلات content-class لـ PDF/X وPDF/E التي كانت في السابق تسقط في فئة “missing marker” العامة تحمل الآن فئات Content/Metadata/Security دقيقة وتوصيات خاصة بالبند (~15 تعدادًا عبر كلا المعيارين)
- تغطية اختبارات PDF/E وPDF/R: ستة تعدادات إضافية ذات تغطية صفرية حصلت على اختبارات إيجابية (
pveiLzwForbidden،pveiJavaScriptForbidden،pveiFormFieldsForbidden،pveiEmbeddedFilesForbidden،pvriBadHeader،pvriProhibitedInfoEntry) - إصلاح بناء Lazarus:
Tests.PdfVT(وحدة DUnitX خاصة بـ Delphi فقط أُضيفت في v2.5.x) تُستبعد الآن من مشروع Lazarus لاستعادة الترجمة
Version 2.5.3
أُضيف (Added)
- اكتمال OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemeيُعلّم OutputIntent الذي يكون/Sالخاص به ليس/GTS_PDFX؛pvviOutputIntentMissingIdentifierيُعلّم/OutputConditionIdentifierالمفقود - إعفاء Reference XObject لـ PDF/VT-2 (§6.2.2): لم يعد
pvviReferenceXObjectForbiddenيُطلق لملفPDF/VT-2، والذي يجوز له قانونًا استخدام Reference XObjects على أساس X-5g/5pg - التحقق من حرف حدود MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharيُعلّم حدًا تقع أحرفه خارج مجموعة bchars أو يتجاوز طوله 70
تم الإصلاح (Fixed)
- يكتب
InjectPdfVTMarkersالآن Info/CreationDateو/ModDateمن خيارات الحفظ، بحيث يمر الملف المُنتَج عبرValidatePdfVTComplianceدونpvviInfoModDateMismatchخاطئ (أعاد الحاقن سابقًا كتابة تواريخ XMP لكنه ترك تواريخ قاموس Info قديمة)
Version 2.5.2
أُضيف (Added)
- اتساق Info
/ModDate(§6.3 NOTE 2، أساس PDF/X-4):pvviInfoModDateMismatchيُعلّم/ModDateلقاموس Info والذي، بعد تسوية تاريخ-PDF إلى تاريخ-XMP، لا يساويxmp:ModifyDate - مطابقة inline chunk لـ PDF/VT-2s (الملحق A.2): يُشغّل مُحقّق MIME الآن
ValidatePdfVTComplianceعلى كل جزءapplication/pdfinline ويُعلّم جسمًا غير PDF/PT عبرvtmviInlinePdfNotPdfVT
Version 2.5.1
أُضيف (Added)
- التحقق من تقسيم DParts إلى أجزاء (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingيُعلّم مصفوفة/DPartsلا تحتوي مصفوفاتها الفرعية غير النهائية على 8192 إدخال بالضبط أو تقع مصفوفتها الفرعية الأخيرة خارج 1..8192 - اتساق RecordLevel عبر التدفقات (الملحق A.2): يستخرج مُحقّق MIME لـ PDF/VT-2s الآن
/RecordLevelلكل PDF inline ويُعلّم الخلاف عبرvtmviRecordLevelMismatch، مكمّلًا فحص NodeNameList الموجود - تلميحات الكائنات الرسومية المتكررة (§6.7):
pvviGtsScopeInvalidValueيُعلّم/GTS_Scopeخارج {SingleUse، Record، File، Stream، Global، Unknown}؛pvviGtsScopeRecordWithoutRecordLevelيُعلّم/Recordبدون/RecordLevel؛pvviGtsXidNotUuidيُعلّم/GTS_XIDليس RFC 4122 uuid: URI؛pvviGtsEnvMissingيُعلّم/GTS_Envالمفقود عندما يكون/GTS_Scopeهو Stream أو Global (§6.7.4) - الكشف عن المرجع الأمامي لـ MIME (الملحق A.2):
vtmviForwardReferenceيُعلّم PDF inline يستشهد باسم ملف (عبر/EF /F) لم يُقدّمه جزء مرفق سابق في التدفق
تم الإصلاح (Fixed)
ExtractNodeNameListFromPdfوExtractRecordLevelFromPdfفيFPdfPdfvtMimeعالجا خطأ off-by-one متكرر حيث عُومِل الإزاحة 1-based التي أرجعهاAnsiFindKeyكإزاحة بايت مطلقة داخل PDF الموسّع
Version 2.5.0
أُضيف (Added)
- بيانات Document Part الوصفية لـ PDF/VT (DPM، ISO 16612-2 §6.6): اكتسب
TPdfVTSaveOptionsالحقلينDpmEntriesوDpmTargetبحيث يستطيع الكاتب إرفاق قاموس/DPMبعقدة DPart المُركّبة، مع التحقق من اسم المفتاح مقابل قاعدة second-class-prefix في الملحق E وقواعد NMTOKEN / التفرّد / صيغةGTS_Managedفي §6.6 على جانب المُحقّق - تبادل تدفق PDF/VT-2s (الملحق A): الوحدة الجديدة
FPdfPdfvtMimeتوفرBuildPdfVT2sStreamوValidatePdfVT2sStreamلغلاف MIME من نوعmultipart/mixedيحمل أجزاء PDF/VT inline بالإضافة إلى ملفات ICC مرفقة، مع قاعدة ترتيب الترويسةX-PDFVT-Stream-version: 1وفحص اتساقNodeNameListعبر التدفقات - يُجري
TPdf.ValidatePdfVTالآن عدًا موثوقًا لإجراءات JavaScript عبرFPDFDoc_GetJavaScriptActionCount، مكمّلًا مسح اسم/JavaScriptعلى مستوى البايت
تم الإصلاح (Fixed)
- صحة PDF/VT
Trappedعلى أساس PDF/X-4: تُزال قيمة التعدادptvUnknown(يحظر PDF/X-4/Unknown)، ويُطبّعptvUnspecifiedإلى/Falseوقت الكتابة (/Trappedالمفقود محظور أيضًا)، ومشكلة جديدةpvviTrappedInvalidتُعلّم قيمة غائبة أوUnknown - يُوسّع
ValidatePdfVTComplianceالآن تدفقات الكائن (PdfExpandObjectStreams) قبل المسح، بحيث يكون قاموس catalog أو OutputIntent أو Metadata المخزّن داخل ObjStm مضغوط (PDF 1.5+، نموذي لدى منتجي PDF/X-4) متاحًا لعمليات البحث على مستوى البايت
تم التغيير (Changed)
- يرث PDF/VT-1 الآن ممنوعات محتوى PDF/X-4 الكاملة:
pvviAcroFormForbidden(/AcroFormأو/XFA)،pvviAdditionalActionsForbidden(catalog/AA)،pvviMissingTrimBoxوpvviReferenceXObjectForbidden(Reference XObject، X-5g/5pg فقط) - إزالة التكرار بين المعايير: رُقّي
BuildDictObj،IccComponentCount، ملف تعريف ICC المضمّن sRGB (GetSrgbIccProfile)،PdfTextStr،PdfEnclosingObjNum،PdfDictRefNumوPdfExpandObjectStreamsمن نسخ محلية ثلاثية فيFPdfPdfa/FPdfPdfx/FPdfPdfvtإلى موطن واحد قياسي فيFPdfPdfCommon؛ يوجد literal الـ ICC المكوّن من 3144 بايت الآن مرة واحدة بالضبط في قاعدة الكود
Version 2.4.0
تم الإصلاح (Fixed)
InjectPdfUaMarkersلم يعد يسقط مرجع/Infoالخاص بـ trailer على قاعدة cross-reference-stream: تم استبدالSourceTrailerInfoRefالمحلي (الذي يفتقر إلى xref-stream fallback) بـPdfSourceTrailerInfoRefالمشترك (الذي تمت ترقيته من نسخة PDF/A التي كانت تحتوي على fallback منذ v2.0.0)- يتعامل
PdfReadStreamBytesالمشترك الآن مع مراجع/Length N G Rغير المباشرة (تم نقلها من نسخة PDF/A المحلية)، وبالتالي لم تعد أدوات التحقق من PDF/VT و PDF/R و PDF/E تخطئ في قراءة أو تتخطى تدفقات البيانات الوصفية لـ XMP التي تنتجها الأدوات التي تستخدم indirect Length (Acrobat و Ghostscript)
تم التغيير (Changed)
- إلغاء تكرار المعايير المشتركة: تم حذف نسخ
PdfReadTrailerالمحلية فيFPdfPdfaوFPdfPdfx، ونسخSourceTrailerInfoRefالمحلية فيFPdfPdfaوFPdfPdfua، وPdfReadStreamBytesالمحلي فيFPdfPdfa— تنطبق الآن إصداراتFPdfPdfCommonالمشتركة في كل مكان؛ هذا يزيل حوالي 330 سطرًا من الكود المكرر ويقضي على عبء الصيانة لإبقاء النسخ متزامنة - إغلاق ديون اختبار PDF/X: حصلت سبعة تعدادات content-class التي كانت ذات تغطية صفرية سابقًا على اختبارات إيجابية (
pvxiLzwForbidden،pvxiJavaScriptForbidden،pvxiFormFieldsForbidden،pvxiAdditionalActions،pvxiEmbeddedFilesForbidden،pvxiMissingTrimBox،pvxiTrappedNotSet)
Version 2.3.0
تم التغيير (Changed)
- يستمر إغلاق ديون اختبار PDF/A: حصلت ثلاثة تعدادات أخرى ذات تغطية صفرية على اختبارات إيجابية؛ يقوم
pvaiForbiddenRenderingIntent(§6.2.9) بتمييز اسم rendering-intent غير القياسي في content stream؛ بينما يقومpvaiJpeg2000Violation(§6.2.2) بتمييز صورة JPXDecode تحتوي على/NumComponentsخارج النطاق {1,3,4} في Part 2؛ ويقومpvaiInlineImageLzwForbidden(§6.1.10) بتمييز صورة مضمنة تستخدم فلتر LZW في Part 2
Version 2.2.0
تم التغيير
- اختبارات التراجع لمجرى المراجع المتقاطعة (cross-reference-stream): يتحقق اختبار
Validate_XrefStreamTrailer_DetectsConformanceالحالي الآن أيضاً من أنه قد تم حل مرجع/Metadataالخاص بالفهرس (catalog) وقراءةpdfaid:partلـ XMP على أساس مجرى xref (وليس فقط/Root+/ID)؛ ويقوم اختبارInjectPdfA_XrefStreamBase_RoundTripsالجديد بحماية مسار مجرى xref الخاص بالحقن المضاف في الإصدار v2.0.0؛ ويتحقق اختباران عبر المعايير (PdfE_XrefStreamBase_NotRejectedAsUnparsableوPdfR_XrefStreamBase_NotRejectedAsUnparsable) من أن مدققي PDF/E و PDF/R لم يعودوا يرفضون ملفات PDF ذات مجرى xref كغير قابلة للتحليل - إغلاق ديون اختبار PDF/A: يؤكد اختبار
Validate_MinimalPdf_FlagsRequiredMarkersأن ملف PDF الأدنى المجرد يثيرpvaiMissingPdfAIdentifierوpvaiMissingOutputIntentوpvaiMissingIccProfileوpvaiMissingXmpMetadataوpvaiMissingXmpDates— مما يغلق فجوة التناظر مع مدققي PDF/E و PDF/X اللذين كانا يحتويان بالفعل على اختبارات مكافئة؛ واكتسب تعدادان إضافيان ذوا تغطية صفرية اختبارات إيجابية:pvaiUnembeddedFontوpvaiSubsetMissingCidSet
Version 2.1.0
تم الإصلاح
- تم استبعاد PDF/E سهواً من إصلاح مجرى المراجع المتقاطعة في v2.0.0: حيث استمر كل من
InjectPdfEMarkersوValidatePdfEComplianceفي استدعاءPdfReadTrailerبدونAcceptXrefStream، مما أدى إلى فشل حاقن PDF/E بصمت في مخرجات PDF 1.5+ (الافتراضي لـSaveAsCopyالخاص بـ pdfium)؛ ويمرر كلا موقعي الاستدعاء الآن القيمةTrue - يحمل الملاذ المشترك لـ
PdfReadTrailerالخاص بمجرى المراجع المتقاطعة الآن حارس/Type /XRefالذي كانت النسخ المحلية لـ PDF/A و PDF/X تمتلكه بالفعل، بحيث يفشل إزاحةstartxrefالتالف الذي يشير إلى قاموس غير ذي صلة بشكل نظيف بدلاً من تحليله بشكل خاطئ على أنه المقطورة (trailer) - كان محلل
/Langذو المرجع غير المباشر فيValidatePdfUaCompliance(v2.0.0) غير قابل للوصول: حيث تجد دالةPdfFindObjDictالقواميس<<فقط، بينما كائن سلسلة/Langهو(...)أو<...>بدون قاموس؛ وتم استبداله بمسح مباشر لجسم الكائن يحدد موقع رمز السلسلة
تم التغيير
- تم إزالة سبعة تكرارات مساعدة ظلية ميتة (PdfStructureBytes و PdfHasName و PdfCountName و BuildStreamObj) التي كانت نسخاً متطابقة البايت من إصدارات
FPdfPdfCommonالمشتركة، منFPdfPdfaوFPdfPdfua— وتطبق الإصدارات المشتركة الآن في كل مكان عبرuses
Version 2.0.0
تم الإصلاح
- الفشل الصامت عبر المعايير: يقبل المساعد المشترك
PdfReadTrailer(المستخدم بواسطة حواقن ومدققي علامات PDF/UA و PDF/X و PDF/VT و PDF/R) الآن معلمةAcceptXrefStreamويتراجع إلى قاموس كائن مجرى المراجع المتقاطعة عند عدم وجود كلمة رئيسيةtrailer(PDF 1.5+)؛ سابقاً، تسبب مخرجSaveAsCopyلـ pdfium (الذي يستخدم مجرى مراجع متقاطعة) في فشل كل حاقن علامات بصمت — حيث تم نسخ بايتات المصدر دون تغيير وظل الاستدعاء يعيد النجاح؛ وكان مدقق PDF/R-1.0 (الذي يعتبر أساسه PDF 2.0 مجرى مراجع متقاطعة دائماً) بلا تأثير فعلي؛ وتم نقل التنفيذ الناضج لمدقق PDF/A إلى المساعد المشترك لكي تستفيد جميع المعايير - يستخدم مسح قاموس المقطورة (trailer) في
InjectPdfUaMarkersوInjectPdfAMarkersالآنPdfDictEndالمدرك للعمق بدلاً من البحث المجرد عن>>، بحيث لا يتم قطع المقطورة التي تحتوي على قاموس متداخل (على سبيل المثال/Encrypt << ... >>) قبل إدخال/Infoاللاحق
تم التغيير
- تقوم دالة
TPdf.ValidatePdfUaالآن بكتمpvuaiFontNotEmbeddedالتقريبي على مستوى البايت عندما يتم إطلاقpvuaiPdfiumFontNotEmbeddedالدقيق لنموذج كائنات Pdfium بالفعل، بحيث لا يحمل تقرير التحقق المسبق (preflight) صفين شبه مكررين لـ "تضمين الخطوط الخاصة بك" لنفس العيب - تقوم دالة
pvuaiLangInvalidFormat(§7.2) الآن بحل/Langذي المرجع غير المباشر (N 0 R) إلى كائن السلسلة الخاص به وتتحقق من صحة المحتوى، وبذلك لم تعد علامة اللغة المشار إليها بشكل غير مباشر بقعة عمياء
Version 1.99.0
تم الإصلاح
- لا تمنح دالة
pvuaiLangInvalidFormat(§7.2) ميزة الاستثناء لسلاسل/Langالمرمزة بنظام السداسي عشر (hex): حيث يتم الآن فك ترميز أزواج UTF-16BE (مع علامة BOMFE FF) وسلاسل ASCII السداسية العشرية المجردة وإخضاعها لنفس فحص قواعد اللغة BCP 47 مثل سلاسل(...)الحرفية، وبذلك يتم رصد قيم/Langالسداسية العشرية المشوهة بينما لا تتعرض القيم المتوافقة (مثل UTF-16BEen-US) لخطر الإشارة إليها بوجود خطأ
تم التغيير
- تعفي دالة
pvuaiFontMissingToUnicode(§7.21.7) الآن الترميز/MacExpertEncodingإلى جانب/WinAnsiEncodingو/MacRomanEncoding، بما يطابق شروط الإعفاء الأربعة المدرجة في البند
Version 1.98.0
تمت الإضافة
- تشير دالة
pvuaiNeedAppearancesTrue(§7.18.4) إلى AcroForm التي تحتوي على علامة/NeedAppearancesبقيمة true، بحيث لا يتم قفل مظهر عناصر التحكم (widget) بشكل موثوق ولا تستطيع التقنيات المساعدة ربطها بشجرة البنية؛ وقد تم نقل هذا الفحص من مدقق PDF/A وتقييده بوجود/AcroFormلتضييق نطاق الفحص
تم التغيير
- تراجع في مجموعة اختبارات (corpus) لـ veraPDF: تم ربط زوج النجاح والفشل لـ Reference-XObject §7.20 وأزواج النجاح والفشل لـ subset CharSet/CIDSet §7.21.4.2 في
Live_Corpus_ValidatePdfUaMatchesConformance؛ كما تم أيضاً ربط عينات النجاح لـ ToUnicode-forbidden-value §7.21.7 و media-clip §7.18.6.2 كحراس ضد الحالات الإيجابية الخاطئة (حيث تستخدم عينات الفشل الخاصة بها مخططات قاموس لا يلتقطها الفحص على مستوى البايت، لذلك تم ربط جانب النجاح فقط) - حصلت قائمة توكيدات مسار النجاح في مجموعة الاختبارات (corpus) على 15 حارساً جديداً خالياً من الإيجابيات الخاطئة، بحيث يتم الآن اختبار كل فحص نشط لـ
pvuai*على مستوى البايت والبنية ضد عينات متوافقة (في السابق كان حوالي 30 فقط من أصل 60 مشكلة نشطة محمية)؛ وتم حذف حارسpvuaiLangInvalidFormatعمداً لأن فاحص مستوى البايت يشير بتحفظ إلى سلاسل/Langالمرمزة بنظام السداسي عشر التي لا يمكنه فك ترميزها
Version 1.97.0
تم الإصلاح
- تقوية
ValidatePdfUaStructureElements: يحمل مسار انتقال سلسلة الآباء لـEnclosingTableالآن عداداً للقفزات (محدوداً بعدد العناصر)، وبذلك لا يمكن لدورةParentIndexالمشوهة على مصفوفة عناصر بنية اصطناعية أن تؤدي إلى تعليق المستدعي؛ كما تم تقييد تخصيص مصفوفة معرّفات المحتوى المميز لـValidatePdfUaPageContentTaggingبمليون مدخل كحد أقصى، مما يمنع تخصيص مساحة تخزين بجيجابايت متعددة في حال وجودMarkedContentIDمشوه أو ضار
تم التغيير
- يصف تعليق توثيق التعداد لـ
pvuaiOrderedListMissingListNumberingالآن بدقة ما يقوم به الفحص: فهو يشير إلى عنصرLالذي تكون قيمةListNumberingله خارج مجموعة الجدول 347 من ISO 32000-1 (ولا يتم الإشارة إلى السمة الغائبة)؛ بينما كان التعليق السابق يلمح إلى أنه يكتشف أيضاً القوائم المرتبة التي تفتقر إلى هذه السمة، وهو ما لا يفعله التنفيذ الحالي - تم الآن ربط عينتي الفشل الخاصتين بـ WMode-mismatch لـ
7.21.3.3-t02فيLive_Corpus_ValidatePdfUaMatchesConformance— فمنذ الإصدار v1.95.0 يتم توسيع مجرى CMap بفك ضغط FlateDecode، وبذلك يتم الآن إجراء المقارنة بين القاموس والمحتوى على جانب قابل للقراءة؛ وقد تم إزالة تعليق “not wired” القديم
Version 1.96.0
تمت الإضافة
- الاتساق عبر المعايير: تحصل دالة
TPdf.ValidatePdfUaعلى فحصين تم نقلهما من مدقق PDF/A؛ حيث تشير دالةpvuaiAnnotationFlagsViolation(§7.18.1) إلى التعليقات التوضيحية غير المعفاة التي تحمل علامة المخفي (Hidden) / غير المرئي (Invisible) / بلا عرض (NoView)، مما يقطع تدفق القراءة للتقنيات المساعدة؛ وتشير دالةpvuaiActionTargetMissing(§7.18.5) إلى إجراءات GoToR / URI / SubmitForm التي تفتقر إلى مفتاح الهدف المطلوب (/F+/D، /URI، /F)، مما يجعل الرابط غير قابل للاستخدام بواسطة التقنيات المساعدة AT
تم الإصلاح
- دمج شجرة البنية عبر الصفحات: تقوم حلقة تجميع
AllElemsفيTPdf.ValidatePdfUaالآن بإعادة تأسيس قيمةParentIndexلكل عنصر من المصفوفة المحلية للصفحة إلى المصفوفة المدمجة؛ ودون ذلك، كانت عناصر الصفحات الفرعية في الصفحة 2 تحتفظ بفهرس محلي للصفحة يشير إلى شريحة الصفحة 1، مما يؤدي بصمت إلى إتلاف كل فحص يعتمد على ParentIndex (بنية الجدول/القائمة، عدد H-child وفق §7.4.4، و EnclosingTable) - تحليل خريطة الأدوار RoleMap: لا ينهي إجراء
PdfReadRoleMapPairsفحص المفتاح/القيمة بالكامل عندما تكون القيمة مرجعاً غير مباشر (N 0 R) أو مصفوفة ([...]) — وكلاهما شكلان صالحان لخريطة الأدوار RoleMap وفقاً لمعيار ISO 32000-1 14.8.5.1؛ حيث يتخطى الآن هذا المدخل فقط (Continue) بدلاً من الخروج بـBreak، مما يزيل الحالات الإيجابية الخاطئة لـpvuaiRoleMapUnresolvedللأنواع التي يتم تعيينها بعد مدخل غير مباشر أو مصفوفة
تم التغيير
- تقرير
FPdfPreflightReport: تحمل الآن 18 قيمة نشطة لـTPdfUaValidationIssue(والتي كانت تقع سابقاً ضمن فئة التوصية العامة “missing marker”) تصنيفات دقيقة (البنية / المحتوى / البيانات التعريفية / الأمان) وتوصيات محددة للبند؛ كما تم أيضاً إصلاح الخطأ الإملائيpuaNone / pua1→pucNone / puc1فيPDFSpecComplianceMatrix.md
Version 1.95.0
تم التغيير
- مراجعة وصحة استدعاء
TPdf.ValidatePdfUa: يقوم فحصpvuaiCMapWModeMismatchوفق §7.21.3.3 وفحصpvuaiToUnicodeForbiddenValueوفق §7.21.7 الآن بتوسيع مجاري CMap / ToUnicode stream المضغوطة بترميزFlateDecodeقبل الفحص (في السابق كان يتم فحص المجاري غير المضغوطة فقط، وهو ما يمثل حالة سلبية خاطئة معروفة)؛ وتمت ترقية الدوال المساعدة المشتركةPdfInflate/PdfReadAndDecodeStreamمنFPdfPdfa/FPdfPdfxإلىFPdfPdfCommonلتتشارك كافة وحدات المطابقة نسخة واحدة
تمت الإضافة
- تشير دالة
pvuaiSubsetCharSetEmpty(§7.21.4.2) إلىFontDescriptorلخط فرعي من نوع Type 1 يحمل مفتاح/CharSetبقيمة نصية فارغة — حيث كانت دالةpvuaiSubsetMissingCharSetالحالية ترصد فقط المفتاح المفقود؛ بينما لا يتم الإشارة إلى قيمة/CIDSetفارغة بوجود خطأ، نظراً لأن الخط الذي لا يحتوي على معرّفات CID يمكنه قانونياً حمل خريطة بت فارغة
Version 1.94.0
تمت الإضافة
- أغلقت المراجعة الثانية لدالة
TPdf.ValidatePdfUaست فجوات في معيار ISO 14289-1 ظهرت خلال مراجعة بنداً ببند وإعادة فحص واجهات برمجة تطبيقات Pdfium الأصلية المغلفة بالفعل وغير المستخدمة في مسار PDF/UA؛ حيث تشير دالةpvuaiHeadingFormatInvalid(§7.4.3) إلى علامات العناوين المحددة من قبل المستخدم والتي تبدأ بالحرف H ولكنها تحمل فواصل أو مسافات أو أرقاماً رومانية بدلاً من الأرقام العربية البحتة؛ وتشير دالةpvuaiMissingDocumentOutline(§7.17، ينبغي) إلى المستندات متعددة الصفحات التي لا تحمل مخططاً تفصيلياً للإشارات المرجعية (المستندات ذات الصفحة الواحدة معفاة)؛ وتشير دالةpvuaiStructElementLangInvalid(§7.2) إلى قيمة/Langلعنصر البنية التي لا تمثل وسم BCP 47 صالحاً؛ وتشير دالةpvuaiWidgetMissingPrintField(§7.14 / §7.18.4) إلى عنصر بنية Widget يفتقر إلى مالك سمة PrintField؛ وتشير دالةpvuaiLinkNotInStructureTree(§7.18.5) إلى المستندات التي لا تظهر فيها التعليقات التوضيحية ذات النوع/Subtype /Linkكعناصر بنية Link؛ وتضيف دالتاpvuaiPdfiumAnnotationMissingContentsوpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) فحصاً دقيقاً لنموذج كائنات Pdfium للتعليقات التوضيحية يعفي التعليقات المخفية، وخارج صندوق الاقتطاع (crop-box)، والنوافذ المنبثقة (Popup)، وعناصر التحكم (Widget) — مما يلغي الحالات الإيجابية الخاطئة للاستدلال على مستوى البايت، والذي لا يستطيع قراءة علامات/Fأو/Rect
Version 1.93.0
تمت الإضافة
- تضيف دالة
TPdf.ValidatePdfUaالآن مساراً لنموذج كائنات Pdfium فوق مفتش مستوى البايت، بما يحاكي بنية الجولة السابعة لـ PDF/A: حيث يتنقل عبر كائنات النص لكل صفحة عبرFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded، §7.21.4) ويفحص كل حرف عبرFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError، §7.21.7) وFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph، §7.21.8) — وهو أكثر دقة من الاستدلالات على مستوى البايت، والتي لا تعمل إلا عند وجود صفر من برامج الخطوط أو عدم ظهور/ToUnicodeعلى الإطلاق؛ ويختصر الفحص المسار عند ثلاثة مستويات: تخرج حلقة الصفحات عندما تكون المشكلات الثلاث لمستوى Pdfium قد تم تعيينها بالفعل، وتخرج حلقة الكائنات عند أول خط غير مضمن، ويتخطى فحص الأحرف فحص.notdefعندما يتم تسجيلUnicodeMapErrorبالفعل؛ وكان معيار PDF/UA هو آخر مدقق معايير PDF لا يحتوي على طبقة نموذج كائنات Pdfium
Version 1.92.0
تمت الإضافة
- إنشاء
Tests.PdfR— ملف الاختبار الأول لمدقق PDF/R-1 (FPdfPdfr)، ويغطي التحقق من صحة الترويسة، وحظر ObjStm، واكتشاف علامات الصور النقطية (raster-marker)، وحارس ملف نظيف خالٍ من الإيجابيات الخاطئة؛ وتمتلك الآن مجموعات اختبارات معايير PDF الست ملفات اختبار مخصصة: PdfA(80)، PdfUa(101)، PdfX(7)، PdfE(5)، PdfVT(15)، PdfR(4) = إجمالي 212 اختباراً
Version 1.91.0
تمت الإضافة
- حصلت دالتا
ValidatePdfEوValidatePdfVTعلى فحوصات لمستوى المحتوى كانت متوفرة سابقاً فقط في مدققات PDF/A و PDF/UA و PDF/X: وهيpveiLzwForbiddenوpveiJavaScriptForbiddenوpveiFormFieldsForbidden(لـ PDF/E فقط) وpveiEmbeddedFilesForbidden(لـ PDF/E only) وpveiOpiForbiddenوpvviLzwForbiddenوpvviJavaScriptForbiddenوpvviEmbeddedFilesForbiddenوpvviOpiForbidden؛ كما حصلتTPdf.ValidatePdfEوTPdf.ValidatePdfVTعلى طبقة نموذج كائنات Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) التي تتنقل عبر كائنات النص للصفحة عبرFPDFFont_GetIsEmbedded، وتختصر المسار عند أول خط غير مضمن يتم العثور عليه
Version 1.90.0
تمت الإضافة
- تضيف دالة
TPdf.ValidatePdfXالآن مساراً لنموذج كائنات Pdfium فوق مفتش مستوى البايت: حيث يتنقل عبر كائنات النص لكل صفحة عبرFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedويبلغ عن الخط غير المضمن كـpvxiPdfiumFontNotEmbedded— وهو أكثر دقة من الاستدلال على مستوى البايت الذي لا يعمل إلا عند وجود صفر من برامج الخطوط؛ وتخرج حلقة الفحص عند أول خط غير مضمن يتم العثور عليه
تم التغيير
- مسار شجرة بنية
TPdf.ValidatePdfUa: يتم الآن تخطي استدعاءValidatePdfUaPageContentTaggingلكل صفحة (والذي يبني خريطة مطالبات معرّفات المحتوى المميز ويفحص كل كائن نص/صورة بشكل متقاطع) في الصفحات اللاحقة بمجرد العثور علىpvuaiUntaggedContentبالفعل — حيث لا يزال يتم جمع عناصر البنية للفحوصات عبر الصفحات (معرّف الملاحظة الفريد، تسلسل العناوين)، ولكن مسار ترميز المحتوى المكلف لكل صفحة يتوقف مبكراً
Version 1.89.0
تم التغيير
- أداء طبقة نموذج كائنات Pdfium لـ
TPdf.ValidatePdfA: تختصر حلقة الصفحات/الكائنات المسار الآن عند ثلاثة مستويات — حيث تخرج حلقة الصفحات عندما تكون كافة مشكلات طبقة Pdfium القابلة للتطبيق قد تم العثور عليها بالفعل، وتخرج حلقة الكائنات عند تعيين كلتا مشكلتي الكائن (تضمين الخط + الشفافية)، ويتخطى فحص الأحرف لصفحة النص فحص.notdefعندما يتم تسجيلUnicodeMapErrorبالفعل؛ ويتم تخزين فحوصات توفر واجهة برمجة التطبيقاتAssigned()وعلامات المطابقة مؤقتاً في متغيرات منطقية محلية مرة واحدة قبل الحلقة بدلاً من إعادة تقييمها عند كل صفحة/كائن/حرف؛ وبذلك يمكن للحلقة في المستندات الكبيرة غير المتوافقة أن تتوقف بعد الصفحة الأولى بدلاً من فحص جميع الصفحات؛ بينما يكون العبء الإضافي لكل صفحة في المستند المتوافق أقل (دون استدعاءاتAssignedمتكررة)
Version 1.88.0
تمت الإضافة
- حصلت دالة
ValidatePdfXعلى ثماني قيم جديدة لـTPdfXValidationIssueلمستوى المحتوى تغطي قيود التبادل الطباعي التي يفرضها PDF/X خارج علامات تنسيق الملف: وهيpvxiLzwForbidden(/LZWDecode) وpvxiJavaScriptForbidden(/JavaScript) وpvxiFormFieldsForbidden(/AcroForm//XFA) وpvxiAdditionalActions(/AA) وpvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment) وpvxiOpiForbidden(/OPI//Alternates) وpvxiMissingTrimBox(عدم وجود/TrimBoxعلى أي صفحة) وpvxiTrappedNotSet(غياب/Trappedأو قيمته/Unknown)؛ وكان مدقق PDF/X سابقاً يفحص فقط علامات XMP/OutputIntent؛ وهذا هو أول فحص له على مستوى المحتوى؛ كما تم إضافة الدوال المساعدة المشتركةPdfStructureBytes/PdfHasName/PdfCountNameإلىFPdfPdfCommonلكي تتمكن جميع وحدات المطابقة من استخدامها
Version 1.87.0
تمت الإضافة
- يغطي التحقق من PDF/UA الآن قواعد الخطوط المركّبة وفق ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchيُشير إلى خطوط Type0 التي يختلف فيها CMap المضمّن وCIDFont التابع له بشأنRegistry/Orderingأو يتجاوز فيهاSupplementالخاص بـ CIDFont حدود CMap، وpvuaiCMapNotEmbeddedيُشير إلى CMaps المُشار إليها بالاسم (كـEncodingأوUseCMap) التي ليست CMaps معرّفة مسبقاً وفق ISO 32000-1 الجدول 118، وpvuaiCMapWModeMismatchيُشير إلى CMaps المضمّنة التي يختلف فيهاWModeفي قاموسها عن WMode في محتوى مجراها
تم الإصلاح
- كان فحص
pvuaiCidFontMissingCidToGidMapوفق §7.21.3.2 يفوته قواميس CIDFontType2 التي يفصل بين مفتاحSubtypeوقيمته سطر جديد، ويُشير الآن أيضاً إلى قيمة الاسمCIDToGIDMapغيرIdentity
Version 1.86.0
تمت الإضافة
- يغطي التحقق من PDF/UA الآن قواعد ترميز TrueType وفق ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidيُشير إلى خطوط TrueType غير الرمزية التي يكون فيهاEncodingمفقوداً أو ليسMacRomanEncodingولاWinAnsiEncoding(مباشرةً أو عبرBaseEncoding)، وpvuaiSymbolicTrueTypeEncodingيُشير إلى خطوط TrueType الرمزية التي تحمل اسمEncodingغير قياسي
Version 1.85.1
تم التغيير
- يعمل فحص ترتيب علامات التبويب
pvuaiMissingTabsOrderوفق ISO 14289-1 §7.18.3 الآن على أساس كل صفحة: كل صفحة تحتوي على تعليقات توضيحية يجب أن تُصرّح بـ/Tabs /Sفي قاموس صفحتها الخاص، بحيث لا تُخفي صفحة شقيقة مطابقة وجود صفحة بدون هذا الإعلان
Version 1.85.0
تمت الإضافة
- يُميّز التحقق من PDF/UA الآن بين نماذج XFA الديناميكية والثابتة وفق ISO 14289-1 §7.15:
pvuaiXfaDynamicيُشير إلى النماذج التي يُعيّن فيها إعداد XFA قيمةdynamicRenderإلىrequired
تم التغيير
- تم إيقاف علامة المرشح السابقة
pvuaiXfaPresentلأي نموذج XFA ولن تُرفع بعد الآن (نماذج XFA الثابتة مطابقة لـ §7.15)؛ تبقى قيمة التعداد للتوافق مع API
Version 1.84.0
تمت الإضافة
- يكتشف التحقق من PDF/UA الآن المحتوى الحقيقي غير المُوسَّم المطلوب وفق ISO 14289-1 §7.1:
pvuaiUntaggedContentيُشير إلى كائنات النص والصور المُصيَّرة التي لا تنتمي إلى شجرة بنية الصفحة (عبر معرّفات المحتوى المُعلَّمة) ولم تُوسَّم كعنصر Artifact - مساعدات جديدة على مستوى الصفحة:
GetPageContentMarkInfosوValidatePdfUaPageContentTaggingمع سجلTPdfPageContentMarkInfoللاستخدام المباشر
Version 1.83.0
تمت الإضافة
- يُطبّق التحقق من PDF/UA الآن نموذج العناوين وفق ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedيُشير إلى المستندات التي تمزج بين وسمHالعام والعناوين المرقّمةH1..Hn، وpvuaiHeadingMultipleInNodeيُشير إلى عقد البنية التي تحتوي على أكثر من عنوانHفرعي
Version 1.82.0
تمت الإضافة
- يحلّ التحقق من PDF/UA الآن RoleMap المطلوب وفق ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardيُشير إلى مدخلات RoleMap التي تُعيد تعريف نوع بنية قياسي، وpvuaiRoleMapUnresolvedيُشير إلى أنواع البنية غير القياسية المُستخدَمة التي تكون سلسلة RoleMap الخاصة بها مفقودة أو مقطوعة أو دائرية — السلاسل غير المباشرة التي تصل إلى نوع قياسي مقبولة، ومدخلات RoleMap غير المُستخدَمة لا تُحكَم عليها أبداً - مساعدات جديدة:
PdfUaIsStandardStructType، وPdfReadRoleMapPairs(مع فك ترميز هروب PDF للاسم#hh)، وValidatePdfUaRoleMapUsageللاستخدام المباشر
Version 1.81.0
تمت الإضافة
- يغطي التحقق من PDF/UA الآن وسم قوائم ISO 32000-1 المطلوب وفق ISO 14289-1 §7.6:
pvuaiListStructureInvalidيُشير إلى عناصر LI خارج حاوية L وأجزاء Lbl/LBody خارج عنصر LI، مع قبول القوائم المتداخلة والاستخدام المشروع لـ Lbl داخل عناصر Note وBibEntry
Version 1.80.0
تمت الإضافة
- يغطي التحقق من PDF/UA الآن وسم جداول ISO 32000-1 المطلوب وفق ISO 14289-1 §7.5:
pvuaiTableStructureInvalidيُشير إلى خلايا TH/TD خارج صف TR وصفوف أو مجموعات صفوف خارج حاوية Table الخاصة بها، وpvuaiTableHeaderMissingScopeيُشير إلى خلايا الرأس التي لا يمكن تحديد علاقتها لا عبر سمة Scope ولا عبر ارتباط Headers/ID، وpvuaiTableHeadersUndefinedIdيُشير إلى مراجع Headers في مستندات لا تُعرّف أي معرّفات عناصر بنية - تُعرض عبر
TPdfStructureElementسمات الجدول:Scope، وHasHeaders، وHeadersIds، وColSpan، وRowSpan، يتم حلّها أثناء مسح شجرة البنية
تم التغيير
- يقرأ مسح شجرة البنية الآن جميع سمات التخطيط والجداول في تمريرة واحدة على قواميس سمات كل عنصر بدلاً من تمريرة واحدة لكل سمة
Version 1.79.1
تمت الإضافة
- تم نقل نموذج
AnnotationsLabإلى Lazarus و C++Builder، لينضم إلى نموذج وحدة تحكم Delphi الحالي
تم الإصلاح
- يمكن أن يثير
TPdf.CreateAnnotationرسالة “لا يمكن تعيين نقاط المرفقات” للتعليقات التوضيحية للعلامات التي تستخدم النقاط الرباعية (تمييز، تسطير، يتوسطه خط، خط متعرج) لأن التعليق التوضيحي الجديد لم يكن به فتحة رباعية بعد لاستبدالها؛ وهو الآن يلحق الرباعية الأولى بدلاً من ذلك
Version 1.79.0
تمت الإضافة
- نموذج وحدة تحكم Delphi الجديد
AnnotationsLab: ينشئ تعليقات توضيحية من نوع نص، تمييز، مربع ودائرة، ويكتبها في ملف PDF، ثم يعيد تحميل الملف ويسرد قائمة التعليقات التوضيحية للصفحة
Version 1.78.0
تمت الإضافة
TPdf.MeasureTextوTPdf.MeasureTextWidthالجديدان: قياس العرض والارتفاع المعروضين لسلسلة نصية لخط وحجم معينين (وحدات مستخدم PDF، وحدة واحدة = 1/72 بوصة) دون إضافة محتوى إلى صفحة، مما يجعل منطق التخطيط والتفاف الكلمات ممكناً فوقAddText؛ متوفر بواسطة وحدةFPdfMeasureالمستقلة كمساعد فئةTPdf.WrapTextالجديد: التفاف الكلمات الجشع المبني علىMeasureTextWidthوالذي يقسم النص عند المسافات ويحزم الكلمات في أسطر لا يتجاوز عرضها عرضاً معيناً (وحدات مستخدم PDF)؛ تحصل الكلمة المفردة الطويلة جداً على سطر خاص بها (لا يوجد كسر داخل الكلمة)، ويعيد الأسطر الملتفة كمصفوفة
Version 1.77.0
تمت الإضافة
- اكتسب
ValidatePdfAثلاث قيم جديدةTPdfAValidationIssueتغطي البنود التي تم تصنيفها سابقاً على أنها “لا” أو “سلوك القارئ” من خلال تدقيق الفجوة السابق (أرقام ترتيبية ملحقة، القيم الموجودة دون تغيير):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — حرف يحل إلى Unicode 0 دون خطأ في التعيين، وهو عَرَض وقت التشغيل لمرجع صورة رمزية.notdef؛ تم اكتشافه عبر طبقة نموذج كائن Pdfium)، وpvaiWordBreakMissing(المستوى أ 6.8.3.2 — سلسلة عرض دفق المحتوى أطول من 20 حرفاً بدون مسافة، وهو انتهاك محتمل للكلمات المدمجة؛ استدلال تقريبي يتجنب الإيجابيات الخاطئة لـ CJK)، وpvaiLinkActionMissingTarget(6.6.3 — إجراء GoToR/URI/SubmitForm يفتقد مفتاح هدف العرض الخاص به حتى لا يتمكن القارئ من تقديمه)
Version 1.76.0
إضافة (Added)
- حصلت
ValidatePdfAعلى ثلاث قيم جديدة من نوعTPdfAValidationIssue(أُلحقت بها الأرقام الترتيبية، وظلت القيم الحالية دون تغيير):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — رمز/BaseFontأو/FontNameيحتوي على بايتات ≥ 0x80 لا تشكل UTF-8 صالحًا)، وpvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — صورة مضمنة في مجرى محتوى الصفحة تستخدم مرشح LZW أو Crypt)، وpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — خط TrueType غير رمزي يحتوي قاموس التشفير (Encoding) الخاص به على/Differences)
Version 1.75.0
إضافة (Added)
- اكتسب
ValidatePdfAثلاث قيمTPdfAValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — رمز رقمي يتجاوز حد العدد الصحيح ذي الإشارة 32 بت 2,147,483,647)،pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — قيمة/BMخارج مجموعة وضع المزج القياسية لـ ISO 32000-1 §11.3.5؛ وتُكملpvaiTransparentColorSpaceالخاصة بـ PDF/A-1 والتي تسمح فقط بـ Normal/Compatible)، وpvaiHexStringOddDigits(6.1.6 — سلسلة سداسية عشرية<...>مع عدد فردي من الأرقام السداسية العشرية)
Version 1.74.0
إضافة (Added)
- اكتسب
ValidatePdfAثلاث قيمTPdfAValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvaiPermissionsViolation(6.1.12 — قاموس/Permsيحمل/DigestLocation، أو/DigestMethod، أو/DigestValueإلى جانب/DocMDP)،pvaiTransActionForbidden(PDF/A-2 6.5.1 — إجراء الانتقال Trans، والذي يتم اكتشافه عبر نمط قاموس الإجراء/S /Transلتجنب المطابقة الخاطئة لـ/Transparency)، وpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — كائن صفحة يحمل شفافية حقيقية وفقًا لـFPDFPageObj_HasTransparency، مما يوسع طبقة نموذج كائن Pdfium المُقدمة في v1.73.0 لالتقاط تأثيرات وضع المزج/القناع الناعم التي يمكن أن يفوتها مسح الأسماء على مستوى البايت)
Version 1.73.0
إضافة (Added)
- يضع
TPdf.ValidatePdfAالآن طبقة مسح لنموذج كائن Pdfium فوق فاحص مستوى البايت: حيث يمر على كائنات النص في كل صفحة عبرFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedويبلغ عن الخط المصيّر غير المضمن كـpvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4)، ويحمل كل صفحة نصية لمسحFPDFText_HasUnicodeMapErrorويبلغ عن تعيين Unicode المكسور كـpvaiPdfiumUnicodeMapError(6.3.8). هذه فحوصات لا يمكن لفاحص مستوى البايت القيام بها — فهو يرى فقط رموز الأسماء، وليس مقابض الخطوط المحلولة أو حالة التعيين لكل حرف — ويتم دمجها في نتيجة مستوى البايت. تظل دالةValidatePdfAComplianceالمستقلة على مستوى البايت دون تغيير
Version 1.72.0
إضافة (Added)
- اكتسب
ValidatePdfAخمس قيمTPdfAValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — يجب ألا يحمل الكتالوج/NeedsRendering)،pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — يجب ألا يحمل OutputIntent/DestOutputProfileRef)،pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — يجب أن تحمل مواصفة الملف التي تحتوي على/EFأيضًا/UF)،pvaiXmpPacketBytesAttr(6.7.5 — يجب ألا تحمل ترويسة حزمة XMP السمة المهملةbytes=أوencoding=)، وpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — بت التعليق التوضيحي/Fلـ ToggleNoView، القيمة 512، محظور)
Version 1.71.0
تغيير (تغيير (Changed))
- يُطلق
ValidatePdfUaالآنpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): يحلل متصفح شجرة البنية سمة التخطيطListNumberingعلى كل عنصرLعبر واجهة برمجة تطبيقات سمات Pdfium ويضع علامة على أي قيمة خارج مجموعة ISO 32000-1 Table 347 (Decimal،UpperRoman،LowerRoman،UpperAlpha،LowerAlpha،None،Circle،Disc،Square). لا يتم وضع علامة على السمة المفقودة، حيث قد تكون القائمة غير مرتبة؛ وهذا يغلق آخر فجوة متبقية في ISO 14289-1 تم تسجيلها في نهاية الجولة 5.
Version 1.70.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfUaأربع قيمTPdfUaValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — يجب أن تعلن مجموعة فرعية CIDFontDescriptorعن/CIDSet)،pvuaiToUnicodeForbiddenValue(7.21.7 — يجب ألا تقوم ToUnicode CMap بتعيين أي رمز إلىU+FEFFأوU+FFFE؛ يتم فحص التدفقات غير المضغوطة بحثًا عن نماذج الإخراج<FEFF>/<FFFE>)،pvuaiLangInvalidFormat(7.2 — يجب أن يكون/Langعلامة RFC 1766 / BCP 47 صالحة؛ تقبل القواعد النحوية المتساهلةen،en-US،zh-Hans،es-419وتضع علامة على القيم غير المتوافقة بوضوح)، وpvuaiOrderedListMissingListNumbering(7.6 — تم الاحتفاظ بها لاكتمال واجهة برمجة التطبيقات؛ لم يتم إطلاقها بعد بواسطة المدقق لأن التمييز الموثوق بين القوائم المرتبة وغير المرتبة يحتاج إلى قيمة سمةListNumbering، والتي لا يعرضها متصفح شجرة البنية).
Version 1.69.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfUaقيمتينTPdfUaValidationIssueجديدتين (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — يجب أن يكون عنصر بنية Widget متداخلاً داخل عنصرForm؛ يتحقق متصفح شجرة البنية الآن من نوع الوالد المباشر لكل Widget) وpvuaiSubsetMissingCharSet(7.21.4.2 — يجب أن تعلن مجموعة فرعية من النوع 1FontDescriptorعن/CharSet، والتي يتم تحديدها بواسطة بادئة اسم المجموعة الفرعية+المكونة من ستة أحرف على/FontName).
Version 1.68.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfUaقيمتينTPdfUaValidationIssueجديدتين (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — يجب ألا يحمل قاموس إجراءات URI/IsMapبقيمةtrue، لأنه يعطل هدف الارتباط القابل للوصول) وpvuaiHeadingSequenceViolation(7.4.2 — يجب أن تبدأ العناوين المرقمة بـH1ويجب ألا يتخطى التسلسل التنازلي مستوى متداخل، على سبيل المثالH1→H3يعد انتهاكًا). فحص العناوين هو أول قاعدة PDF/UA على مستوى شجرة البنية في المدقق: يقومValidatePdfUaStructureElementsالآن بتصفح قائمة العناصر المكتوبة ويتحقق من تسلسلH1…H6(وH7+وفقًا لـ 7.4.3) بترتيب المستند.
Version 1.67.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfUaخمس قيمTPdfUaValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — يجب أن يحمل التعليق التوضيحي Link وصفًا بديلاً عبر/Contents)،pvuaiAnnotationMissingContents(7.18.1 — يجب أن يحتوي أي تعليق توضيحي غير معفى بدون/Contentsعلى وصف بديل؛ يتم استثناء Popup و Widget)،pvuaiEmbeddedFileMissingName(7.11 — يجب أن يحتوي قاموس مواصفات الملف على/Fو/UF)،pvuaiMediaClipMissingAlt(7.18.6.2 — يجب أن يحتوي قاموس بيانات مقطع الوسائط على/CTو/Alt)، وpvuaiCidFontMissingCidToGidMap(7.21.3.2 — يجب أن يحتوي CIDFont المضمن من النوع 2 على/CIDToGIDMap).
Version 1.66.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfUaخمس قيمTPdfUaValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvuaiRoleMapMissing(ISO 14289-1 7.1 — يجب أن يحمل المستند الموسوم بأنواع بنية غير قياسية/RoleMap)،pvuaiOptionalContentAsKey(7.10 — يجب ألا يحمل قاموس تكوين المحتوى الاختياري مفتاح الحالة التلقائية/AS)،pvuaiXfaPresent(7.15 — يتم وضع علامة على وجود AcroForm/XFAلأن XFA الديناميكي محظور)،pvuaiTrapNetAnnotation(7.18.2 — التعليقات التوضيحية/TrapNetمحظورة)، وpvuaiReferenceXObject(7.20 — كائنات Reference XObjects، التي تعتمد على علامة/Ref، محظورة).
إصلاح (إصلاح (Fixed))
- لم يعد
ValidatePdfUaيعطي نتائج إيجابية خاطئة لـpvuaiEncryptionPresentعلى كل ملف مشفر: يسمح PDF/UA بالتشفير طالما أن مفتاح/Pفي قاموس التشفير يحتوي على الموضع البت 10 (القيمة 1024) مضبوطًا، مما يمنح وصول التكنولوجيا المساعدة (7.16). يتم الآن الإبلاغ عن الانتهاك الدقيق عبرpvuaiEncryptionPBitMissingالجديد؛ تم الاحتفاظ بـpvuaiEncryptionPresentفي التعداد من أجل توافق واجهة برمجة التطبيقات ولكنه لم يعد يُطلق بواسطة المدقق على مستوى البايت.
Version 1.65.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfAخمس قيمTPdfAValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — يجب أن يحمل CIDFont المضمن من النوع 2/CIDToGIDMap)،pvaiSubsetMissingCharSet(6.3.5 — يجب أن يحملFontDescriptorلمجموعة فرعية من النوع 1/CharSet)،pvaiSubsetMissingCidSet(6.3.5 — يجب أن يحملFontDescriptorلمجموعة فرعية CID/CIDSet)،pvaiWidgetActionForbidden(6.6.1 — يجب ألا يحمل التعليق التوضيحي Widget/Aأو/AA)، وpvaiOptionalContentAsKey(ISO 19005-2 6.9 — يجب ألا يحمل قاموس تكوين المحتوى الاختياري مفتاح الحالة التلقائية/AS، ذو صلة حديثًا لأن PDF/A-2 يسمح بالمحتوى الاختياري).
Version 1.64.0
إضافة (إضافة (Added))
- اكتسب
ValidatePdfAثماني قيمTPdfAValidationIssueجديدة (تم إلحاق الترتيب، ولم تتغير القيم الحالية):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — يجب أن يُتبع العنوان%PDF-x.yبتعليق%مع أربعة بايتات على الأقل أكبر من 127)،pvaiExternalStreamRef(6.1.7 — يجب ألا يحمل قاموس التدفق/F،/FFilterأو/FDecodeParms)،pvaiOutputIntentScheme(6.2.2 — يجب أن يكون OutputIntent/Sهو/GTS_PDFA1)،pvaiInfoXmpDateMismatch(6.7.3 — يجب أن يظهر أيضًا InfoCreationDate/ModDateكـxmp:CreateDate/xmp:ModifyDate)،pvaiMarkInfoMissing(6.8.2.2 — يتطلب المستوى A/MarkInfoمع/Marked true)،pvaiAnnotationApDictViolation(6.5.3 Cor.2 — يجب أن يحتوي قاموس/APللتعليق التوضيحي على/Nفقط)،pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — يجب أن تحمل كل مواصفة ملف مرتبطة/AFRelationship)، وpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — يجب أن تعلن صورة JPEG2000 عن مكونات 1 أو 3 أو 4).
إصلاح (إصلاح (Fixed))
- لم يعد
ValidatePdfAيعطي نتائج إيجابية خاطئة لـpvaiAnnotationFlagsViolationفي المستندات التي تستخدم اسم مورد خط بحرف واحد مثل/Font << /F 5 0 R >>؛ يعتمد فحص علامة/Fالآن على سياق التعليق التوضيحي (/Subtypeلنوع التعليق التوضيحي)، بما يتطابق مع السلوك الموثق (6.5.3). - يُبلغ
ValidatePdfAالآن عن متطلبات الملفات المرتبطة بـ PDF/A-3 لكل ملف: يتم وضع علامة على المستند فقط عندما يفتقر/Type /Filespecالمضمن الذي يشير إلى تدفق مضمن عبر/EFإلى/AFRelationship، بدلاً من فحص المستند بالكامل السابق أي-أو-لا-شيء (ISO 19005-3 Annex E.2). - تمت إضافة الإجراء
/SetStateالمهمل إلى مجموعة الإجراءات المحظورة إلى جانب/SetOCGState، بحيث يتم التقاط اسم إجراء PDF Reference مباشرة (6.6.1).
Version 1.63.0
مضاف (إضافة (إضافة (Added)))
- تمت إضافة
TPdf.MeasureTextوTPdf.MeasureTextWidth: تقيسان عرض وارتفاع نص معيّن مع خط وحجم محددين دون إضافة محتوى إلى الصفحة (بوحدة مستخدم PDF، 1 وحدة = 1/72 بوصة)، مما يتيح حسابات التخطيط والتغليف التلقائي فوقAddText; يوفره الوحدة المستقلةFPdfMeasureك class helper
تغييرات (تغيير (تغيير (Changed)))
- تم تحسين
Demo\Delphi\MergePDFوDemo\CBuilder\MergePDFوDemo\Lazarus\MergePDFلجميع بيئات IDEs الثلاث: تحديد نطاق صفحات لكل ملف، مسار إخراج اختياري، إزالة التكرار، سجل التشغيل، زر إلغاء وملخص الدمج; تُستورد الإشارات المرجعية والبيانات الوصفية من المصدر الأول - تتضمن عروض
CreatePDFلجميع بيئات IDEs الثلاث الآن خيار «نص أوروبي» لكتابة نص منقوط بالتشكيل بالتشيكية والفرنسية والألمانية والإسبانية والبرتغالية والبولندية والتركية، للتحقق من اختيار الخط ومعالجة Unicode (تم دمج مثالEuropeanTextالسابق) - تم حذف مثالي
ExtractTextPagesوEuropeanText: ميزة استخراج النص صفحةً بصفحة منExtractTextPagesباتتت مغطاة بخياري نطاق الصفحات والفاصل فيExtractText; العرض متعدد اللغات لـEuropeanTextأدمج فيCreatePDF
Version 1.62.2
إصلاحات (إصلاح (إصلاح (Fixed)))
- أُعيد توليد ترويسات C++Builder (
.hpp) لكل إصدار ومنصة من RAD Studio (Win32/Win64/Win64x)؛ فقد انحرفت عن مصادر Pascal، وخلّفت توقيعات دوال قديمة ووحدات مفقودة وصلت إلى مستخدمي C++Builder عبر توزيع المصدر
Version 1.62.1
إصلاحات (إصلاح (إصلاح (Fixed)))
- أُعيدت إمكانية ترجمة المصدر على RAD Studio 12 Athens والإصدارات الأقدم: كان تعيين
TArray<Byte>في مسار التحقق من PDF/UA يستخدم تحويل مصفوفة ضمني خاصًا بـ Delphi 13، وهو ما فشل في الترجمة على IDE أقدم
Version 1.62.0
إضافات (إضافة (إضافة (Added)))
TPdf.RenderPageThumbnailيعرض أي صفحة بحسب الفهرس إلى صورة نقطية ملائمة لنسبة الأبعاد من دون تغيير الصفحة الحالية للمستند أو الصفحة المحملة أو إطلاقOnPageChange
إصلاحات (إصلاح (إصلاح (Fixed)))
TPdfThumbnailViewلم يعد يقودPageNumberالخاص بالمستند المضيف أثناء الرسم؛ فكانت كل إعادة رسم سابقًا تعيد تحميل الصفحات وتطلقOnPageChangeوتتخلص من صفحة النص، وهو ما قد يربكTPdfViewالمرتبط ويؤدي إلى حلقات إعادة رسم. الآن تُعرض الصور المصغرة عبرRenderPageThumbnailمن دون هذه الآثار الجانبية- يعاين التحقق من توافق PDF/X الآن المستندات ذات تدفقات المراجع المتقاطعة (PDF 1.6، وهو النمط الشائع في PDF/X-4) والكائنات المخزنة داخل تدفقات الكائنات المضغوطة، بدلًا من اعتبار هذه الملفات كلها غير متوافقة؛ ويُقرأ الوسم
GTS_PDFXVersionمن XMP بصيغة العنصر وبصيغة سمة RDF معًا - يعرض التحقق من PDF/R الآن
pvriInfoXmpMismatchعندما يختلف Info dictionary و XMP على Producer أو Creator؛ وكانت المشكلة معلنة سابقًا لكنها لم تكن تُثار أبدًا - تُتبع مؤقتات تعبئة النماذج لكل طلب، لذا يحتفظ المستند الذي يشغل عدة مؤقتات في الوقت نفسه، مثل interval JavaScript إلى جانب وميض مؤشر الحقل، بها كلها بدل فقدان كل المؤقتات ما عدا الأحدث
- أصبح رسم
TPdfViewوطرائقه العامةRenderPage/RenderTileيمسكان قفل التصيير الخاص بالمستند، فيتسلسل ذلك مع التصيير في خيط العمل لنفسTPdf(PDFium ليس آمنًا مع تعدد الخيوط) - يُرمَّز النص غير ASCII المكتوب في بيانات PDF/X وPDF/R وPDF/VT الوصفية (أسماء شرط OutputIntent وCreator وProducer) الآن كسلسلة UTF-16BE وفق ISO 32000-1 §7.9.2.2 بدلًا من UTF-8 الخام، وهو ما كان القارئ المتوافق سيقرأه بشكل خاطئ
- تقرأ مساعدات التوافق الآن تدفقات البيانات الوصفية المضمنة التي تكون
/Lengthفيها مرجعًا غير مباشر بشكل صحيح، وتحمّل البايتات المصدرية باستخدامReadBufferبحيث يفشل القراءة القصيرة بشكل سليم، وترفض إزاحةstartxrefالسالبة بدلًا من المخاطرة بقراءة خارج النطاق
Version 1.61.0
تغييرات (تغيير (تغيير (Changed)))
- تم تصحيح تعاريف FFI/ABI، وقد يتطلب ذلك إعادة ترجمة الشيفرة التي نفّذت النداءات الراجعة المتأثرة: فأصبح نداء
FFI_OpenFileالخاص بتعبئة النماذج يحمل الآنcdecl(اتفاقية مكدس Win32)، وأصبح معاملvalueفيFPDFAnnot_SetStringValueوFPDFAttachment_SetStringValueهوFPDF_WIDESTRING(UTF-16LE) ليتطابق مع ترويسات PDFium - تأخذ نداءات التحميل التدريجي
FX_FILEAVAIL.IsDataAvailوFX_DOWNLOADHINTS.AddSegmentالآن إزاحات من نوعsize_t، ويصبحsize_tبعرض المؤشر على Free Pascal / Lazarus Win64 بعد أن كان يُقص إلى 32 بت، مما يصلح استدعاءات API الخاصة بتوافر البيانات وoutsize_tعلى FPC Win64
إصلاحات (إصلاح (إصلاح (Fixed)))
- سلامة الذاكرة: حدوث use-after-free لمؤقت تعبئة النماذج عند تدمير
TPdfمع مؤشر AcroForm نشط؛ وحدوثFPDF_CloseDocumentمزدوج في مسار الخطأ الخاص بـImportNPagesToOne؛ وهروب استثناءات Pascal من نداءاتFPDF_FILEWRITE/FPDF_FILEACCESSعبر حد C أثناء الحفظ وإدراج JPEG؛ وفائض عددي صحيح في استخراج النص عند القراءة من فهرس بداية إلى نهاية الصفحة - يسلّم
TPdfFuture<T>الآن نداء نتيجةه بصورة موثوقة؛ فقد كانت الاستجابة سابقًا تُهمل غالبًا وقد تلامس خيطًا محررًا لأن العامل كان يحرر نفسه قبل تنفيذ الاستجابة المصفوفة - تكتب مخرجات PDF/A وPDF/X وPDF/E وPDF/R وPDF/VT وPDF/UA الآن إدخالات مرجع متقاطع بطول 20 بايت بالضبط كما يتطلب ISO 32000-1 §7.5.4
- لم تعد عملية إدراج علامات المعايير تدمر القاموس عندما تكون القيمة المحذوفة، مثل
/Trapped، هي آخر إدخال، وهو ما كان يبتلع>>الختامي ويولد كائنًا معطوبًا - تعلن تدفقات ICC الخاصة بـ OutputIntent الآن عن عدد المكونات
/Nالمطلوب في PDF/X وPDF/VT (وهو موجود مسبقًا في PDF/A)؛ كما تُفك تشفير المستندات المصدرية المشفرة قبل إدراج علامات PDF/X وPDF/E وPDF/R وPDF/VT وPDF/UA، فيكون الناتج صالحًا بدلًا من أن يُفسد بصمت - يُصدر BOM الخاص بـ xpacket بصيغة UTF-8 في XMP المتولد كبايتات دقيقة، مما يصلح التلف على تثبيتات Delphi التي ليست صفحة ANSI فيها Latin-1؛ كما تحتفظ ترويسات التحديث التزايدي الآن بمرجع
/Infoالخاص بالمستند - لا يعود
SaveAsمع الضغط يقتطع التدفقات التي تكون/Lengthفيها مرجعًا غير مباشر، كما تستخدم جداول المراجع المتقاطعة المعاد بناؤها الآن إدخالات بطول 20 بايت وأرقام توليد حقيقية وتتخلص من المؤشر/Prevالقديم - تقرأ عملية التحقق من التوافق الآن علامات إصدار XMP بصيغة السمة لـ PDF/E وPDF/X بشكل صحيح، بحيث تُعرَّف ملفات PDF/X-4 المعبأة كسمات، وتطلب المعرف الدقيق
PDF/E-1، وتقرأ تدفقات البيانات الوصفية ذات/Lengthغير المباشر على نحو سليم، ولم تعد تطابق بالخطأ المفتاح/IDأو/StructTreeRootلعنصر بنيوي عند فحص trailer الخاص بـ PDF/UA؛ كما أن إزاحةstartxrefالمشوهة لم تعد تثير خطأ نطاق TPdfThumbnailViewأصبحت الصفحة الأخيرة الآن قابلة للوصول عبر شريط التمرير، وتُستعاد الصفحة الحالية للمستند المضيف بعد رسم الصور المصغرة، كما يُرسل handling الخاص بـ mouse-leave القياسي مرة أخرى- لم تعد خرائط البت الرمادية للصفحات والصور تُعرض بجدول ألوان خاطئ؛ ولم يعد
TPdfViewيبقى مع مرجع معلق عندما يُحررTPdfالخاص به أولًا - تقارير preflight: يُحفظ HTML الآن كـ UTF-8 ليتطابق مع charset المعلن، كما ينتج هروب سلاسل JSON مقاطع
\uصحيحة للأحرف غير ASCII على Free Pascal - بنيات trial: يظهر الآن مربع حوار تذكير trial بدلًا من كتمه قبل أن يُعرض
- يرفض
TPdfStreamAdapterالآن التدفقات الأكبر من 4 GiB بخطأ واضح بدلًا من اقتطاع الطول المرسل إلى PDFium بصمت
Version 1.60.1
تغييرات (تغيير (تغيير (Changed)))
- تعمل عروض AccessibilityReader في Delphi وLazarus وC++Builder الآن على القراءة بصوت عالٍ عبر
TPdfReadingSession؛ إذ تُجمَّع كل صفحة في كتلة منطوقة واحدة بواسطةBuildSpokenTextFromWords، وتغذي مواقع كلمات SAPI الدالةFeedSpokenPosition، وتُقدم الجلسة الصفحات وتقود مؤشر الكلمات في العرض، بدل التنسيق اليدوي الذي كان موجودًا في كل عرض من قبل - أصبح تتبع الكاريوكي على مستوى الكلمة في العروض يعمل أيضًا عندما يكون NVDA هو محرك الكلام؛ إذ تضبط
EstimatePacingإيقاع مؤشر القراءة بحسب زمن الكلام المنقضي، بينما كان NVDA يقرأ بصوت عالٍ من دون أي تتبع للكلمات سابقًا - يعمل الإيقاف المؤقت والاستئناف في العروض الآن مع NVDA أيضًا؛ إذ تعيد
ResumeRestartsChunkنطق الصفحة الحالية من بدايتها عند Resume، بينما يحتفظ SAPI بالإيقاف والاستئناف الأصليين في المكان نفسه
Version 1.60.0
إضافات (إضافة (إضافة (Added)))
- تصيير حي لضعف البصر في
TPdfView؛ إذ تعيد خيارات التصيير الجديدةreInvertوreNightDuotoneتلوين كل بلاطة صفحة مصيّرة، سواء بعكس كامل للألوان أو بلوحة ألوان ليلية ثنائية، قبل رسم طبقات البحث والتحديد والقراءة ومؤشر الكلمات، مما ينقل تحويلات ألوان خرائط البت الحالية إلى العارض التفاعلي لكل من تخطيطات الصفحة الواحدة والصفحتين المتقابلتين؛ ويؤدي تبديل الخيارات إلى إعادة الرسم فورًا - تضبط
NightDuotoneInkوNightDuotonePaperاللوحة الليلية، مع افتراضي نص كهرماني على صفحة سوداء؛ وتفوزreInvertعندما تكون كلتا الخيارتين محددتين
Version 1.59.0
إضافات (إضافة (إضافة (Added)))
TPdfReadingSession؛ مكوّن تنسيق للقراءة بصوت عالٍ محايد تجاه محرك الكلام. يحتفظ بمؤشر الكتلة ومؤشر الكلمة وحالة التشغيل (Play/PlayFrom/Pause/Resume/Stop)، ويتقدم عبر كتلTPdfSpokenTextالمحمّلة عندما يبلغ المضيف عن خمول المحرك عبرTick، ويحوّل إزاحات النص المنطوق إلى أحرف الصفحة، ويقود تلقائيًا مؤشر الكلمات فيTPdfViewالمرفق؛ يربط المضيف أي محرك كلام عبرOnSpeakوأحداث طلب الإلغاء / الإيقاف المؤقت / الاستئناف، لذلك لا تربط المكتبة أي API للكلام بنفسها- يستهلك
FeedSpokenPositionمواقع كلمات المحرك، مثلStatus.InputWordPositionفي SAPI؛ وتضبطEstimatePacingمعEstimatedWordsPerMinuteإيقاع المحركات من دون إشارة موضع؛ وتعيدResumeRestartsChunkنطق الكتلة الحالية للمحركات التي لا تملك إيقافًا مؤقتًا أصليًا - لا تطلق
OnChunkChangeوOnWordChangeوOnFinishedإلا عند حدوث تغييرات حقيقية، كما تنفصل العروض المرفقة المحررة تلقائيًا، لذلك يبقى كود المضيف من دون وميض وآمنًا من التعطل
Version 1.58.0
إضافات (إضافة (إضافة (Added)))
EstimateSpokenWordIndexيقدّر الكلمة التي ينطقها محرك الكلام من الزمن المنقضي ومعدل الكلمات في الدقيقة، مانحًا الكلمات الأطول وقتًا أكبر نسبيًا، بحيث تستطيع المحركات التي لا تبلغ عن موضع الكلمة، مثل NVDA controller client، أن تقود مؤشر القراءة على مستوى الكلمة أيضًا؛ يزوّد المستدعي الزمن المنقضي، لذا تبقى الدالة من دون اعتماد على الساعة وقابلة للاختبار الوحدوي
Version 1.57.0
إضافات (إضافة (إضافة (Added)))
- تجميع النص المنطوق مع تعيين ثنائي المجال لتتبع القراءة بصوت عالٍ: ينشئ
BuildSpokenTextFromWordsوSpokenTextAppendالسلسلة التي تُسلم إلى محرك text-to-speech من صناديق كلمات الصفحة مع تسجيل جدول امتدادات، ويحوّلSpokenToPageCharإزاحة منطوقة يبلغ عنها المحرك، مثلStatus.InputWordPositionفي SAPI، إلى فهرس أحرف الصفحة، بحيث يبقى تتبع التظليل على مستوى الكلمة صحيحًا عندما لا يكون النص المنطوق هو نص الصفحة بالكامل، مثل المناطق المتجاوزة أو القراءة على مستوى الوحدة أو تجاوزات النطق - تحمل الأنواع
TPdfSpokenTextوTPdfSpokenSpanالسلسلة المنطوقة إضافة إلى نطاقات الصفحات المصدر التي بُنيت منها؛ وتُحل الإزاحات على الفواصل المدرجة إلى الكلمة المعينة التالية، بينما تُبلّغ الإزاحات بعد المقاطع المعينة بعدم وجود تطابق
Version 1.56.9
إضافة (إضافة (إضافة (Added)))
Demo\Delphi\PreflightReportيضيف معاينة خطة عمل تلخص المعايير غير المجتازة والأولويات والإجراءات التالية ورموز المشكلات والتوصيات في قائمة مرجعية للإصلاحاتDemo\Delphi\PreflightReportCliيقبلplan/actionplanكصيغة إخراج للتشغيل المنفرد والتشغيل المجمّع، ويكتب نفس قائمة remediation checklist إلى ملف نصي
تغيير (تغيير (تغيير (Changed)))
- تعرض الآن كلا عرضي Demo PreflightReport في Delphi أعداد حالات pass / action / review بجانب إجمالي المعايير والمشكلات
Version 1.56.8
تغيير (تغيير (تغيير (Changed)))
ViewerInteractionLabأصبحت الآن تتضمن عناصر للتحرك بين الصفحات، وعناصر للقرصان اليدوي، وتسجيل الإحداثيات بقاعدة النقر لــDeviceToPage/PageToDevice، وسجل تفاعلات أوضح للتحقق من الاختيار والبحث والدوران والملاحة- صفحات
ViewerInteractionLabفي ملفات readme الآن توثق سير العمل التفاعلي المضاف ضمن مجموعة readme الديمو المحلية
Version 1.56.7
إضافة (إضافة (إضافة (Added)))
AccessibilityWorkbenchCliيربط كل finding مرصود بمعيار WCAG 2.1 Success Criteria وبنطاق بند ISO 14289-1 (PDF/UA-1)، ويعرض قسم coverage في التقارير للمعاييرAccessibilityWorkbenchCliيحسب accessibility score موثّقًا من 0 إلى 100 وفق rubric للعقوبات منشور، ويعرض نطاق excellent / good / needs work / poor، مع عرض منفصل لكل ملف ومتوسط دفعيAccessibilityWorkbenchCliيقبلfailscore=Nلإيقاف التشغيل برمز خروج 2 إذا انخفض أي ملف تحت NAccessibilityWorkbenchCliيكتب سجل SARIF 2.1.0 عندما ينتهي اسم ملخّص الدفعة بـ.sarif، مع قاعدة واحدة لكل نوع finding وتغطية WCAG 2.1 و PDF/UA لالتقاطات CI و code-scanningAccessibilityWorkbenchCliيضيف أمرversionلعرض نسخة PDFiumPas المرتبطة
Version 1.56.6
إضافة (إضافة (إضافة (Added)))
IntakeWorkbenchCliيحسب بصمة SHA-256 للطب الشرعي لكل ملف إدخال (ويعود إلىunavailableفي المترجمات دونSystem.Hash) ويبلّغ عنها في كل الصيغIntakeWorkbenchCliيقبلpasswords=file.txtلفتح مستندات تتطلب كلمة مرور من قائمة المرشحين، مع تسجيل فهرس المرشح المطابق دون تسجيل نص كلمة المرورIntakeWorkbenchCliيقبلcopyto=dirلتوجيه كل ملف تم تدقيقه إلى مجلد فرعي حسب مستوى الخطر، محولًا أداة التدقيق إلى مصنف استقبالIntakeWorkbenchCliيكتب سجل SARIF 2.1.0 عندما ينتهي اسم ملخص الدفعة بـ.sarif، مع قاعدة واحدة لكل علم خطر ونتيجة واحدة لكل ملف معلم بالخطر لالتقاطات CI و code-scanningIntakeWorkbenchCliيضيف أمرversionلعرض نسخة PDFiumPas المرتبطة
Version 1.56.5
إضافة (إضافة (إضافة (Added)))
IntakeWorkbenchCliيستنبط الآن إجراءات لاحقة مقترحة مثل accept و request-password و manual-review و quarantine و deduplicate، ويعرض أعداد الإجراءات في ملخصات الدفعةAccessibilityWorkbenchCliيستنبط الآن إجراءات تصحيح مقترحة مثل pass-through و remediate-tags و run-ocr و remediate-semantics و manual-review، مع أعداد إجراءات مطابقة للدفعة
تغيير (تغيير (تغيير (Changed)))
- تعرض كل ديمو CLI المخصصة للأدوات الإجراء المقترح في مخرجات console و text و HTML و JSON و CSV بحيث يمكن لمشغلي الدفعات توجيه الملفات دون الحاجة لمعالجة بيانات الحالة أو المخاطر بعد التشغيل
Version 1.56.4
إصلاح (إصلاح (إصلاح (Fixed)))
- قراءة التعليقات التوضيحية أو الإشارات المرجعية أو روابط الارتباط في حلقة لم تعد تسبب تسرب نص العناصر السابقة: الآن يتم مسح سجلات النتائج
TPdfAnnotationوTBookmarkوTLinkAnnotationعبر تهيئة تدعم الأنواع المُدارة بدل صفر الذاكرة الخام، لذلك المستندات التي تحتوي كمية كبيرة جدًا من التعليقات النصية لا تضخّم استهلاك الذاكرة طيلة عمر التطبيق - تدمير
TPdfالذي سجّل معالجOnUnsupportedFeatureيفك الآن ارتباطه من استدعاء PDFium العام على مستوى العملية، فلا يمكن لمستند لاحق محمّل عبرTPdfآخر بدون معالج خاص به أن يعيد الإرسال إلى المكون المحرر (use-after-free)
Version 1.56.3
إصلاح (إصلاح (إصلاح (Fixed)))
AccessibilityWorkbenchCliلم يعد يعد الصفحات الفارغة صفحات ترتيب قراءة بالقياس الاستدلالي، لذلك تبقى حالة إمكانية الوصول في الوثائق الموسومة التي تحتوي صفحات فاصلة فارغة صحيحة؛ الصفحات دون محتوى مقروء تُبلغ عنها بشكل منفصل- لم يعد كشف رؤوس الجداول في
AccessibilityWorkbenchCliينسب خلاياTHالتابعة لجدول متداخل إلى الجدول الخارجي، كما أصبحت أسماء حقول النماذج والخطوط تُطابق بحساسية حالة الأحرف حتى لا تندمج الحقول المختلفة - جرد host في URLs عبر
IntakeWorkbenchCliالآن يزيل مقاطع userinfo و query و fragment، لذلك يُسند رابط مزيف مثلtrusted.example@evil.exampleإلى المضيف الحقيقي، وتُسهم أهدافmailto:بنطاقها بدل ألا تكون غير مرئية - تقارير Markdown في
IntakeWorkbenchCliتهرب العلامات العكسية في مسارات ومضيفين وأسماء مرفقات تحت سيطرة المهاجم، فلا يمكن تدمير تنسيق التقرير من داخل مستند
تغيير (تغيير (تغيير (Changed)))
AccessibilityWorkbenchCliيعرض فشل فحص الخطوط وفشل فحص الحقول على عدادات منفصلة، ويعلم الخطوط غير المضمنة التي تمتلك أيضًا حالات مضمنة، ويضع علامة واضحة لنهايات القوائم الطويلة- ملخصات الدفعة في
IntakeWorkbenchCliتضيف عمود عدد تعليقات المرفقات، ويُحدّد تعداد التعليقات لكل صفحة بحد أقصى 20000 تعليق مع الإبلاغ عن الحد في كل صيغة
Version 1.56.2
إضافة (إضافة (إضافة (Added)))
- يفحص
AccessibilityWorkbenchCliالآن تضمين الخطوط، tooltip حقول النماذج، مصدر ترتيب القراءة، مخططات المستند، بنية الجداول والقوائم، النص البديل المشبوه، وتفاصيل مراجعة أغنى لكل صفحة حتى تحدد تقارير accessibility الدفعية مزيدا من أهداف الإصلاح - يعرض
IntakeWorkbenchCliالآن حدود فحص الصفحات، إجراءات launch و remote-go-to، قوائم host URI، أعداد التعليقات التوضيحية، ميزات PDFium غير المدعومة، معرفات المستندات المكررة، وعلامات خطر موسعة للمراجعة الآلية intake
تغيير (تغيير (تغيير (Changed)))
- يقبل
IntakeWorkbenchCliقيمةmaxpages=Nفي وضعي الملف الواحد والدُفعات لتحديد فحص الصفحات لكل مستند مع الاستمرار في إكمال تقارير metadata و attachment و script و XFA و signature و risk
Version 1.56.1
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح تحميل
pdfium.dllأقدم يفتقد تصديرا أحدث يفشل الآن بشكل نظيف: يعيد مسار الفشل تعيين كل نقطة دخول API مرتبطة، لذلك تبلغ فحوصAssigned()(مثلFPDF_GetLastErrorأوFPDF_GetSecurityHandlerRevision) بأن المكتبة غير محملة بدلا من استدعاء الوحدة التي أزيل تحميلها بالفعل والتعطل بسبب انتهاك وصول - يمسح
UnloadLibraryالآن كل ارتباطات PDFium API بدلا من مساعدات V8 الاختيارية فقط، لذلك لا تبقى أي مؤشرات دوال قديمة بعد تحرير DLL
Version 1.56.0
إضافة (إضافة (إضافة (Added)))
- مؤشر قراءة karaoke كلمة بكلمة في
TPdfView: يربطTrackReadingWordAtإزاحة حرف الكلمة الحالية في محرك تحويل النص إلى كلام، مثل SAPIStatus.InputWordPosition، بمربعات كلمات الصفحة، ويميز الكلمة التي تحتويها كطبقة مستقلة فوق كتلة القراءة، ويمررها إلى العرض، ويعيد فهرس الكلمة حتى تضيء الكلمة المنطوقة مع تقدم الصوت SetReadingWordوClearReadingWordيضبطان الكلمة المميزة أو يمسحانها مباشرة منTPdfWordBox؛ إعادة ضبط الكلمة نفسها no-op، لذلك لا يجعل التتبع كلمة بكلمة العرض يومضReadingWordColorوReadingWordFollowيتحكمان في لون مؤشر الكلمة وما إذا كان العرض يمرر الكلمة المنطوقة تلقائيا إلى العرض
Version 1.55.2
إصلاح (إصلاح (إصلاح (Fixed)))
- يعطي ViewerInteractionLab الآن صفوف شريط الأدوات مساحة عمودية أكبر، لذلك لم تعد عناصر Open PDF و Create Sample والتنقل والبحث والتحديد تتداخل عند استخدام خطوط مكبرة
Version 1.55.1
إصلاح (إصلاح (إصلاح (Fixed)))
- يضع ViewerInteractionLab الآن Prev و Next و Rotate في الصف الثاني من شريط الأدوات، مما يتجنب تداخل بدء التشغيل مع Open PDF و Create Sample
Version 1.55.0
إضافة (إضافة (إضافة (Added)))
- جسر بين الكلمة والتحديد لقراءة "اقرأها وحددها": تقوم
TPdfView.SelectWordBoxوSelectWordSpanبتحديد صندوق كلمة واحد أو نطاق صناديق كلمات من الصفحة نفسها (منPageWordBoxes) عبر نطاقات الأحرف الخاصة بها، بحيث يمكن أيضًا تحديد الكلمة أو السطر الجاري قراءته ونسخه WordBoxIndexAtCharIndexيعيد ربط فهرس الحرف بصندوق الكلمة الذي يحتويه، مما يدفع إبراز كلمة بكلمة مع تقدم مؤشر القراءة في محرك TTS
Version 1.54.0
إضافة (إضافة (إضافة (Added)))
- توفر واصلات تعبئة النماذج الصوتية التي تقرأ الحقل المركّز مباشرة من المؤشر المنطقي:
FocusedFormFieldValueوFocusedFormFieldNameوFocusedFormFieldDetailsفيTPdfوTPdfViewتُبلغ عن قيمة الحقل الحالي واسمه المقروء بشريًا، أي تلميح/TUمع الرجوع إلى/T، وكاملTPdfFormFieldInfoمن النوع والأعلام والخيارات، وهو كل ما تحتاجه واجهة صوتية للإعلان عنه عند التنقل عبر نموذج
إصلاح (إصلاح (إصلاح (Fixed)))
FocusedFormFieldValueيقرأ الحقل عبرFocusedFormFieldIndexبدلًا من تركيز pdfium التفاعلي، لذلك تحصل أداة تعبئة النماذج الصوتية على القيمة الصحيحة حتى من دون مؤشر مرئي على الشاشة، بينما يبقىFocusedFormFieldTextالحالي معبّرًا عن تركيز pdfium كما هو
Version 1.53.0
إضافة (إضافة (إضافة (Added)))
- دعم إبراز على مستوى الكلمة: تقوم
TPdf.PageWordBoxesوTPdfView.PageWordBoxesبتقسيم الصفحة إلى سجلاتTPdfWordBox، يحمل كل منها نص الكلمة ونطاق أحرفها ومستطيل إحاطة بإحداثيات الصفحة، بحيث يستطيع قارئ إمكانية الوصول إبراز كل كلمة منطوقة بالتتابع عبر تمرير المستطيل إلىSetReadingHighlight BuildWordBoxesيقسم نص الصفحة إلى سجلات TPdfWordBox تحتوي نص الكلمة ونطاقات أحرف FTextPage
Version 1.52.0
إضافة (إضافة (إضافة (Added)))
- تطبّق مساعدات التصيير لضعف البصر
InvertPdfBitmapوGrayscalePdfBitmapوDuotonePdfBitmapتحويلات لونية موضعية على صورة نقطية معروضة بعمق 32 بت، بحيث يستطيع قارئ إمكانية الوصول عرض الصفحات بصورة معكوسة أو رمادية أو وفق مخطط ثنائي اللون مخصص، مثل خلفية داكنة مع نص فاتح، للمستخدمين ضعاف البصر - يفرض المساعد pf32bit ويحدّث بكسلات ScanLine مباشرة، لذلك يعمل بعد RenderPage أو ToBitmap دون مخزن وسيط إضافي
Version 1.51.0
إضافة (إضافة (إضافة (Added)))
- وحدات قراءة على مستوى الجملة للاستماع المساند: تقوم
TPdf.ReadingUnitsوTPdf.DocumentReadingUnitsوTPdfView.ReadingUnitsبتحويل مجرى المحتوى المقروء إلى سجلاتTPdfReadingUnitمرتبة بحجم الجملة، يحمل كل منها النص المراد نطقه ونوعه الدلالي وصفحته ومستطيلات الإبراز ووسم اللغة، بحيث يستطيع تطبيق قارئ الشاشة التنقل في الصفحة أو المستند كله وحدة منطوقة تلو الأخرى NextReadingUnitOfKindيعثر على TPdfReadingUnit التالي أو السابق الذي يطابق Kind فيه TPdfContentFragmentKind المطلوبBuildReadingUnitsيحوّل أيTPdfContentFragmentsمباشرة إلى وحدات قراءة: تبقى العناوين وأوصاف الأشكال أو النصوص البديلة كاملة، بينما تُقسَّم الفقرات عند حدود الجمل، وتبقى النقاط العشرية محفوظة، ويظل مؤشر القراءة مجرد فهرس يملكه المستدعي
Version 1.50.0
إضافة (إضافة (إضافة (Added)))
- أصبح بإمكان
ValidatePdfAالآن فحص مستندات PDF 1.5+ التي تخزّن الكتالوج أو OutputIntent أو غيرها من القواميس داخل تدفقات كائنات مضغوطة (/Type /ObjStm). تُفكّ ضغط تدفقات الكائنات وتُحلّ الكائنات التي تحملها، فتُقيَّم تلك المستندات بناءً على محتواها الفعلي بدلًا من الإبلاغ عنها بوصفها مفتقرة إلى علامات PDF/A الخاصة بها
Version 1.49.5
إصلاح (إصلاح (إصلاح (Fixed)))
- لم يَعُد
ValidatePdfAيُبلّغ عن غياب وصفpdfaExtension:schemasبوصفه مشكلة. فمخطّط معرّف PDF/A (pdfaid) معروف جيدًا، فلا يشترط لا veraPDF ولا PDF/A-2/-3 وجود وصف لمخطّط امتداد خاص به، وكان وسم غيابه يُبلِّغ خطأً عن كل ملف PDF/A مطابِق من طرف ثالث. أما المستندات التي تنتجها المكتبة نفسها فلا تزال تتضمّن هذا الوصف
Version 1.49.4
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
ValidatePdfAالآن يكتشف مستوى المطابقة عندما يُكتب معرّف PDF/A كسمات XML (pdfaid:part="2") بدلًا من عناصر فرعية، فلم تَعُد المستندات ذات الصيغة السمية يُبلَّغ عنها بمستوى غير معروف. كما يُصحّح هذا سلسلةً من الآثار كان فيها مستوى غير مُكتشَف يجعل الفحوص الخاصة بكل جزء ترتدّ إلى قواعد PDF/A-1 الصارمة، فتَسِم خطأً الملفات المضمّنة والشفافية التي يسمح بها PDF/A-2 وPDF/A-3
Version 1.49.3
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
ValidatePdfAالآن يفحص مستندات PDF 1.5+ التي تكون بيانات cross-reference فيها على هيئة cross-reference stream (ملفات لا تحمل الكلمة المفتاحيةtrailer). فيُقرأ مستوى المطابقة، و/IDالخاص بالمقطورة، وسائر العلامات من قاموس cross-reference stream، فتُقيَّم تلك المستندات بناءً على محتواها الفعلي بدلًا من الإبلاغ عنها بوصفها غير مطابِقة كليًّا
Version 1.49.2
إصلاح (إصلاح (إصلاح (Fixed)))
- لم يَعُد
ValidatePdfAيُبلّغ زورًا عن مشكلة خط غير مضمَّن في المستندات التي تُضمِّن كل خطوطها. فقد كانت الطريقة التجريبية السابقة تقارن عدد رموز/FontDescriptorببرامج الخطوط المضمَّنة، لكن كل خطٍّ مضمَّن يُسهم برمزَي/FontDescriptor(مرجع قاموس الخط إضافةً إلى كائن الواصف)، فكان كل ملف ذي خطوط مضمَّنة يُوسَم خطأً. أما الآن فلا يُبلِّغ الفحص إلا عن مستندٍ يُحيل إلى خطوط دون أن يُضمِّن أي برنامج خطٍّ على الإطلاق، اتساقًا مع التصحيح المقابل فيValidatePdfUa
Version 1.49.1
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح إخراج PDF/A الآن يُقيَّم بوصفه مطابِقًا لـ PDF/A-1b وPDF/A-1a مع veraPDF: إذ يُصرّح الآن تدفق ملف ICC الخاص بـ OutputIntent من نوع sRGB المضمَّن (المُحال إليه عبر
/DestOutputProfile) بعدد المكوّنات المطلوب/N(وهو 3 لملف RGB المدمج)، وفق ما يفرضه ISO 19005-1 6.2.3.2. كانت المستندات التي يُنتجهاSaveAsPdfAتفشل سابقًا في التحقق الصارم لـ PDF/A-1 لأن تدفق ملف الوجهة كان يُسقِط/N؛ وتُشتقّ القيمة من ترويسة ملف ICC، فيتلقّى أيضًا ملفُ CMYK أو Gray الذي يورّده المستدعي العددَ الصحيح
Version 1.49.0
إصلاح (إصلاح (إصلاح (Fixed)))
- لم يَعُد
ValidatePdfUaيُبلّغ زورًا عن غياب تعريف XMP في مستندات PDF المعلَّمة المطابِقة — إذ يُقرأ الآن معرّف PDF/UA (pdfuaid:part) وdc:titleوتواريخ XMP و/IDالخاص بالمقطورة من بايتات المستند الأصلي بدلًا من النسخة المُعاد حفظها، التي تُسقِط تدفق/Metadataالخاص بـ XMP، كما تُسقِط/IDالمقطورة في ملفات cross-reference-stream - تصحيح فحص تضمين الخطوط في
ValidatePdfUaبحيث لا يُبلَّغ بعد الآن عن مستندٍ يُضمِّن كل خطوطه بوصفه ذا خطوط غير مضمَّنة؛ فهو الآن يُشير فقط إلى مستندٍ يُحيل إلى خطوط دون أن يُضمِّن أي برنامج خطٍّ على الإطلاق - أصبح
ValidatePdfUaالآن يقبل عنصر بنيةFormulaيُورَّد نصّه البديل عبرActualTextبدلًا من إدخالAlt(ISO 14289-1 §7.7)، اتساقًا مع قاعدةFigureالقائمة
Version 1.48.0
إضافة (إضافة (إضافة (Added)))
- تحديد نصّي برمجي على
TPdfView: تتيحSelectTextRange(عبر الصفحة ونطاق الأحرف) وSetSelection(عبر نطاقات صريحة لكل صفحة) تحديدَ النص من الشيفرة — مثلًا لقراءة مقطع وإبرازه؛ وتعيد كلتاهما الرسم وتُطلِقانOnSelectionChangeعند تغيّر التحديد. وتقرأSelectionRangesالتحديدَ الحالي كنطاقات أحرف لكل صفحة، بينما تُعيدSelectionRectanglesمستطيلاته بإحداثيات الصفحة لأغراض الإبراز المخصّص أو التمرير إلى الموضع
Version 1.47.0
إضافة (إضافة (إضافة (Added)))
- تنقّل بين حقول النماذج لملء النماذج بالصوت، على كلٍّ من
TPdfوTPdfView:FormFieldTabOrderوFocusedFormFieldIndexوFocusFormFieldوFocusNextFormFieldوFocusPreviousFormFieldوClearFormFieldFocusوFocusedFormFieldText. تنقل هذه الأعضاء مؤشّرَ حقلٍ منطقيًّا عبر حقول widget في الصفحة وفق ترتيب tab (مع الالتفاف عند الطرفين)، فيتسنّى لقارئٍ مساعِد أن يتجوّل في النموذج، ويُعلن عن كل حقل عبرFormFieldInfo[Index].AlternateName(تلميح /TU)، ويملأه عبرFormField[Index] - حدث
TPdfView.OnFormFieldFocusChangeيُطلَق عند تحرّك مؤشّر الحقل (حاملًا فهرس الحقل الجديد، أو -1 عند المسح)
Version 1.46.0
إضافة (إضافة (إضافة (Added)))
- تدفق محتوى للقراءة المسموعة المساعِدة: تُعيد
TPdf.ReadableContentوTPdf.ReadablePageContentوTPdf.DocumentReadableContentوTPdfView.ReadableContentقائمة مرتَّبة من العناصر الدلالية من نوعTPdfContentFragment، يحمل كل عنصر منها النص المنطوق (الحروف الفعلية، أوActualText/Alt للأشكال)، ونوع الجزء (عنوان مع مستواه، فقرة، شكل، عنصر قائمة، خلية جدول، رابط، نص عادي)، واللغة، ورقم الصفحة بادئًا من 1، إضافةً إلى مستطيل الإبراز للكتلة ومستطيلات الإبراز لكل سطر. وتُرتَّب مستندات PDF المعلَّمة خطّيًا وفق ترتيب القراءة المنطقي المستمد من شجرة البنية، بينما ترجع الصفحات غير المعلَّمة إلى ترتيب العرض حتى يتسنّى قراءة أي مستند بصوت مسموع - إبراز قراءة متزامن على
TPdfView: تُبرزSetReadingHighlightوClearReadingHighlightوالخاصية المنشورةReadingHighlightColorالكتلة التي تُقرأ حاليًا، فوق طبقتي إبراز البحث والتحديد - أنواع عامة جديدة:
TPdfContentFragmentوTPdfContentFragmentsوTPdfReadableContentوTPdfContentFragmentKindوTPdfReadingOrderSource، إضافةً إلى الدالة المساعدة الجديدةClassifyStructType
Version 1.45.0
إضافة (إضافة (إضافة (Added)))
- أصبح
ValidatePdfUaيتنقل الآن أيضًا عبر شجرة البنية المعلَّمة النشطة ويُبلّغ عن ثلاث مخالفات محتوى ذات ثقة عالية لا يمكن اكتشافها بالمسح على مستوى البايتات: عنصرFigureلا يحمل إدخال Alt ولا ActualText (ISO 14289-1, 7.3)، وعنصرFormulaبلا سمة Alt (7.7)، وعنصرNoteيفتقر إلى معرّف فريد (7.9). وتظهر ثلاث قيم جديدة من نوعTPdfUaValidationIssueللإشارة إلى هذه الحالات:pvuaiFigureMissingAlt، وpvuaiFormulaMissingAlt، وpvuaiNoteMissingId. يُتخطى التنقل عبر الشجرة في المستندات غير المعلَّمة - أُضيفت دالة مساعدة عامة جديدة
ValidatePdfUaStructureElementsتُطبّق قواعد شجرة البنية على قائمة عناصر مسطّحة (كالتي تُعيدهاTPdf.StructureElements)، مما يتيح تشغيل هذه الفحوصات أو اختبارها وحدويًا دون الحاجة إلى تحميل مستند كامل
Version 1.44.5
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح فحص تضمين الخطوط في
ValidatePdfA(pvaiFontNotEmbedded، ISO 19005-1, 6.3.4) يكتشف الآن أيضًا الخطوط البسيطة غير المضمنة التي لا تحمل/FontDescriptor، وأبرزها الخطوط الـ14 القياسية من نوع Type 1 (كـ Helvetica وTimes وCourier وغيرها) التي يشترط PDF/A تضمينها دون أي إعفاء. في السابق، كان مثل هذا الخط يمر دون أن يُلاحَظ؛ يعدّ الفحص الآن قواميس الخطوط البسيطة (/Type1،/TrueType،/MMType1) ضمن برامج الخطوط المضمنة أيضًا، على غرار إصلاح PDF/UA في 1.44.3
Version 1.44.4
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
ValidatePdfVTيرفض أشجار DPart غير الصحيحة وفق ISO 16612-2 §6.5 عندما يكون/DPartsمصفوفة مراجع مسطحة بدلًا من array of arrays المطلوبة، أو عندما يكرر leaf DPart صفحة/Startكقيمة/Endرغم أن النطاق يحتوي على صفحة واحدة فقط - أصبح
ValidatePdfVTيتحقق من أسماء/NodeNameListكقيم XML NMTOKEN بعد توسيع escape#xxفي PDF name، ولذلك يتم الإبلاغ عن أسماء مستويات الهرمية غير الصالحة عبرpvviMissingDPartRootبدلًا من قبولها كهيكل DPart قابل للاستخدام
Version 1.44.3
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح فحص تضمين الخطوط في
ValidatePdfUa(pvuaiFontNotEmbedded، ISO 14289-1, 7.21.4) يكتشف الآن أيضًا الخطوط البسيطة غير المضمنة التي لا تحمل/FontDescriptor، وأبرزها الخطوط الـ14 القياسية من نوع Type 1 (كـ Helvetica وTimes وCourier وغيرها) التي لا يمنحها PDF/UA أي إعفاء من التضمين. في السابق، كان مثل هذا الخط يمر دون أن يُلاحَظ، وكان بالإمكان الإبلاغ عن مستند يستخدمه على أنه متوافق؛ يعدّ الفحص الآن قواميس الخطوط البسيطة (/Type1،/TrueType،/MMType1) ضمن برامج الخطوط المضمنة أيضًا. وينطبق ذلك عبر ValidatePdfUa
Version 1.44.2
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
ValidatePdfVTيُبقي علامةpdfvtid:GTS_PDFVTVersionالموجودة ولكن غير المعروفة كـpvcUnknownبدلًا من تخفيضها إلىpvcNone. وبذلك تبقى السلاسل غير الصالحة على مستوى الملف مثلPDF/VT-2sقابلة للتمييز عن المستندات التي لا تحمل أي علامة PDF/VT؛ إذ يتم تحديد PDF/VT-2s عبر MIME stream header في ISO 16612-2 Annex A، وليس عبر علامة XMP داخل ملف PDF - أصبح فحص
/DPartRootيتحقق بشكل أكثر صرامة من tree semantics في ISO 16612-2 §6.5: يجب أن يصف/DPartRootNodeو/NodeNameListعمق DPart الفعلي، وأن تشكل DPart parent links شجرة، وأن يكون/Startو/DPartsمتنافيين، وأن يشير/DPartفي كل صفحة إلى leaf DPart الذي يغطيها وبنفس ترتيب depth-first الخاص بـ page tree
Version 1.44.1
إصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
SaveAsPdfVTيكتب الآن Document Part Hierarchy دنيا وفق ISO 16612-2 §6.5 عندما لا يحتوي ملف PDF المصدر على/DPartRootقابل للاستخدام. وتربط الشجرة المُنشأة كل صفحة عبر/DPart، وتحافظ على أي هرمية صالحة موجودة، وتترك بيانات المستلم/DPM الأثرى لسير العمل المستدعي - أصبح
ValidatePdfVTالآن يتحقق من بنية DPart القابلة للاستخدام، ويقرأ قيم XMP الخاصة بـ PDF/VT من سمات RDF ومن نص العناصر، ويفرض الاقتران الدقيق بين PDF/VT وأساس PDF/X: يتطلب PDF/VT-1 أساس PDF/X-4، بينما يتطلب PDF/VT-2 أحد PDF/X-4p أو PDF/X-5g أو PDF/X-5pg - لم يعد
TPdfVTSaveOptions.Conformance = pvc2يكتب علامات PDF/VT-2 غير صالحة في ملف واحد. يقوم writer أحادي الملف بتطبيع الإخراج إلى PDF/VT-1 لأن PDF/VT-2 يتطلب دلالات مجموعة ملفات
Version 1.44.0
إضافة (إضافة (إضافة (Added)))
- يُبلِّغ
ValidatePdfUaالآن أيضًا عن انتهاكات PDF/UA على مستوى المحتوى القابلة للتحقق بايتًا، إضافةً إلى علامات تنسيق الملف: برنامج خط غير مضمَّن (ISO 14289-1, 7.21.4)، وخط يفتقر إلى/ToUnicodeCMap في غياب ترميز خط بسيط معفى (7.21.7)، ومستند يحمل تعليقات توضيحية دون الإعلان عن ترتيب تبويب/Tabs /Sلأي صفحة (7.18.3) - ثلاث قيم جديدة من
TPdfUaValidationIssue—pvuaiFontNotEmbeddedوpvuaiFontMissingToUnicodeوpvuaiMissingTabsOrder— يكشفهاValidatePdfUaوتظهر في تقرير الفحص المسبق. وهي إرشادات تقريبية تُعدّ تلميحات للفحص المسبق لا تحققًا كاملًا وفق ISO 14289-1
Version 1.43.1
إصلاح (إصلاح (إصلاح (Fixed)))
- يُطبِّق
SaveAsPdfUaالآن إدخالات الفهرس الإلزامية وفق ISO 14289-1, 7.1، وهي/ViewerPreferences/DisplayDocTitle trueو/MarkInfo/Marked true/Suspects false، حتى حين يتضمّن المستند المصدر هذه القواميس مسبقًا بقيم ناقصة أو متعارضة. في السابق، كانت العلامات تُحقَن فقط عند غياب القواميس كليًّا، مما كان يُفضي إلى ملف غير مطابق إذا احتوى المصدر مثلًا على/ViewerPreferencesدونDisplayDocTitle، أو على/MarkInfoمع/Marked false - تُحفَظ المفاتيح الموجودة مسبقًا في قاموس
/ViewerPreferencesأو/MarkInfoالمُعرَّف سابقًا، كما يُحلَّل القاموس المُمرَّر كمرجع غير مباشر قبل تطبيق المفاتيح الإلزامية
Version 1.43.0
إضافة (إضافة (إضافة (Added)))
- أصبح
ValidatePdfAالآن يطبّق قواعد PDF/A-2 / PDF/A-3 على الملفات المضمّنة والمرتبطة وعلى نصوص المستوى Level U. ولا تزال الملفات المضمّنة مرفوضة في PDF/A-1؛ أما في PDF/A-3 فيُسَّم أي ملف مضمّن يفتقر إلى المفتاح/AFRelationshipالمطلوب (ISO 19005-3 الملحق E)، بينما تُسمَح مرفقات PDF/A-2 (دون التحقق من مطابقتها الخاصة على نحوٍ تكراري). وتُبلِّغ مشكلة جديدة باسمpvaiUnicodeMappingMissingعن مستند PDF/A-2u أو PDF/A-3u لا تحمل خطوطه تعيين/ToUnicode(ISO 19005-2 6.2.11.7). ولا تزال الشفافية والمحتوى الاختياري يُسَّمان لـ PDF/A-1 فقط
Version 1.42.0
إضافة (إضافة (إضافة (Added)))
- أصبح PDF/A-2 (ISO 19005-2) وPDF/A-3 (ISO 19005-3) مدعومَين الآن في مستويات المطابقة الثلاثة جميعها — a وb وu — عبر
SaveAsPdfAوValidatePdfAوالخاصيةPdfAConformance. ويكتسب التعدادTPdfAConformanceالقيمpac2aوpac2uوpac3aوpac3u(لا يملك PDF/A-1 المستوى Level u). ويكتب الحفظ القيمتين المطابقتينpdfaid:part(2 أو 3) وpdfaid:conformance(A أو B أو U)، مع الإبقاء على نوع OutputIntent الفرعيGTS_PDFA1الذي تحتفظ به ISO 19005-2 للتوافق. ولا يزال طلب Level A يُخفَّض إلى Level B المطابق (لأي جزء) عندما يفتقر المستند إلى البنية الموسومة (tagged) التي يشترطها ذلك المستوى
Version 1.41.0
إضافة (إضافة (إضافة (Added)))
- أصبح
ValidatePdfAالآن يكتشف انتهاكات PDF/A على مستوى المحتوى التي لا يمكن لحقن العلامات إصلاحها، إضافةً إلى العلامات البنيوية التي كان يبلّغ عنها سابقًا: JavaScript وغيره من الإجراءات المحظورة، وadditional-actions (/AA)، والملفات المضمّنة، وLZWDecode، والشفافية (soft masks وtransparency groups)، والمحتوى الاختياري (/OCProperties)، وأنواع التعليقات الفرعية المحظورة (FileAttachment وSound وMovie و3D وScreen)، وAcroForm/NeedAppearances trueو/XFA، والخطوط التي تفتقر واصفاتها إلى برنامج خط مضمّن، وادعاء Level A المقدَّم دون البنية الموسومة (tagged) التي تشترطها ISO 19005-1 6.8. وتنطبق فحوص الشفافية والمحتوى الاختياري والملفات المضمّنة على PDF/A-1 فقط (هذه الميزات مسموح بها في PDF/A-2 وPDF/A-3). تكشف قيمTPdfAValidationIssueالجديدة عن كل حالة؛ أما القيم الموجودة فلم تتغيّر
Version 1.40.3
تم الإصلاح (إصلاح (إصلاح (Fixed)))
- أصبح
SaveAsPdfAالآن يزيل أي تشفير من المستند المصدر قبل إنتاج إخراج PDF/A. تحظر ISO 19005-1 6.1.3 مفتاح/Encryptفي المقطع الخلفي (trailer)، لكن مسار الحفظ كان في السابق يُبقي على معالج الأمان الخاص بالمصدر، لذا كان حفظ مستند مشفَّر بصيغة PDF/A ينتج ملفًا مشفَّرًا وغير متوافق. أصبح الحفظ بصيغة PDF/A الآن يفك تشفير المستند أولًا. أما المستندات غير المشفَّرة فلا تتأثر
Version 1.40.2
تم الإصلاح (إصلاح (إصلاح (Fixed)))
- تم منع
SaveAsPdfAمن إصدار ادعاء زائف بالتوافق مع PDF/A Level A. عندما يُطلب Level A (pac1a) لكن المستند المصدر يفتقر إلى علامات البنية الموسومة (tagged) التي تشترطها ISO 19005-1 6.8 — وجود/StructTreeRootفي الفهرس وقاموس/MarkInfoيتضمن/Marked true— يُعرَّف الملف المحفوظ الآن على أنه Level B المطابق (pdfaid:conformance=B) بدلًا من تأكيد Level A. أما إخراج PDF/A-1b المرئي البحت فلا يتأثر
Version 1.40.1
تم الإصلاح (إصلاح (إصلاح (Fixed)))
- تم تشديد التحقق من توافق إصدار PDF بحيث يُعدّ إجراء
SetOCGState(set-optional-content-group-state) ميزةً من ميزات PDF 1.5. أصبح الحفظ إلى هدف PDF 1.2 أو 1.3 أو 1.4 يحتوي على إجراءSetOCGStateمرفوضًا الآن ليتوافق مع ISO 32000-1 (Table 198)؛ في السابق كان من الممكن أن يمر مثل هذا الإجراء إلى مخرجات ذات إصدار أدنى. أما إجراء PDF 1.2 المتمايز والمتقادمSetStateفلا يزال مقبولًا اعتبارًا من PDF 1.2 فصاعدًا
Version 1.40.0
إضافة (إضافة (إضافة (Added)))
- تم ربط واجهة برمجة التطبيقات الأولية (upstream)
FPDFPageObj_AddExistingMark()، التي تُرفق علامة محتوى موجودة بكائن صفحة. عندما تشترك كائنات صفحة متتالية في العلامة نفسها، يدمجها ملف PDF المحفوظ في علامة واحدة تشملها جميعًا؛ أما الكائنات غير المتتالية فتحصل كل منها على نسخة مستقلة - تم ربط واجهة برمجة التطبيقات الأولية (upstream)
FPDFTextObj_SetFontSize()لتغيير حجم النقطة لكائن نص موجود، بما يكمّل الربط الموجودFPDFTextObj_GetFontSize()
تغيير (تغيير (تغيير (Changed)))
- تم تحديث مكتبات DLL الخاصة بزمن تشغيل PDFium المرفقة (Win32 وWin64، الإصدارات القياسية وإصدارات V8) إلى لقطة upstream بتاريخ 2026-06-02
Version 1.39.53
تغيير (تغيير (تغيير (Changed)))
- تم تغيير أمثلة Delphi
PDFViewerوSplitViewوMultiPageViewerلفتح المستندات في وضعZoom to Pageافتراضياً - يعرض التصيير الأولي الآن الصفحة كاملة داخل مساحة العارض قبل أن يختار المستخدم مستوى تكبير يدوياً
- تم تحديث
TPdf.AboutInfoوبيانات تعريف حزمة Lazarus وبيانات تعريف إصدار المثبت للإبلاغ عن 1.39.53
Version 1.39.52
تغيير (تغيير (تغيير (Changed)))
- تم تحسين
Demo\Lazarus\CreatePDFبحيث ينشئ مثال البداية الآن ملف PDF من صفحتين يحتوي على vector paths وtable content وembedded image وtext annotation وrotated text وdocument-building walkthrough أوضح - تمت إضافة صفحات
README.htmlمصقولة لكل مجلد demo في Delphi وC++Builder وLazarus، واستبدال README النصي المتبقي بدليل قابل للقراءة في المتصفح - تم تحديث
TPdf.AboutInfoوبيانات Lazarus package metadata وinstaller version metadata إلى 1.39.52
Version 1.39.51
- تم تحسين ملخصات الدُفعات في
Demo\Delphi\PreflightReportCliبإجماليات standard status لنتائج Pass وAction required وReview عبر selected standards - تتضمن per-file rows الآن action-required count وreview count في ملخصات TXT / HTML / JSON / CSV، مما يسهل فحص CI artifacts بدون فتح كل generated report
- تم تحديث
TPdf.AboutInfoوبيانات Lazarus package metadata وinstaller version metadata إلى 1.39.51
Version 1.39.50
- تم تحسين وضع الدُفعات حسب المجلد في
Demo\Delphi\PreflightReportCliبحيث يقومbatchdir=folderبجمع PDF paths المكتشفة وفرزها ثم إنشاء التقارير بترتيب ثابت - أصبحت عمليات recursive directory scans تنتج report order وsummary rows قابلة للتكرار، بينما يستمر
batch=list.txtprocessing الصريح في الحفاظ على list file order - تم تحديث
TPdf.AboutInfoوبيانات Lazarus package metadata وinstaller version metadata إلى 1.39.50
Version 1.39.49
- تم تحسين ملخصات الدُفعات في
Demo\Delphi\PreflightReportCliلتسجيل run settings: نوع المصدر، مسار المصدر، حالة recursive، مجلد الإخراج، report format، selected standards، ووضعfailon= - تتضمن ملخصات JSON الآن كائن
run، وتعرض ملخصات TXT و HTML قسم run settings، وتكرر CSV rows أعمدة audit نفسها لاستخدامها في الجداول و CI pipelines - تم تحديث
TPdf.AboutInfoوبيانات Lazarus package metadata وinstaller version metadata إلى 1.39.49
Version 1.39.48
- تم تحسين batch output naming في
Demo\Delphi\PreflightReportCliبحيث لا تقوم duplicate input file names التي تشترك فيoutdir=واحد بالكتابة فوق generated reports لبعضها - تضيف Batch runs الآن اللاحقات
-2و-3وما بعدها عندما يكون generated report path قد تم تعيينه بالفعل في نفس التشغيل، وتسجل summaries مسار collision-safe report path النهائي - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.48
Version 1.39.47
- تم تحسين batch summaries في
Demo\Delphi\PreflightReportCliبحيث تتضمن مخرجات TXT و JSON الآن aggregate totals لـ total files و processed files و failed files و issues وfailon=matches - تبقى CSV summaries كـ row table صافية من أجل consumers الحاليين، بينما تستمر HTML summaries في عرض نفس aggregate metrics داخل dashboard header
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.47
Version 1.39.46
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةsummary=batch.html/.htmبحيث يمكن لـ batch runs إخراج browser-readable dashboard إلى جانب TXT / CSV / JSON manifests - تعرض HTML summaries مقاييس total و processed و failed و issue و
failon=match، ثم تسرد كل input مع report links و status و counts و error text - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.46
Version 1.39.45
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةbatchdir=folderوrecursiveبحيث يمكن لـ scripts فحص PDF folders مباشرة من دون كتابة list file أولاً - يعيد Directory batch mode استخدام سلوك
outdir=وsummary=وstandards=وfailon=من list-based batch mode؛ ويفحص non-recursive الـ folder المحددة فقط، بينما يتضمنrecursiveالـ subfolders - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.45
Version 1.39.44
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةsummary=batch.csv|json|txtحتى تتمكن batch runs من إخراج machine-readable manifest بجانب per-file reports - تتضمن Batch summaries كل input path و report path و status و standard count و passed count و issue count وحالة تطابق
failon=و error text لاستخدامها في CI jobs و scripts خارجية - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.44
Version 1.39.43
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةbatch=list.txtوoutdir=reportsحتى تتمكن scripts من إنشاء preflight reports لقائمة من PDF files في تشغيل واحد - يتجاوز Batch mode الأسطر الفارغة وأسطر التعليقات
#، ويشتق كل report name بصيغة.preflight.<ext>من PDF الإدخال، ويتابع بعد per-file errors، ثم يعرض ملخص processed و failed files قبل الرجوع - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.43
Version 1.39.42
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةfailon=none|issues|action|reviewبحيث تستطيع CI jobs تحويل preflight results الناتجة إلى exit codes حتمية - تعيد CLI الآن exit code 2 عند تطابق
failon=rule المحددة بعد إنشاء report file و optional attached-report PDF، بينما تستمر runtime errors في إعادة exit code 1 - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.42
Version 1.39.41
- تم تحسين
Demo\Delphi\PreflightReportCliبإضافةattach=output.pdfبحيث يمكن تضمين preflight report الناتج كـ document-level attachment في PDF copy جديدة - تحتفظ CLI بملف TXT / HTML / Markdown / JSON / CSV report file الناتج على القرص وترفض إرفاقه مرة أخرى إلى input PDF path الأصلي، مما يقلل خطر الاستبدال غير المقصود
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.41
Version 1.39.40
- تمت إضافة
Demo\Delphi\PreflightReportCli، وهو Delphi console companion لإنشاءFPdfPreflightReportبطريقة scriptable دون فتح viewer - تدعم CLI إنشاء sample بدون وسيطات، إضافة إلى input / output arguments و optional password وتنسيقات الإخراج
text/html/md/json/csv، وstandards=filtering لـ PDF/A و PDF/UA و PDF/E و PDF/X و PDF/R و PDF/VT - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.40
Version 1.39.39
- تم تحسين
FPdfPreflightReportبإضافةTPdfPreflightReport.ToMarkdownوSaveMarkdownToFileبحيث يمكن تصدير preflight reports كملف Markdown مناسب لـ issue tracker - تم تحديث أمثلة
PreflightReportفي Delphi و C++Builder و Lazarus بإضافة Markdown preview switching وإجراءات Save MD إلى جانب workflow TXT / HTML / JSON / CSV الحالي - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.39
Version 1.39.38
- تم تحسين أمثلة
SecurityAuditفي Delphi و C++Builder و Lazarus بإضافة JSON audit report export إلى جانب workflow TXT save / copy الحالي - يتضمن JSON report الحقول
formatوgeneratedAtوsummaryوfindingCountوصفوفfindingsمنظمة تحتوي على حقول severity و area و detail - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.38
Version 1.39.37
- تم تحسين
FPdfPreflightReportبإضافةTPdfPreflightReport.ToCsvوSaveCsvToFileبحيث يمكن تصدير preflight reports كـ spreadsheet-friendly CSV - تم تحديث samples الخاصة بـ Delphi و C++Builder و Lazarus
PreflightReportبإضافة CSV preview switching و Save CSV actions بجانب workflow الحالي TXT / HTML / JSON - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.37
Version 1.39.36
- تم تحسين
FPdfPreflightReportبإضافةTPdfPreflightReport.IssueCategoryCountsوالأنواع القابلة لإعادة الاستخدامTPdfPreflightIssueCategoryCountوTPdfPreflightIssueCategoryCountsلتجميع marker-level issues حسب category - تم تحديث
TPdfPreflightReport.ToTextوToHtmlوToJsonبحيث يتضمن إخراج PreflightReport الناتج issue-category count summaries إلى جانب per-standard rows و detailed issue recommendations - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata لتعرض 1.39.36
Version 1.39.35
- تمت إعادة تسمية sample الموسع
PrintDialogإلىPrintPreferencesعبر Delphi و C++Builder و Lazarus بحيث يطابق demo name الآن workflow الخاص بـ PDF author print preferences و N-up printing و odd / even filtering و grayscale و cell border و duplex mapping - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata لتعرض 1.39.35
Version 1.39.34
- تم تحسين
Demo\Delphi\PrintPDFبتحميل PDF عبر السحب والإفلات، وتم توثيق workflow الحالي فيDemo\CBuilder\PrintPDFإلى جانب أمثلة PrintPDF في Delphi وLazarus - تم تحديث
TPdf.AboutInfoوLazarus package metadata وinstaller version metadata للإبلاغ عن 1.39.34
Version 1.39.33
- تمت إضافة
Demo\CBuilder\SplitView، وبذلك اكتملت SplitView sample matrix عبر Delphi و C++Builder و Lazarus - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.33
Version 1.39.32
- تمت إضافة
Demo\Lazarus\SplitView، وبذلك أصبح side-by-side PDF comparison متاحًا في Lazarus مع two- or three-pane layouts و active-view navigation و synchronized commands و zoom presets و rotation - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.32
Version 1.39.31
- تمت إضافة
Demo\Lazarus\PrintPDF، وبذلك أصبح standard PDF print workflow متاحًا في Lazarus مع preview navigation و page ranges و copies و collate mode و progress و cancellation - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.31
Version 1.39.30
- تمت إضافة
Demo\Lazarus\FontPropertiesلإكمال مصفوفة أمثلة FontProperties عبر Delphi وC++Builder وLazarus - تم تحديث
TPdf.AboutInfoوLazarus package metadata وinstaller version metadata للإبلاغ عن 1.39.30
Version 1.39.29
- تمت إضافة
Demo\CBuilder\FontPropertiesلتوفير فحص بيانات الأحرف والخطوط المفهرسة في C++Builder إلى جانب مثال Delphi - تم تحديث
TPdf.AboutInfoوLazarus package metadata وinstaller version metadata للإبلاغ عن 1.39.29
Version 1.39.28
- تمت إضافة
Demo\Delphi\ExtractTextPagesلإكمال مصفوفة أمثلة استخراج النص صفحة بصفحة عبر Delphi وC++Builder وLazarus - تم تحديث
TPdf.AboutInfoوLazarus package metadata وinstaller version metadata للإبلاغ عن 1.39.28
Version 1.39.27
- تمت إضافة
Demo\Lazarus\PrintDialog، وبذلك اكتمل PrintDialog sample matrix عبر Delphi و C++Builder و Lazarus - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.27
Version 1.39.26
- تمت إضافة
Demo\CBuilder\PrintDialog، وبذلك أصبح N-up printing و PDF author print preferences workflow متاحين في C++Builder إلى جانب Delphi sample - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.26
Version 1.39.25
- تمت إضافة
Demo\CBuilder\ViewerInteractionLab، وبذلك اكتمل ViewerInteractionLab sample matrix عبر Delphi و C++Builder و Lazarus - تم تحديث library build workflow و Win64 C++Builder package outputs بحيث يتم ربط
TPdfViewviewer interaction methods بشكل صحيح في Win64 demos - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.25
Version 1.39.24
- تمت إضافة
Demo\Lazarus\ViewerInteractionLab، وبذلك أصبح focused viewer interaction workflow متاحًا في Lazarus إلى جانب Delphi sample - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.24
Version 1.39.23
- تمت إضافة
Demo\Lazarus\SearchAndSelect، وبذلك اكتملت SearchAndSelect sample matrix عبر Delphi و C++Builder و Lazarus - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.23
Version 1.39.22
- تمت إضافة
Demo\CBuilder\ContentExtractionLabوDemo\Lazarus\ContentExtractionLab، وبذلك أصبح multi-category content extraction workflow متاحًا في جميع demo IDE المدعومة - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.22
Version 1.39.21
- تم تحسين
Demo\Delphi\PreflightReportوDemo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportبإضافة preview format selector حتى يتمكن المستخدمون من فحص text أو JSON output قبل حفظ التقارير - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.21
Version 1.39.20
- تمت إضافة JSON export إلى
FPdfPreflightReportعبرTPdfPreflightReport.ToJsonوSaveJsonToFileلإنتاج summary قابلة للقراءة آليًا، و per-standard status / priority، و next action، و issue detail - تم تحديث
Demo\Delphi\PreflightReportوDemo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportبإجراءات Save JSON إلى جانب TXT / HTML export - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.20
Version 1.39.19
- تم تحسين
FPdfPreflightReportبإضافةTPdfPreflightStatusوissue categories وper-standard priority وnext-action guidance في TXT / HTML reports - تم تحديث
Demo\Delphi\PreflightReportوDemo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportلعرض status وpriority وissue count وnext action في summary grid - تم تحديث
TPdf.AboutInfoوLazarus package metadata وinstaller version metadata للإبلاغ عن 1.39.19
Version 1.39.18
- تمت إضافة
Demo\Lazarus\SecurityAudit، وبذلك اكتملت مصفوفة أمثلة Delphi و C++Builder و Lazarus من أجل workflow تدقيق PDF risk-surface للقراءة فقط - يسرد مثال Lazarus كلا من permissions و attachments و JavaScript actions و URI / Launch link annotations و web links و signatures و XFA state و V8 / XFA helper availability و unsupported-feature callbacks، ثم يحفظ أو ينسخ finding list كتقرير TXT report
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.18
Version 1.39.17
- تمت إضافة
Demo\CBuilder\SecurityAudit، وبذلك أصبح workflow تدقيق PDF risk-surface للقراءة فقط متاحا في C++Builder إلى جانب مثال Delphi الحالي - يسرد مثال C++Builder كلا من permissions و attachments و JavaScript actions و URI / Launch link annotations و web links و signatures و XFA state و V8 / XFA helper availability و unsupported-feature callbacks، ثم يحفظ أو ينسخ finding list كتقرير TXT report
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.17
Version 1.39.16
- تمت إضافة
Demo\CBuilder\SearchAndSelect، وبذلك أصبح workflow viewer مستقل لـ SearchAndSelect متاحا في C++Builder إلى جانب مثال Delphi الحالي - ينشئ مثال C++Builder أو يفتح PDFs، ويعرض matches لكل الصفحات مع page / character-index previews، ويدعم Previous / Next و double-click navigation، ويميز matches في الصفحة الحالية عبر
HighlightSearchText - كما يعرض
AllowUserTextSelectionوSelectedTextوSelectAllوCopySelectionToClipboardوClearSelectionوOnSelectionChangeوخيارات spreadDisplayMode؛ وتشير بيانات الإصدار الآن إلى 1.39.16
Version 1.39.15
- تمت إضافة
Demo\CBuilder\WatermarkStampلإكمال demo matrix الخاصة بـ Delphi و Lazarus و C++Builder من أجل Form XObject watermark و stamp workflows القابلة لإعادة الاستخدام - ينشئ مثال C++Builder ملفات PDF للـ target و stamp، ويعيد استخدام stamp page عبر
CreateXObjectFromPage، ويطبق transforms باستخدامTPdfMatrix، ثم يحفظ centered watermarks و corner stamps و page number labels - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.15
Version 1.39.14
- تمت إضافة
Demo\Lazarus\WatermarkStampلجلب workflow القابل لإعادة الاستخدام لـ Form XObject watermark و stamp إلى Lazarus - ينشئ مثال Lazarus ملفات PDF للـ target و stamp، ويعيد استخدام stamp page عبر
CreateXObjectFromPage، ويطبق transforms باستخدامTPdfMatrix، ثم يحفظ centered watermarks و corner stamps و page number labels - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.14
Version 1.39.13
- تمت إضافة
Demo\CBuilder\PreflightReportلإكمال demo matrix الخاصة بـ Delphi و Lazarus و C++Builder من أجل workflow القابل لإعادة الاستخدامFPdfPreflightReport - يستخدم مثال C++Builder ملف
FPdfPreflightReport.hppلإنشاء standard summaries و TXT report previews و TXT / HTML report files وسلوك Open Last Report - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.13
Version 1.39.12
- تمت إضافة
Demo\Lazarus\PreflightReportلجلب preflight report workflow الخاص بـ PDF/A و PDF/UA و PDF/E و PDF/X و PDF/R و PDF/VT إلى Lazarus - يمكن لمثال Lazarus فتح PDF أو إنشاؤه، واختيار target standards، ومعاينة summary rows و TXT report output، وحفظ TXT / HTML reports، وفتح آخر report محفوظ
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.12
Version 1.39.11
- تم تحسين
Demo\Delphi\SearchAndSelectبقائمة نتائج بحث عبر كل الصفحات تسجل page number و character index و preview text - تمت إضافة Previous / Next match navigation و double-click result jumping مع الحفاظ على سلوك
HighlightSearchTextفي الصفحة الحالية - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.11
Version 1.39.10
- تم تحسين
Demo\Delphi\SecurityAuditبإجراءات Save Report و Copy Report التي تصدّر summary الحالي و finding rows كتقرير TXT audit report - يقوم demo الآن بمسح report export state عند reset للـ audit panel حتى تبقى reports المنسوخة أو المحفوظة متوافقة مع findings الظاهرة
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.10
Version 1.39.9
- تم تحسين
Demo\Delphi\ContentExtractionLabبإضافة source-PDF save و report copy-to-clipboard وإجراءات all / none category selection - يقوم demo الآن بإبطال report الحالي عند تغيّر category selection حتى تعكس TXT / JSON exports نطاق extraction scope الظاهر
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.9
Version 1.39.8
- تمت إضافة
Demo\Delphi\ContentExtractionLab، وهو workflow sample موحد لـ content extraction يغطي document metadata و page text و page objects و images و attachments و links و annotations و bookmarks و font / character metrics - يمكن للمثال فتح PDF موجود أو إنشاء synthetic PDF يحتوي على text و image و attachment و annotation، ثم إنشاء summary rows وتقارير TXT / JSON مفصلة
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.8
Version 1.39.7
- تمت إضافة
Lib\FPdfPreflightReport.pasكـ report helper قابل لإعادة الاستخدام يجمعValidatePdfAوValidatePdfUaوValidatePdfEوValidatePdfXوValidatePdfRوValidatePdfVTفي كائنTPdfPreflightReportواحد - تمت إضافة
Demo\Delphi\PreflightReportكـ workflow sample يفتح أو ينشئ PDF، ويختار target standards، ويعرض summary rows وissue recommendations، ويحفظ تقارير TXT أو HTML - توضح التقارير الناتجة صراحة حدود marker-level validation المدمجة حتى تتمكن التطبيقات من استخدامها مع content-level preflight tools متخصصة عند الحاجة
- تم تحديث
TPdf.AboutInfoوLazarus package metadata وpackage project lists وinstaller version metadata لتعرض 1.39.7
Version 1.39.6
- تمت إضافة
Demo\Delphi\SearchAndSelect، وهو مثال viewer workflow مركز على search highlighting و text selection و selected-text preview و copy و clear و spread display modes - يوضح المثال
HighlightSearchTextوخيارات البحث match-case / whole-word وAllowUserTextSelectionوSelectedTextوSelectAllوCopySelectionToClipboardوClearSelectionدون إضافة API جديدة للمكتبة - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.6
Version 1.39.5
- تم توسيع
Demo\Delphi\ViewerInteractionLabليصبح مثال viewer UX بأسلوب SearchAndSelect معHighlightSearchTextوخيارات match-case / whole-word ومعاينة النص المحدد وعناصر selection / clipboard controls الموجودة - تم توسيع
Demo\Delphi\PrintDialogلفحص PDF author print preferences:PrintCopiesوPrintPageRangesوPrintScalingوPrintPaperHandlingو duplex mapping المرئي عبرSetPdfPrintPaperHandlingDevMode - تمت إضافة
Demo\Delphi\SecurityAudit، وهو مثال risk-surface للقراءة فقط يسرد permissions و attachments و document JavaScript و URI / Launch links و web links و signatures و XFA state و V8 / XFA helper availability - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.5
Version 1.39.4
- تمت إضافة
Demo\CBuilder\ImageToPDFوDemo\Lazarus\ImageToPDF، مما يكمل مصفوفة أمثلة ImageToPDF عبر Delphi و C++Builder و Lazarus - توضح الأمثلة الجديدة اختيار عدة صور، ومعاينة الصورة المحددة، وصفحة PDF واحدة لكل صورة، وحجم صفحة A4 portrait / landscape، وتحجيم الصورة في الوسط، والتقدم لكل صورة، وفتح PDF الناتج بعد الحفظ
- تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.4
Version 1.39.3
- تمت إضافة
Demo\CBuilder\BatchExport، مما يجلب workflow تصدير PDF إلى JPG متعدد الملفات إلى C++Builder بجانب أمثلة Delphi و Lazarus الموجودة - يوضح المثال
LoadCustomDocumentوIPdfCancellationTokenSourceوإدخالTFileStreamبتدفق، والتقدم لكل ملف ولكل صفحة، ومعالجة الإلغاء، ومدخلات DPI / quality / password، وفتح مجلد الإخراج بعد الاكتمال - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.3
Version 1.39.2
- تمت إضافة
Demo\Delphi\WatermarkStamp، وهو مثال قابل للتشغيل لسير عمل Form XObject ينشئ PDF هدفا و stamp PDF قابلا لإعادة الاستخدام، ثم يطبق علامات مائية في الوسط، وأختاما في الزاوية العلوية اليمنى، وتسميات أرقام الصفحات على كل صفحة - يوضح المثال
CreateXObjectFromPageوInsertFormObjectFromXObjectوTPdfMatrixوFPDFPageObj_SetMatrixمن دون إضافة API جديدة للمكتبة - تم تحديث
Docs\en-us\Examples.htmlلاستخدام نمطTPdfMatrix.Handleالحالي عند تمرير المصفوفات إلىFPDFPageObj_SetMatrix - تم تحديث
TPdf.AboutInfoو Lazarus package metadata و installer version metadata للإبلاغ عن 1.39.2
Version 1.39.1
- تمت إضافة
Demo\Delphi\ViewerInteractionLabكعينة مركزة لـTPdfViewلعرض أوضاع العرض وأوضاع الملاءمة وألوان الصفحات والتدوير وتحديد النص للمستخدم وتفاعلات الحافظة وتغذية راجعة لإحداثياتDeviceToPage - تمت إضافة
Demo\CBuilder\StandardsLabوDemo\Lazarus\StandardsLabبحيث يستطيع مستخدمو Lazarus تشغيل مسار التحقق وإخراج العلامات لمعايير PDF/A وPDF/UA وPDF/E وPDF/X وPDF/R وPDF/VT - أُدرجت وحدات standards في
Lib\37.0\PDFiumPas.dprojوLib\FPC\PDFiumLaz.lpk، وتم إصلاح بناء عرض Delphi الخاص بـSplitViewعبر إزالة استيراد مكرر لـWinapi.ShellAPI - تم إصلاح عوائق البناء الدفعي لعروض Delphi في
BatchExportوPDFViewerوMultiPageViewerوSplitViewمن دون تغيير سلوكها وقت التشغيل - تم إصلاح توافق البناء الدفعي لعروض C++Builder في
PDFViewerوMultiPageViewerعبر استبدالnullptrبـNULLلنمط المشروع الحالي - تم تحديث
TPdf.AboutInfoوبيانات حزمة Lazarus وبيانات إصدار المثبت للإبلاغ عن 1.39.1
Version 1.39.0
- تمت إضافة
Demo\Delphi\StandardsLab، وهو مثال قابل للتشغيل لسير عمل المعايير يقوم بتحميل PDF أو إنشائه، ثم تشغيلValidatePdfAوValidatePdfUaوValidatePdfEوValidatePdfXوValidatePdfRوValidatePdfVT، ويعرض conformance المكتشفة وحالة النجاح وعدد issue في شبكة واحدة - تستدعي أزرار الحفظ في StandardsLab الدوال
SaveAsPdfAوSaveAsPdfUaوSaveAsPdfEوSaveAsPdfXوSaveAsPdfRوSaveAsPdfVT، مما يجعل مخرجات marker لمعايير PDF مرئية دون كتابة harness مخصص - تم تحديث
TPdf.AboutInfoوبيانات حزمة Lazarus وبيانات إصدار المثبت لتعرض 1.39.0
Version 1.38.0
- تستخدم تراكبات البحث وتحديد النص في
TPdfViewالآن alpha blending حقيقياً بدلاً من رسم mask منطقي، مع الحفاظ على محتوى الصفحة تحت التمييز - تمت إضافة
SetPdfPrintPaperHandlingDevModeلتحويلTPrintPaperHandlingإلى قيم WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEXوDMDUP_HORIZONTALوDMDUP_VERTICAL - يقوم
TPdfView.SmoothScrollالآن بتحريك line/page scrollbar commands عبر timer-driven segments؛ ويبقى thumb tracking فورياً - تم تحديث
TPdf.AboutInfoوبيانات إصدار المثبت إلى 1.38.0
Version 1.37.0
- أصبح
TPdfيملك قفل render لكل instance يسلْسلRenderPageوRenderTileوRenderPageProgressiveومسارات reload للصفحة وunload للمستند. أصبح render من worker عبر مكون مشترك عملياً، مع بقاء تنسيق تعديلات المستند ودورة حياته على التطبيق - تم إصلاح wrapper الخاص بـ zero-copy bitmap لرفض DIB
TBitmapبنمط bottom-up والرجوع إلى buffer مملوك لـ PDFium مع copy نهائي، مما يزيل أخطاء stride corruption / access violation في اختبارات VCL render - تم تضييق سلوك التحديد في
TPdfView: الخاصيةAllowUserTextSelectionتمنع إدخال المستخدم فقط، وتستمر APIs التحديد من الكود في الرسم، ويتبعSelectAllالـ spread المرئي الفعلي بحيث لا تحدد صفحة الغلاف الصفحة 2. تم توسيع اختبارات Delphi وLazarus وC++Builder - تم تحديث
TPdf.AboutInfoوبيانات إصدار المثبت إلى 1.37.0
Version 1.36.0
- تم تفعيل تحديد النص للمستخدم النهائي في
TPdfView— أصبحت الخاصيةAllowUserTextSelectionالمحجوزة منذ v1.17.0 تقود الآن مسار تحديد كامل بالسحب؛ فالنقر الأيسر على حرف نصي يدخل وضع التحديد مباشرةً عبر hit-test، بينما يواصل النقر الأيسر على مساحة فارغة التمرير كما كان من قبل، وتبقى أولوية عنصر تعبئة النماذج محفوظة بحيث يركز النقر على حقل نموذج على الحقل بدل بدء التحديد - يحدد النقر المزدوج الكلمة، ويحدد النقر الثلاثي السطر، ويحدد
Ctrl+Aالصفحة الحالية، أو كلتا الصفحتين في أوضاع العرض الممتد، بينما ينسخCtrl+Cالتحديد إلى حافظة Windows بصيغةCF_UNICODETEXT - توسع
Shift+Left/Shift+Rightالتحديد حرفًا حرفًا، مع الامتداد إلى الصفحة المجاورة في وضع الامتداد، بينما توسعShift+Home/Shift+Endالتحديد إلى حافة السطر المرئية باستخدام ارتفاع صندوق حرف البذرة كتسامح لتجميع السطر، بحيث تبقى الأسطر ذات أحجام الخطوط المختلطة مجمعة بشكل صحيح - يغيّر المرور فوق النص المؤشر إلى
crIBeamويعيده إلى المؤشر الافتراضي عند الابتعاد عن النص، وأثناء سحب تحديد النص يؤدي السحب إلى منطقة ميتة بعرض 20 بكسل عند أي حافة للعارض إلى تمرير تلقائي للصفحة، بمؤقت 50 ms وخطوة 16 px ومقيد بالحدود نفسها التي يستخدمها مسار التمرير، بحيث يمكن مد التحديد خارج المنظور الحالي من دون إفلات الفأرة أولًا - يعمل التحديد عبر الصفحات في أوضاع العرض الممتد (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): فالسحب الذي يبدأ من الصفحة اليسرى وينتهي في اليمنى يحدد النطاق المتصل الممتد عبرهما، وتضمSelectedTextمقاطع كل صفحة مع CR/LF بحيث يعود النص الناتج مقروءًا كالمحتوى متعدد الأسطر المعتاد - خاصية منشورة جديدة
SelectionColorبقيمة افتراضيةclHighlight، وهي لون تحديد Windows النظامي — مستقلة عنHighlightColorالذي يلوّن نتائج البحث بالأصفر، وبذلك يمكن عرض تمييز البحث وتحديد السحب الحي على الشاشة في الوقت نفسه من دون تعارض لوني - حدث منشور جديد
OnSelectionChangeيُطلق كلما تبدلت النطاقات المادية للتحديد فعليًا — ولا يُطلق أبدًا عند إعادة تطبيق مطابقة — لذلك تستطيع التطبيقات المضيفة ربطه مباشرةً بنص شريط الحالة أو بحالة تمكين الأزرار من دون إزالة اهتزاز - واجهة عامة جديدة على
TPdfView:HasSelectionوSelectionCharCountوSelectedTextوClearSelectionوSelectAllوCopySelectionToClipboard، وهذه نقاط دخول على مستوى الشيفرة وتعمل دائمًا بصرف النظر عنAllowUserTextSelection— فالعلم لا يقيّد إلا إدخال المستخدم، أي الفأرة وCtrl+C وCtrl+A وShift+arrows، لذلك تستطيع التطبيقات الشبيهة بالأكشاك تعطيل التحديد الذي يقوده المستخدم مع الاستمرار في بناء أزرار شريط أدوات "تحديد الكل / نسخ" تستخدم الواجهة نفسها - تُربط قائمة منبثقة افتراضية للنقر بالزر الأيمن بعنوان
Copy/复制تلقائيًا عندما لا يكون المضيف قد عيّنPopupMenuخاصته، وبذلك يعمل السلوك القياسي "حدد نصًا ثم انقر بالزر الأيمن ثم انسخ" مباشرةً، ويُختار العنوان بين الإنجليزية والصينية عبرSysLocale.PriLangID، أما المضيفون الذين يحتاجون إلى توطين كامل أو قائمة أغنى فيكفي أن يعينواPopupMenuخاصتهم فيُحجب الافتراضي - يُمسح التحديد تلقائيًا عند
SetPdfوSetPageNumberوSetActive(False)وانتقالاتDisplayMode، مع إطلاقOnSelectionChangeمرة واحدة بالضبط عندما يكون التحديد السابق غير فارغ، كما يحافظ نظام تعبئة النماذج على أسبقيته — فعند تحرير حقل نموذج تؤجل كل اختصارات التحديد كي يتلقى الحقلCtrl+C/Ctrl+A/Shift+arrowsلتحديده الخاص - تم توسيع مجموعات اختبارات Delphi وLazarus إلى 202 حالة لكل منهما، ومجموعة C++Builder إلى 159 حالة، لتغطية القيم الافتراضية والذهاب والإياب وسلوك الواجهة العامة ومسح تبدل الحالة وسحب الفأرة، سواء عند إصابة النص أو الفراغ، والفرق بين النقر والسحب، وتبديل مؤشر IBeam، والنقر المزدوج للكلمة، والنقر الثلاثي للسطر، واختصارات لوحة المفاتيح، وربط القائمة المنبثقة الافتراضية أو تأجيلها أو عنوانها، والتحديد عبر صفحات الامتداد، بما في ذلك فحص ذهاب وإياب CR/LF مع الحافظة
Version 1.35.0
- تمت إضافة دعم حقن علامات PDF/VT (ISO 16612-2:2010): يرقّي TPdf.SaveAsPdfVT المستند الحالي إلى ملف مطابق لـ PDF/VT-1 أو PDF/VT-2، أي مجموعة PDF الفرعية للطباعة المتغيرة والمعاملات. ويُبنى PDF/VT فوق PDF/X-4، إذ تتطلب ISO 16612-2 §6.2.1 أن يطابق كل ملف PDF/VT-1 أيضًا PDF/X-4، لذلك يكتب الحاقن مجموعة علامات PDF/X-4 الكاملة — XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4"وInfo/GTS_PDFXVersion (PDF/X-4)و/Trappedوcatalog/OutputIntentsالذي يشير إلى قاموس OutputIntent مع ملف ICC مضمن — إلى جانب الخصائص الخاصة بـ PDF/VT - يشمل الحقن الخاص بـ PDF/VT قيم XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" أو "PDF/VT-2" وفق §6.3 Table 2) وpdfvtid:GTS_PDFVTModDate(تُبقى متزامنة معxmp:ModifyDateوفق §6.3 NOTE 1)، إضافة إلى وصف pdfaExtension:schemas يعلن مساحتي الاسم pdfxid وpdfvtid كلتيهما باستخدام معرّفي NPEShttp://www.npes.org/pdfx/ns/id/وhttp://www.npes.org/pdfvt/ns/id/، ويحمل trailer مصفوفة/ID - تمت إضافة TPdf.SaveAsPdfVTToStream لإخراج PDF/VT داخل الذاكرة، كما أُضيف الاختصار الافتراضي
TPdf.SaveAsPdfVT(FileName)الذي ينتج PDF/VT-1 مع OutputIntent sRGB IEC61966-2.1 المضمّن، بحجم 3144 bytes وهو الملف التعريفي نفسه المستخدم في SaveAsPdfA / SaveAsPdfX، ومع/Trapped /False - تمت إضافة TPdf.ValidatePdfVT: يفحص ملف PDF المفتوح لعلامات توافق PDF/VT، بما في ذلك وجود XMP
pdfvtid:GTS_PDFVTVersionوGTS_PDFVTModDate، ومساواةpdfvtid:GTS_PDFVTModDateمعxmp:ModifyDate، ووجود المعرف الأساسيpdfxid:GTS_PDFXVersion، ووجود/DPartRootفي catalog وفق §6.5، ووجود/OutputIntentsمع/DestOutputProfile، وحالة /ID في trailer، وحالة التشفير، ووجودxmp:CreateDate/ModifyDate، ثم يعيد TPdfVTValidationResult مع مستوى المطابقة المكتشف ومجموعة المشكلات - تمت إضافة خاصية TPdf.PdfVTConformance: تُرجع المستوى دون استدعاء ValidatePdfVT صراحة
- أنواع جديدة مُصدَّرة في الوحدة الجديدة FPdfPdfvt: TPdfVTConformance وTPdfVTTrappedState وTPdfVTValidationResult وTPdfVTValidationIssue وTPdfVTSaveOptions
- إن بنية أجزاء المستند (
DPartRoot/DParttree وفق §6.5) هي بنية على مستوى التطبيق تعتمد على ربط المستلمين ونطاقات الصفحات في مسار طباعة البيانات المتغيرة. لا يقوم SaveAsPdfVT بإنشاء شجرة DPart تلقائيًا — بل يُظهر ValidatePdfVT غياب/DPartRootعلى أنهpvviMissingDPartRootحتى يستطيع المستدعون تمرير ملفات PDF/VT عبر خطوة منفصلة لبناء DPart، بينما تبقى متطلبات PDF/X-4 على مستوى المحتوى، مثل تضمين الخطوط والشفافية والألوان المدارة بـ ICC وحظر OPI / JavaScript / Reference XObject، من مسؤولية مؤلف المستند وخط التصيير في PDFium - تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.34.0
- تمت إضافة دعم حقن علامات PDF/R-1 (ISO 23504-1:2020): يرقّي TPdf.SaveAsPdfR المستند الحالي إلى ملف مطابق لـ PDF/R-1، وهو subset لنقل الصور النقطية في PDF يُستخدم للمستندات الممسوحة ضوئيًا. ويغطي الحقن متطلبات مستوى تنسيق الملف التي يمكن إلحاقها بالمعالجة اللاحقة — تعليق تعريف الإصدار الفريد
%PDF-raster-1.0المكتوب بين قاموس trailer وكلمة startxref (§5)، مع اختزال قاموس catalog إلى القائمة البيضاء في §6.3، واختزال Document Information Dictionary إلى القائمة البيضاء في §6.4.3، وتدفق /Metadata XMP في catalog حاملاً عناصر §6.4.4 Table 1 الأربعة، ومصفوفة trailer /ID - تمت إضافة TPdf.SaveAsPdfRToStream لإخراج PDF/R في الذاكرة واختصار
TPdf.SaveAsPdfR(FileName) - تمت إضافة TPdf.ValidatePdfR: يفحص ملف PDF المفتوح لعلامات توافق PDF/R-1، بما في ذلك تعليق التذييل
%PDF-raster-x.yوإصدار الترويسة وغياب /Type /ObjStm والالتزام بالقائمة البيضاء في catalog وInfo ووجود تدفق بيانات XMP الوصفية وtrailer /ID، ثم يعيد TPdfRValidationResult مع مستوى المطابقة المكتشف ومجموعة المشكلات - تمت إضافة خاصية TPdf.PdfRConformance: تُرجع المستوى دون استدعاء ValidatePdfR صراحة
- أنواع جديدة مُصدَّرة في الوحدة الجديدة FPdfPdfr: TPdfRConformance وTPdfRValidationResult وTPdfRValidationIssue وTPdfRSaveOptions. يضبط
TPdfRSaveOptions.Defaultالقيمتين StripInfoOptionalEntries وStripCatalogOptionalEntries إلى True بحيث ينتج الحاقن افتراضيًا catalog وقاموس Info مطابقين لـ §6.3 و§6.4.3؛ ويمكن للمستدعين ضبطهما إلى False للحفاظ على إدخالات المصدر، مع بقاء العلامات الأخرى مرفقة وإن لم يعد الناتج يطابق تلك البنود من PDF/R - تبقى متطلبات مستوى المحتوى من مسؤولية PDF المصدر: بنية Contents لكل صفحة (§6.5.1)، وصيغة MediaBox
[0 0 w h](§6.5.3)، وقيود المرشحات (§6.2.2 — FlateDecode فقط وCCITTFaxDecode الأحادي اللون وDCTDecode للرمادي 8-bit أو RGB)، وغياب object streams (§6.2.4)، وتخطيط الشرائط وفق §6.6. ولا يمكن فرض هذه الأمور بالمعالجة اللاحقة — فـ PDF/R subset أشد صرامة بكثير بنيويًا من معايير PDF/x الأخرى ويتطلب إنشاء بايتات المصدر بصورة صحيحة. ويكشف ValidatePdfR مسائل تنسيق الملف التي تستطيع هذه الوحدة رصدها؛ ويُستحسن إقرانه بمحقق PDF/R من TWAIN Working Group للحصول على فحص كامل لمتطلبات المحتوى - تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.33.0
- تمت إضافة دعم حقن علامات PDF/X (عائلة ISO 15930): يرقّي TPdf.SaveAsPdfX المستند الحالي إلى ملف مطابق لـ PDF/X-1a:2001 أو PDF/X-3:2002 أو PDF/X-4 عبر معالجة لاحقة لملف PDF الأساسي بتحديث تزايدي. ويغطي الحقن متطلبات مستوى تنسيق الملف التي يمكن إرفاقها بالمعالجة اللاحقة — تدفق بيانات XMP الوصفية الذي يحمل
pdfxid:GTS_PDFXVersionوpdfxid:GTS_PDFXConformanceفي PDF/X-1a وPDF/X-3، إضافة إلى وصف pdfaExtension:schemas المطابق، وقاموس معلومات المستند المعاد كتابته مع/GTS_PDFXVersionو/GTS_PDFXConformanceو/Trapped، وcatalog محدثًا مع/OutputIntents [N 0 R]يشير إلى قاموس OutputIntent يحوي/S /GTS_PDFXوملف ICC مضمن، ومصفوفة trailer/ID - تمت إضافة TPdf.SaveAsPdfXToStream لإخراج PDF/X في الذاكرة، واختصار
TPdf.SaveAsPdfX(FileName)الذي ينتج PDF/X-4 مع OutputIntent sRGB IEC61966-2.1 مضمن افتراضياً - تمت إضافة TPdf.ValidatePdfX: يفحص علامات التوافق ويُرجع TPdfXValidationResult
- تمت إضافة خاصية TPdf.PdfXConformance: تُرجع مستوى التوافق دون استدعاء ValidatePdfX صراحة
- أنواع جديدة مُصدَّرة في الوحدة الجديدة FPdfPdfx: TPdfXConformance وTPdfXTrappedState وTPdfXValidationResult وTPdfXValidationIssue وTPdfXSaveOptions. يستهدف الافتراضي
TPdfXSaveOptions.Defaultملف PDF/X-4 مع sRGB OutputIntent و/Trapped /False؛ ويمكن للمستدعين تجاوزConformanceأو تمرير كتلةIccProfileDataبنظام CMYK لسير عمل الطباعة التجارية أو تغييرOutputConditionوOutputConditionIdentifierوRegistryNameللإشارة إلى إدخال محدد في سجل توصيف ICC مثل FOGRA39 أو GRACoL2006_Coated1v2 - متطلبات مستوى المحتوى (تضمين كل الخطوط، بدون JavaScript، بدون annotations مرئية، حظر OPI، قواعد الشفافية لـ PDF/X-1a / PDF/X-3) تبقى من مسؤولية مؤلف المستند. اقترن مع callas pdfaPilot أو Ghent PDF Workgroup Output Suite للتحقق الكامل
- تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.32.0
- تمت إضافة دعم حقن علامات PDF/E-1 (ISO 24517-1:2008): يرتقي TPdf.SaveAsPdfE بالمستند الحالي إلى ملف متوافق مع PDF/E-1 من خلال معالجة لاحقة لـ PDF الأساسي بتحديث تزايدي. يغطي الحقن متطلبات مستوى تنسيق الملف — تدفق بيانات وصفية XMP يحمل
pdfe:ISO_PDFEVersion = "PDF/E-1"ووصف pdfaExtension:schemas المطابق، وDocument Information Dictionary المعاد كتابته مع الإدخال الإلزامي/ISO_PDFEVersion (PDF/E-1)من §5، وتكافؤ Info-XMP الموروث من ISO 19005-1 §6.7 عبر §13.1، ومصفوفة/IDفي trailer المطلوبة بموجب §6.2 - تمت إضافة TPdf.SaveAsPdfEToStream لإخراج PDF/E في الذاكرة واختصار
TPdf.SaveAsPdfE(FileName) - تمت إضافة TPdf.ValidatePdfE: يفحص علامات التوافق ويُرجع TPdfEValidationResult
- تمت إضافة خاصية TPdf.PdfEConformance: تُرجع مستوى التوافق دون استدعاء ValidatePdfE صراحة
- أنواع جديدة مُصدَّرة في الوحدة الجديدة FPdfPdfe: TPdfEConformance وTPdfEValidationResult وTPdfEValidationIssue وTPdfESaveOptions
- إعادة كتابة Info dictionary هي الأولى من نوعها في مسار المعالجة اللاحقة PDF/x في PDFiumPas — تعيد كتابة كائن Info الموجود برقم الكائن نفسه (الحفاظ على مرجع /Info في trailer)، وتُولِّد قاموس Info جديد إذا لم يكن لـ trailer المصدر مدخل /Info
- متطلبات مستوى المحتوى (تضمين الخطوط، CMaps ToUnicode، XObjects / مفاتيح ExtGState / نماذج XFA المحظورة) تبقى من مسؤولية مؤلف المستند
- تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.31.0
- تمت إضافة دعم حقن علامات PDF/UA-1 (ISO 14289-1:2014): يرتقي TPdf.SaveAsPdfUa بالمستند الحالي إلى ملف متوافق مع PDF/UA-1 من خلال معالجة لاحقة لـ PDF الأساسي بتحديث تزايدي. يغطي الحقن متطلبات مستوى تنسيق الملف التي يمكن تطبيقها بالمعالجة اللاحقة — تدفق بيانات وصفية XMP يحمل
pdfuaid:part = 1ووصف pdfaExtension:schemas المطابق، وdc:titleإلزامي، وcatalog/MarkInfo << /Marked true /Suspects false >>و/ViewerPreferences << /DisplayDocTitle true >>(يُحقن فقط عند عدم وجوده في المصدر)، وcatalog/Lang(عندما يوفر المتصل وسم BCP 47)، ومصفوفة/IDفي trailer - تمت إضافة TPdf.SaveAsPdfUaToStream لإخراج PDF/UA في الذاكرة، واختصار خيارات افتراضية
TPdf.SaveAsPdfUa(FileName)للحالة الشائعة - تمت إضافة TPdf.ValidatePdfUa: يفحص PDF مفتوحاً عن علامات توافق PDF/UA-1 (وجود StructTreeRoot وLang/ وMarkInfo /Marked true مع Suspects = false/ وViewerPreferences /DisplayDocTitle true/ ومعرف XMP pdfuaid:part ووجود dc:title وID/ في trailer وحالة التشفير) ويُرجع نتيجة مهيكلة بمستوى التوافق المكتشف ومجموعة المشكلات الموجودة
- تمت إضافة خاصية TPdf.PdfUaConformance: تُرجع مستوى توافق المستند المفتوح (puc1 أو pucNone أو pucUnknown) دون استدعاء ValidatePdfUa صراحة
- أنواع جديدة مُصدَّرة في الوحدة الجديدة FPdfPdfua: TPdfUaConformance وTPdfUaValidationResult وTPdfUaValidationIssue وTPdfUaSaveOptions
- الحقول الفارغة في TPdfUaSaveOptions (Title وAuthor وSubject وKeywords وCreator وProducer وCreationDate وModDate وDocumentId وInstanceId وLanguage) تُملأ تلقائياً عبر FPDF_GetMetaText وFPDF_GetFileIdentifier وFPDFCatalog_GetLanguage
- متطلبات مستوى المحتوى (اكتمال وسم StructTreeRoot، ونص Figure Alt، وToUnicode CMaps، وتضمين الخطوط، وغيرها) تبقى من مسؤولية مؤلف المستند — يُلحق SaveAsPdfUa علامات التنسيق فقط. يُبلغ ValidatePdfUa عن غياب StructTreeRoot كـ
pvuaiMissingStructTreeRoot - تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.30.0
- أصبح إخراج PDF/A-1b يفي بمتطلبات ISO 19005-1 (مع Cor.1:2007) للتكافؤ بين Document Information Dictionary وXMP: كل إدخال في Info dictionary يكتبه PDFium في PDF الأساسي يُعكس في حزمة XMP، بما في ذلك Title (dc:title) وAuthor (dc:creator) وSubject (dc:description وفقاً لـ Cor.1) وKeywords (pdf:Keywords) وCreator (xmp:CreatorTool) وProducer (pdf:Producer) وCreationDate (xmp:CreateDate) وModDate (xmp:ModifyDate). كما يُصدر xmp:MetadataDate
- أصبح trailer مستند PDF/A يحتوي دائماً على مصفوفة /ID (متطلب إلزامي في ISO 19005-1 6.1.3). عندما يعالج TPdf.SaveAsPdfA مستنداً مصدره يحتوي بالفعل على file identifier، تُعاد استخدام معرفات permanent وchanging بحجم 16 بايت؛ وإلا يُشتق معرف احتياطي حتمي بحجم 16 بايت من بايتات المصدر
- يتضمن XMP المحقون الآن وصف extension schema pdfaid المطلوب بموجب ISO 19005-1 6.7.8 (المستبدل بـ Cor.1) — يُعتبر pdfaid extension schema بالنسبة إلى XMP Specification 2004، لذا يجب على جميع الملفات المتوافقة الإعلان عن property names وvalue types وcategories الخاصة به في الحاوية pdfaExtension:schemas
- اكتسب TPdfASaveOptions خمسة حقول اختيارية جديدة: Producer وCreationDate وModDate (سلاسل تاريخ PDF بصيغة «D:YYYYMMDDHHmmSSOHH'mm'») وDocumentId وInstanceId (سلاسل 16 بايت لمصفوفة /ID في trailer). يملأ TPdf.SaveAsPdfA / SaveAsPdfAToStream الحقول الفارغة تلقائياً عبر FPDF_GetMetaText وFPDF_GetFileIdentifier، لذلك يستمر الكود الموجود في العمل دون تغيير
- يُبلغ TPdf.ValidatePdfA / TPdf.PdfAConformance الآن عن ثلاث مشكلات إضافية: pvaiMissingTrailerId (لا يوجد /ID في trailer) وpvaiMissingXmpDates (xmp:CreateDate أو xmp:ModifyDate مفقود) وpvaiMissingExtensionSchema (وصف extension schema pdfaid مفقود)
- تُرمَّز الأحرف غير ASCII في Title وAuthor وSubject وKeywords وCreator وProducer الآن كـ UTF-8 في حزمة XMP (يتطلب XMP Specification UTF-8)، مع الحفاظ على البيانات الوصفية متعددة اللغات عبر SaveAsPdfA
- تم تحديث سلسلة TPdf.AboutInfo للإبلاغ عن الإصدار الحالي للمنتج
Version 1.29.0
- تم تحديث مكتبات PDFium المُضمَّنة (Win32 وWin64، الإصدار القياسي وإصدار V8) إلى لقطة المنبع بتاريخ 2026-05-22، مما يُدخل إصلاحات المنبع لمسارات الانهيار في FPDFText_SetText / FPDFText_SetCharcodes وعدة تحصينات داخلية من مشروع PDFium
- تم كشف علم الحفظ الجديد FPDF_SUBSET_NEW_FONTS من PDFium في FPdfPageOps.pas، مما يتيح لمستدعي FPDF_SaveAsCopy طلب التجزئة الفرعية التلقائية لملفات الخطوط المضمَّنة الخاصة بالكائنات النصية المُضافة حديثًا. تم الآن إعادة تعريف الثوابت الحالية FPDF_INCREMENTAL وFPDF_NO_INCREMENTAL وFPDF_REMOVE_SECURITY باستخدام صيغة الإزاحة البتية من المنبع (تم الاحتفاظ بالقيمة العددية القديمة 3 باسم FPDF_REMOVE_SECURITY_DEPRECATED للحفاظ على التوافق الثنائي)
- تمت إضافة التعداد FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) والحقل المقابل m_FontLibraryType في FPDF_LIBRARY_CONFIG داخل FPdfView.pas، حتى تتمكن التطبيقات التي تُهيّئ PDFium باستخدام مُحرِّك Skia من اختيار الواجهة الخلفية للخطوط عند بدء التشغيل
- تم تحديث توقيع TFPDFPage_InsertObject ليطابق المنبع: تُعيد دالة C الآن FPDF_BOOL (TRUE عند النجاح، وFALSE إذا كان page_object يساوي NULL أو فشل نقل الملكية) بدلًا من void. لا تزال نداءات PDFiumPas القائمة قابلة للترجمة دون تعديل، نظرًا لأن Delphi / FPC يسمحان بتجاهل قيمة الإرجاع للدالة
- تم تصحيح سلسلة TPdf.AboutInfo لتعرض الإصدار الحالي من المنتج (ظلت قديمة عند v1.27.0 منذ الإصدار 1.28.0 الذي اقتصر على الوثائق)
Version 1.28.0
- تم توسيع وثائق الصفحات داخل مرجع الـ API بالكامل توسيعًا جوهريًا: كل إدخال لخاصية أو طريقة أو حدث أو دالة عامة يحمل الآن وصفًا من ثلاث فقرات (Description)، وقائمة Remarks، ومثال Delphi Example متعدد الأسطر، وكتلة See Also أكثر ثراءً — ويغطي ذلك 200+ صفحة كانت سابقًا شحيحة المحتوى، بما في ذلك جميع عدادات TPdf، وأدوات قراءة البيانات الوصفية، وأدوات الوصول إلى الخطوط والأحرف، والخصائص على مستوى الصفحة، والسجلات المُفهرسة، والطرق على مستوى المستند، وسطح TPdfView الكامل للحالة والعرض والأحداث
- تم ضبط تخطيط المساعدة بدقة ليطابق الأساس المرئي لـ losLab المستخدم في مرجع HotXLS: تم توحيد أحجام h1/h2، ودمج أنماط شبكة تنقل الـ API في StyleSheet المشترك، وإزالة تجاوزات الـ CSS المضمنة لكل صفحة من Navigation.html
- تأتي الوثائق الآن مع نص برمجي مساعد (Docs\Build-Expand-Entries.ps1) يعيد توليد إثراء صفحات الإدخالات من جدول بيانات واحد لضمان صيانة قابلة للتكرار
Version 1.27.0
- تمت إضافة دعم إنشاء PDF/A-1b: تحفظ TPdf.SaveAsPdfA أي مستند مفتوح كملف متوافق مع PDF/A-1b من خلال معالجة لاحقة لملف PDF الأساسي بتحديث تزايدي يحقن تدفق بيانات وصفية XMP، و sRGB ICC OutputIntent، وفهرس مستند محدّث — كل ذلك دون الحاجة إلى واجهات DLL إضافية. يعمل على أي منصة يدعمها PDFiumPas
- تمت إضافة TPdf.SaveAsPdfAToStream لإخراج PDF/A في الذاكرة
- تمت إضافة TPdf.ValidatePdfA: تتحقق من امتثال ملف PDF المفتوح لمعيار PDF/A (علامات XMP pdfaid، وجود OutputIntent مع ملف ICC مضمّن، التشفير) وتعيد نتيجة منظّمة بمستوى الامتثال المكتشف ومجموعة من المشكلات المحددة التي عُثر عليها
- تمت إضافة خاصية TPdf.PdfAConformance: تعيد مستوى امتثال المستند المفتوح حاليًا (pac1b، pac1a، pac2b، pac3b، pacNone، أو pacUnknown) دون الحاجة إلى استدعاء ValidatePdfA صراحةً
- تم تصدير أنواع جديدة: TPdfAConformance، TPdfAValidationResult، TPdfAValidationIssue، TPdfASaveOptions (في الوحدة الجديدة FPdfPdfa.pas)
- تدعم SaveAsPdfA ملف ICC مخصص عبر TPdfASaveOptions.IccProfileData؛ وعندما يُترك فارغًا، يُستخدم تلقائيًا ملف sRGB IEC61966-2.1 المدمج (HP/Microsoft، 3144 bytes)
- تم استبدال المرجع HTML المتجانس بنظام مساعدة ويب معاد هيكلته: 302 صفحة إدخال API مستقلة (صفحة لكل خاصية وطريقة وحدث ودالة عامة) تغطي TPdf و TPdfView، تحتوي كل منها على وصف كامل وجدول معاملات ومثال كود Delphi وروابط See Also
- تمت إضافة Navigation.html: فهرس تنقل API شامل في صفحة واحدة منظّم في ستة أقسام (خصائص/طرق/أحداث TPdf، وخصائص/طرق/أحداث TPdfView، والدوال العامة) مع شبكة مرنة من 5 أعمدة للمسح السريع
- تمت إعادة بناء TPdf.html و TPdfView.html بوصفها صفحات نظرة عامة مدمجة للمكوّن مع الإبقاء على أقسام مرجع الأنواع (Types، Constants، Global Variables) والارتباط الخارجي بصفحات الإدخال الفردية لجميع الأعضاء
- تمت إضافة بحث نصي كامل مدعوم بـ Search.js مع مطابقة تزايدية من جانب العميل عبر جميع الصفحات المفهرسة البالغ عددها 312
- تم تحديث جميع أشرطة التنقل على مستوى الموقع للإشارة إلى Navigation.html
Version 1.26.0
- تمت إضافة Demo/Lazarus/BatchExport، وهو نسخة LCL من عرض Delphi BatchExport في الإصدار v1.14.0. يحمل نفس مجموعة الميزات: تصدير دفعي متعدد الملفات من PDF -> JPG مع شريط تقدّم إجمالي لكل ملف، وتقدّم حالي لكل صفحة، ومدخلات DPI / الجودة / كلمة المرور، ودفعة قابلة للإلغاء التعاوني مدعومة بـ IPdfCancellationToken. يُفتح مجلد الإخراج في مدير ملفات المنصة عند انتهاء الاستخراج بنجاح
Version 1.25.0
- تمت إضافة إمكانية إعادة استخدام صفحة Form XObject إلى TPdf، مما يُمكّن من سيناريوهات العلامات المائية وتراكب القوالب و“ختم صفحة واحدة على عدة صفحات”: تصنع CreateXObjectFromPage مقبضًا قابلًا لإعادة الاستخدام من أي صفحة في مستند آخر؛ بينما تُدرج InsertFormObjectFromXObject نسخة واحدة من الصفحة المغلّفة في الصفحة الحالية. تُرجع الكائن المُدرج FPDF_PAGEOBJECT حتى يتمكن المُستدعي من تحديد موضعه / تكبيره / تدويره باستخدام FPDFPageObj_SetMatrix وأدوات TPdfMatrix المساعدة المُقدّمة في v1.9.0
- يغلّف الصف الجديد TPdfXObject بلغة Pascal مقبض FPDF_XOBJECT الخاص بـ PDFium ويغلقه تلقائيًا في الدالة الهادمة، مما يُلغي الحاجة إلى استدعاء FPDF_CloseXObject يدويًا
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 147 حالة لكل منهما، ومجموعة C++Builder إلى 123 حالة، لتغطية عقود إنشاء المقبض وإدراج كائن الصفحة
Version 1.24.0
- تمت إضافة TPdf.RenderPageProgressive — وهو متغيّر قابل للإلغاء من RenderPage يقود حلقة العرض التزايدي في PDFium ويستطلع IPdfCancellationToken المُقدّم في v1.7.0 بين التكرارات، بحيث يمكن لعمليات العرض الطويلة بدقة DPI عالية أن تُجهَض في منتصف الصفحة بدلًا من حجب المُستدعي حتى الاكتمال
- يُعيد قيمة TPdfProgressiveStatus: prsDone أو prsCancelled أو prsFailed. مرّر AToken = nil للعرض حتى الاكتمال دون أي إيقاف مؤقت (وبالتالي لا احتمال لـ prsCancelled)
- يستخدم نفس مسار zero-copy السريع المُقدّم في v1.21.0 — يعرض PDFium مباشرةً في DIB الخاص بـ TBitmap الوجهة. ويُطبَّق نفس fallback القديم عندما يتعذّر تغليف DIB
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 145 حالة لكل منهما، ومجموعة C++Builder إلى 121 حالة، لتغطية nil-token (الاكتمال)، والـ token المُلغى مسبقًا (prsCancelled)، والتكافؤ في وحدات البكسل مع RenderPage المتزامن على token حي
Version 1.23.0
- تمت إضافة ست طرق جديدة في TPdfView تكشف عن تحديد النص والتراجع/الإعادة في عناصر النماذج في PDFium للتطبيقات: تُعيد GetSelectedFormText النص المحدد حاليًا داخل عنصر النموذج المُركّز عليه؛ تختار SelectAllFormText كل الأحرف؛ بينما تقود FormUndo / FormRedo / FormCanUndo / FormCanRedo سجل تعديلات العنصر المُركّز عليه. كانت واجهات PDFium الأساسية مربوطة بالفعل ولكن دون نقطة دخول عالية المستوى. تتعامل كل الطرق الست بأمان عندما يكون العارض غير نشط أو لا توجد عناصر AcroForm مُركّزة في المستند
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 142 حالة لكل منهما، ومجموعة C++Builder إلى 119 حالة، لتغطية عقد "عدم وجود نموذج لا تركيز" لكل طريقة جديدة
Version 1.22.0
- تمت إضافة مغلّفات تركيب الصفحات إلى TPdf: تأخذ ImportPagesByIndex مصفوفة فهارس صفرية لنسخ صفحات محددة من مستند مصدر؛ تُعيد ImportNPagesToOne نسخة TPdf جديدة تمامًا تتكون صفحاتها من تركيبات N-up من هذا المستند؛ بينما تُعيد MovePages ترتيب الصفحات في مكانها. كانت واجهات PDFium الأساسية مربوطة بالفعل ولكن دون نقطة دخول ودودة لـ Pascal
- تقبل ImportPagesByIndex مصفوفة فارغة لاستيراد كل صفحات المصدر (يعادل تمرير nil على مستوى C ABI)
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 136 حالة لكل منهما، ومجموعة C++Builder إلى 115 حالة، لتغطية الاستيراد الجزئي، واستيراد المستند الكامل، وإعادة ترتيب الصفحات، وتركيب N-up المركّب
Version 1.21.0
- تحسّن أداء العرض عبر تحويل TPdf.RenderPage / TPdf.RenderTile (والمساعدات المقابلة في TPdfView) إلى مسار إخراج zero-copy. يكتب PDFium الآن مباشرةً في مخزّن DIB الخاص بـ TBitmap الوجهة بدلًا من الكتابة في مخزّن داخلي ثم نسخه صفًا بصف، مما يوفر نسخة ذاكرة بحجم width x height x 4 bytes لكل عملية عرض. التحسّن أكثر وضوحًا عند DPI عالية (لوحات المُصغرات، تصدير بجودة طباعة، تصدير دفعي)
- أُبقي على المسار القديم لكل سطر مسح كاحتياط للحالة النادرة التي لا يمكن فيها تغليف DIB الوجهة (أبعاد متطرفة، خطوة غير معتادة، OOM). السلوك متطابق على مستوى البايت بين المسارين، فقط أبطأ في مسار الاحتياط
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 132 حالة لكل منهما، ومجموعة C++Builder إلى 112 حالة، لتغطية ترقية pf32bit للنقطية المُستدعية، ودورة كاملة للأبعاد، واختبار سلامة الخطوة لنقطية كبيرة
Version 1.20.0
- تمت إضافة تظليل نتائج البحث إلى TPdfView: تمسح HighlightSearchText(Text, MatchCase, MatchWholeWord) صفحة العرض الحالية وتُعيد عدد التطابقات الموجودة، وترسم قناع HighlightColor فوق كل تطابق عند كل إعادة رسم. تُزيل ClearHighlight التظليلات؛ بينما يؤدي تبديل العارض إلى صفحة مختلفة إلى مسحها تلقائيًا لأن التطابقات خاصة بكل صفحة
- قيمة HighlightColor الافتراضية هي clYellow ومُعلَنة (published) حتى تتمكن التطبيقات من تنسيق التظليل ليطابق لوحة ألوان واجهتها
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 129 حالة لكل منهما، ومجموعة C++Builder إلى 109 حالات، لتغطية اللون الافتراضي، ودورة اللون الكاملة، و“مطابقات كلمات حقيقية من مادة الاختبار” مقابل نص sample.pdf، وعقد “الكلمة المفقودة تُعيد صفر تطابقات”
Version 1.19.0
- تمت إضافة خاصية FitMode إلى TPdfView بأربع قيم: pfmNone (تكبير يدوي)، و pfmActualSize (100%)، و pfmFitPage (تتسع الصفحة بأكملها في إطار العرض)، و pfmFitWidth (يتطابق عرض الصفحة مع عرض إطار العرض). يُعاد تطبيق وضع الملاءمة النشط تلقائيًا عند Resize وعند تغيير الصفحة الحالية، لذا تظل المستندات الطويلة ذات الأحجام المختلفة للصفحات مؤطّرة بشكل مثالي
- يؤدي تعيين Zoom مباشرةً إلى إلغاء وضع الملاءمة النشط (تعود FitMode إلى pfmNone)، تطابقًا مع تقليد عارض PDF القياسي حيث يؤدي كتابة قيمة تكبير إلى الخروج من Fit Page / Fit Width
- القيمة الافتراضية هي pfmNone بحيث تحتفظ التطبيقات الحالية بسلوكها الصريح للتكبير
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 124 حالة لكل منهما، ومجموعة C++Builder إلى 106 حالات، لتغطية القيمة الافتراضية، ودورة الوضع الكاملة، و fit-page بإنتاج تكبير حقيقي على مستند مُحمَّل، وأن التكبير اليدوي يلغي وضع الملاءمة
Version 1.18.0
- تمت إضافة خاصية PageColor إلى TPdfView، لفصل خلفية صفحة PDF المعروضة عن خاصية Color للعنصر التحكم المحيط. القيمة الافتراضية هي clWhite، لذا تُعرض صفحات PDF الآن بلون ورقي أبيض بغض النظر عن سمة التطبيق المضيف. تستطيع العارضات في الوضع الداكن الآن إبقاء منطقة التمرير داكنة مع ترك صفحة PDF الفعلية بيضاء (أو أي لون يختاره التطبيق)
- تغيير في السلوك: التطبيقات التي كانت تضبط TPdfView.Color لإعادة تلوين صفحة PDF يجب أن تضبط PageColor بدلًا منها. تتحسن التجربة الافتراضية للحالة الشائعة (صفحات بيضاء على خلفيات تحكم ذات سمة) دون أي تغيير في الكود
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 120 حالة لكل منهما، ومجموعة C++Builder إلى 103 حالات، لتغطية القيمة الافتراضية ودورة اللون الكاملة
Version 1.17.0
- تمت إضافة مفاتيح تعطيل إدخال المستخدم إلى TPdfView بحيث يمكن للتطبيقات التي تضمّن العارض في kiosks أو لوحات المعاينة أو السياقات للقراءة فقط تعطيل إيماءات التنقل دون subclassing: تتحكم AllowUserPageChange في اختصارات لوحة المفاتيح الجديدة PgUp / PgDn / Ctrl+Home / Ctrl+End؛ وتتحكم ChangePageOnMouseScrolling في القفز بين الصفحات بعجلة الفأرة الجديدة لأعلى/أسفل؛ بينما تكون AllowUserTextSelection محجوزة لمسار تحديد النص بسحب الفأرة المستقبلي. القيمة الافتراضية لجميعها هي True بحيث تترقّى التطبيقات الحالية دون أي تغيير في السلوك
- يتخطى التنقل بين الصفحات بعجلة الفأرة Ctrl+wheel بحيث يمكن للتطبيقات الاحتفاظ بـ Ctrl+wheel للتكبير
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 118 حالة لكل منهما، ومجموعة C++Builder إلى 101 حالة، لتغطية القيم الافتراضية ودورة المفتاح الكاملة
Version 1.16.2
- تم توسيع تغطية اختبارات انحدار TPdfView لنقرات روابط التعليقات التوضيحية عندما تختلف صفحة العارض عن صفحة TPdf المرتبطة، باستخدام مسار نقرة فأرة حقيقي بلا واجهة عبر Delphi و Lazarus و C++Builder
- تشغّل مجموعتا Delphi و Lazarus الآن 114 حالة لكل منهما، وتشغّل C++Builder الآن 99 حالة
Version 1.16.1
- تم إصلاح معالجة نقر الروابط في TPdfView بحيث تستخدم الإجراءات التلقائية للتعليقات التوضيحية والروابط الإلكترونية الصفحةَ المعروضة حاليًا في العارض، حتى عندما يكون مكوّن TPdf المرتبط متوقفًا على صفحة مختلفة
- تم تحصين TPdfThumbnailView ضد مراجع Pdf المعلّقة عند تدمير مكوّن TPdf المرتبط
- تمت إضافة تغطية انحدار لعمر مرجع المُصغّرات؛ تشغّل مجموعتا Delphi و Lazarus الآن 113 حالة لكل منهما، وتشغّل C++Builder الآن 98 حالة
- تم مزامنة README ووثائق الاختبار ومحتوى البحث/الفهرس في HTML Help ومخرجات حِزَم C++ المُولَّدة مع تحديثات الدمج من v1.7.0 حتى v1.16.0
Version 1.16.0
- تمت إضافة عرض Delphi PrintDialog جديد (Demo/Delphi/PrintDialog) يركّز على الطباعة بترتيب N-up (1 / 2 / 4 / 9 صفحات لكل ورقة) مع تصفية الصفحات الفردية / الزوجية، والعرض بتدرّج رمادي، وحدود اختيارية بعرض 1 بكسل للخلية. وهو مرافق صغير متعمَّد لعرض PrintPDF القائم، الذي يغطي بالفعل المعاينة والملفات الأخيرة والتكبير والقياس
Version 1.15.0
- تم إضافة مكوّن جديد TPdfThumbnailView (وحدة FPdfThumbnail) يعرض مُصغّر صفحة واحد لكل صف في لوحة جانبية قابلة للتمرير مع تظليل التمرير فوق العنصر والتحديد ونقر للتنقل. مُصمَّم ليجلس بجانب TPdfView بحيث يتمكن المستخدمون النهائيون من تصفّح مستند طويل حسب الصفحة
- المكوّن مسجّل في علامة تبويب اللوحة losLab جنبًا إلى جنب مع TPdf و TPdfView؛ الخصائص الرئيسية: Pdf، CurrentPageIndex، ThumbnailWidth، ThumbnailHeight، TextColor، HoverColor، SelectionColor، BorderColor، والحدث OnPageClick
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 112 حالة لكل منهما، ومجموعة C++Builder إلى 97 حالة، لتغطية القيم الافتراضية، ودورة حجم المُصغّر الكاملة، وقصّ القيم القصوى، ودورة اللون الكاملة، وإسناد معالج الأحداث
Version 1.14.0
- تمت إضافة عرض Delphi BatchExport جديد (Demo/Delphi/BatchExport) يوضح كيفية تحويل العديد من ملفات PDF إلى JPG في تمرير واحد باستخدام TPdf.LoadCustomDocument للتحميل المتدفق، و IPdfCancellationToken للإلغاء التعاوني، وأشرطة تقدّم إجمالية لكل ملف + لكل صفحة. يستخدم العرض مثيل TPdf واحد لكل ملف (PDFium نفسه ليس آمنًا للخيوط) ويفتح مجلد الإخراج في Explorer عند انتهاء الاستخراج بنجاح
Version 1.13.0
- تمت إضافة طبقة واجهة عرض غير متزامن إلى TPdfView من خلال ثلاث خصائص جديدة: AsyncRendering و LoadingText و LoadingColor. عندما تكون AsyncRendering مساوية لـ True يرسم مسار رسم الصفحة الواحدة مؤشرًا صغيرًا “Loading...” فوق الصفحة المعروضة بحيث تشترك التطبيقات التي تستخدم عاملًا خاصًا بها لعمليات العرض الطويلة في تأثير بصري متّسق
- تحافظ القيم الافتراضية على السلوك الحالي: AsyncRendering هي False، لذا التطبيقات التي لا تختار التفعيل لا ترى أي تغيير بصري
- توضّح الوثائق أن PDFium نفسه ليس آمنًا للخيوط — ولفعليًا تفريغ العرض إلى عامل، يجب على المُستدعي الإبقاء على TPdf واحد لكل عامل؛ ويُظهر عرض التصدير الدفعي القادم هذا النمط
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 106 حالات لكل منهما، ومجموعة C++Builder إلى 93 حالة، لتغطية القيم الافتراضية ودورة الخصائص الثلاث الكاملة
Version 1.12.0
- تمت إضافة معالجة روابط مدفوعة بالنقر إلى TPdfView. تتحكم خاصية LinkOptions الجديدة في السلوك التلقائي لأربعة أنواع من إجراءات روابط PDF: goto (قفزة صفحة)، و URI (ShellExecute)، و launch (ShellExecute)، و embedded GotoR (محجوز). تُمكّن القيم الافتراضية loAutoGoto و loAutoOpenURI؛ بينما تبقى loAutoLaunch و loAutoEmbeddedGoto معطّلة بحيث لا يمكن لنقرة عابرة تشغيل برنامج اعتباطي
- تمت إضافة حدثَي OnAnnotationLinkClick و OnWebLinkClick اللذين يُطلقان قبل أي إجراء تلقائي ويسمحان للتطبيقات بفحص الرابط ووضع علامة Handled عليه أو إعادة توجيهه (مثلًا، إلى مطالبة أمان)
- يعمل كشف نقر الروابط فقط عندما تكون الإيماءة نقرة بدلًا من سحب، باستخدام مرساة MouseDown جديدة بحيث تستمر إيماءات التحريك في التدفق عبر مسار التمرير الحالي دون تغيير
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 102 حالة لكل منهما، ومجموعة C++Builder إلى 91 حالة، لتغطية LinkOptions الافتراضية، ودورة الضبط الكاملة، وإسناد معالج الأحداث
Version 1.11.0
- تمت إضافة لمسات بصرية إلى TPdfView: ترسم خصائص PageShadowSize و PageShadowColor و PageBorderColor ظلًا منسدلًا اختياريًا أسفل مستطيل الصفحة وحدًا بعرض بكسل واحد حولها. تحافظ القيم الافتراضية على المظهر المسطح السابق (PageShadowSize = 0؛ يُرسم الحد بقيمة clBlack الافتراضية لكنه يندمج في الخلفية البيضاء الافتراضية حتى يغيّر المُستدعي الألوان)
- تمت إضافة خاصية SmoothScroll كعلامة اشتراك اختياري لرسم متحرّك تزايدي للتمرير في المستقبل؛ تعمل دورة الخاصية الكاملة اليوم وتم توصيلها بحيث تستطيع التطبيقات الاحتفاظ بالتفضيل، بينما لا يزال جانب العرض يستخدم سلوك التمرير الفوري الحالي
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 98 حالة لكل منهما، ومجموعة C++Builder إلى 89 حالة، لتغطية القيم الافتراضية، ودورة الخصائص الكاملة، وقصّ حجم الظل السالب
Version 1.10.0
- تمت إضافة إدراج صور مباشر من خلال أحمال زائدة (overloads) جديدة لـ TPdf.AddImage و TPdfView.AddImage تأخذ إما مسار ملف أو TBitmap، إضافةً إلى AddPicture المستندة إلى TPicture الموجودة سلفًا. تتعرّف AddImage(FileName) على أي تنسيق مُسجَّل لدى وحدات الرسوميات VCL أو LCL (BMP، PNG عبر وحدة PngImage، JPG، إلخ) وتمرّ عبر نفس خط الأنابيب الذي تستخدمه AddPicture بحيث يكون السلوك متطابقًا
- تتخطى AddImage(TBitmap) الوسيط TPicture، مما يُبسّط على المُستدعين الذين يحملون بالفعل TBitmap من أعمال العرض أو التوليد الدفعي
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 92 حالة لكل منهما، ومجموعة C++Builder إلى 84 حالة، لتغطية إدراج النقطية، وحدود كائن الصفحة، ورفض النقطية nil، وتحميل ملف BMP
Version 1.9.0
- تمت إضافة دعم مصفوفة تحويل عالية المستوى من خلال صف TPdfMatrix الجديد في وحدة FPdfMatrix. يغلّف TPdfMatrix FS_MATRIX الخاص بـ PDFium بواجهة OO لـ Translate و Scale و Rotate و HorizontalFlip و VerticalFlip و CentralFlip و Skew و Multiply، مناسبة لتركيب التحويلات قبل تمريرها إلى FPDFPageObj_SetMatrix وواجهات PDFium المشابهة
- تأخذ TPdfMatrix.Multiply لقطة صحيحة لعناصر المصفوفة الستة قبل حساب قيم الصف الجديدة، مما يصلح مشكلة كامنة كانت فيها تطبيقات Pascal البديلة تكتب فوق العناصر السابقة خلال نفس الاستدعاء وتنتج نتائج خاطئة لأي تركيب يتجاوز الإزاحة البحتة
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 88 حالة لكل منهما، ومجموعة C++Builder إلى 81 حالة، لتغطية الهوية، وإعادة التعيين، والإزاحة / التكبير / الانعكاس، وترتيب التركيب بعد الضرب، وحالة انحدار Multiply
Version 1.8.0
- تمت إضافة تحميل تدفق عند الطلب من خلال الطريقة الجديدة TPdf.LoadCustomDocument(AStream, AOwnsStream) وصف TPdfStreamAdapter المساعد، مدعومة بـ FPDF_LoadCustomDocument الخاصة بـ PDFium. يقرأ PDFium الآن كتلًا من TStream المُقدَّم فقط عند الحاجة، لذا لم تعد ملفات PDF الكبيرة جدًا أو البعيدة تتطلب نسخة في الذاكرة مسبقًا
- تمت إضافة ملكية تدفق اختيارية: يؤدي تمرير AOwnsStream = True إلى تسليم عمر TStream إلى TPdf، الذي يُحرّره عند تشغيل UnloadDocument
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 79 حالة لكل منهما، ومجموعة C++Builder إلى 75 حالة، لتغطية التحميل المتدفق عبر TFileStream، وتنظيف التدفق المُمتلَك، وعقد بقاء التدفق المُمتلَك خارجيًا بعد unload
Version 1.7.0
- تمت إضافة أوّليات إلغاء غير متزامن تعاوني في وحدة FPdfAsync الجديدة، تكشف عن IPdfCancellationToken / IPdfCancellationTokenSource ومُفرد PdfNoCancellationToken قابل لإعادة الاستخدام بحيث يمكن لتدفقات عمل العرض والتصدير طويلة المدى دعم دلالات إلغاء نظيفة من واجهة المستخدم
- تمت إضافة مُساعد خفيف TPdfFuture<T> يقوم بتشغيل عامل على خيط في الخلفية ويُرسل مغلف TPdfFutureResult<T> إلى الخيط الرئيسي، بحيث يميّز بين حالات النجاح والإلغاء والفشل
- تم توسيع مجموعات اختبارات الانحدار في Delphi و Lazarus إلى 76 حالة لكل منهما، ومجموعة C++Builder إلى 73 حالة، بتغطية مشتركة لحالة الإلغاء، والإلغاء مكرر النتيجة، وتوزيع الاستدعاءات، والتسجيل بعد الإلغاء
Version 1.6.10
- تمت إضافة وصول عالي المستوى TPdf.PrintPageRanges إلى تفضيل نطاق صفحات الطباعة لعارض PDF، يُعيد نطاقات صفحات تعتمد على رقم 1 لكود التطبيق
- تمت إضافة TPdf.SetFormFieldFlags / SetFormFieldFlagsAt ومساعدات TPdfView المطابقة بحيث تتمكن التطبيقات من تحديث أعلام حقول AcroForm عبر الواجهة العامة، بما في ذلك تغطية أعلام كلمة المرور والاختيار المتعدد
- تم تحصين تغطية ABI لربط PDFium من أجل FPDF_DWORD بحجم Windows، واستدعاءات FPDF_FILEACCESS، وحقول فتحة embedder الخاصة بـ V8
Version 1.6.9
- تمت إضافة روابط عرض Skia منخفضة المستوى لواجهات FPDF_RenderPageSkia و FPDF_FFLDrawSkia المُصدَّرة حديثًا في PDFium DLLs القياسية و V8 المرفقة
- تم توسيع فحوصات تغطية الربط العامة بحيث يتحقق تحميل DLL القياسي و V8 الآن من نقاط دخول العرض Skia جنبًا إلى جنب مع فحوصات إمكانيات V8/XFA الموجودة
Version 1.6.8
- تمت إضافة TPdf.SetTextPositions و TPdfSingleArray لتعيين مواضع كل حرف على كائنات نصية موجودة من خلال واجهة FPDFText_SetPositions المُصدَّرة حديثًا
- تمت ترقية FPDFText_SetPositions إلى ربط مطلوب لـ PDFium DLLs المرفقة الحالية، مع التأكيد على أن نقاط دخول عرض Skia تبقى غير متاحة لأن DLLs لا تصدّرها بعد
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 65 حالة لكل منها مع تغطية مواضع النص
Version 1.6.7
- تمت إضافة وصول عالي المستوى TPdf إلى إجراءات JavaScript في name-tree المستند، وإعادة أسماء الإجراءات والنصوص البرمجية من خلال JavaScriptAction و JavaScriptActions
- تمت إضافة TPdf.FileIdentifier لقراءة معرّفات trailer الدائمة والمتغيّرة كـ TBytes ثنائية دون بايت الإنهاء الخاص بـ PDFium
- تمت إضافة TPdf.PageBox و GetPageBox و SetPageBox لـ MediaBox و CropBox و BleedBox و TrimBox و ArtBox على الصفحة الحالية
- تم التأكيد على أن PDFium DLLs المرفقة الحالية تترك فقط نقاط دخول عرض Skia غير متاحة في وقت التشغيل لأن تلك الصادرات غير موجودة
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 64 حالة لكل منها مع تغطية JavaScript المستند، ومعرّف trailer، وصندوق الصفحة
Version 1.6.6
- تمت إضافة دعم وقت تشغيل لـ PDFium DLL الممكَّن بـ V8 المرفق. يحدد ضبط EnableV8Engine قبل التحميل الآن pdfium.v8.dll من شجرة DLLs\Win32 أو DLLs\Win64 ويكشف عن ربط V8/XFA-only عندما يوفّرها DLL المُحمَّل
- تمت إضافة V8FeaturesAvailable و XfaBStrHelpersAvailable و GetRecommendedV8Flags وروابط اختيارية منخفضة المستوى لـ FPDF_BStr_* و FPDF_GetRecommendedV8Flags و FPDF_GetArrayBufferAllocatorSharedInstance
- تم جعل FPDFText_SetPositions اختياريًا بحيث يستمر تحميل PDFiumPas مع PDFium DLLs التي لا تصدّر مُحدّد مواضع النص التجريبي ذاك
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 61 حالة لكل منها مع تغطية إمكانيات DLL القياسي و V8
Version 1.6.5
- تمت إضافة فحص شجرة بنية Tagged PDF عبر TPdf.StructureElements و TPdfView.StructureElements، بما في ذلك نوع العنصر، والعنوان، والنص البديل، والنص الفعلي، ونص التوسع، واللغة، ومعرّفات marked-content، وعدد الأطفال، وعدد السمات
- تمت إضافة اختيار وضع طباعة PDFium في Windows من خلال TPdfPrintMode و SetPdfPrintMode، يغطي أوضاع طباعة EMF، والنص فقط، و PostScript، و pass-through، و image-mask، و Type 42
- تمت إضافة روابط منخفضة المستوى لبقية صادرات PDFium DLL القياسية العامة التي تغطي إجراءات JavaScript، وأعلام حقول النموذج / لون خط التعليق التوضيحي، وحالة كائن الصفحة النشطة، والإدراج المُفهرس، وقيم float لـ content-mark، وبيانات ICC لصورة، وإزالة كائن النموذج، ومواضع النص
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 59 حالة لكل منها مع تغطية شجرة بنية Tagged PDF، ووضع الطباعة، وربط الصادرات العامة
Version 1.6.4
- تم تحديث عروض Delphi و C++Builder و Lazarus لفتح ملفات PDF المُولَّدة، والنصوص/الصور المُصدَّرة، ومجلدات الإخراج الدفعي تلقائيًا بعد الإنشاء الناجح
Version 1.6.3
- تم توسيع مجموعات اختبارات الانحدار المُوائَمة في Delphi و C++Builder و Lazarus إلى 56 حالة لكل منها مع تغطية TPdfView GUI لمساعدات fit-zoom، ودورات إحداثيات الجهاز/الصفحة الكاملة، واختبار إصابة الأحرف، وتحريك الفأرة من خلال عناصر تحكم العارض ذات النوافذ المخفية
- تستخدم مادة اختبار TPdfView الآن حجم عارض صريحًا وأصنافًا فرعية للاختبار فقط تمارس معالجات الفأرة المحمية مع إبقاء المجموعات بلا واجهة بالكامل
Version 1.6.2
- تم إصلاح TPdf.AddPage(0, ...) بحيث تصبح الصفحة الأولى المُدرجة هي الصفحة النشطة فورًا. تستمر أمثلة الكود الحالية في العمل، بينما تُبلّغ PageNumber الآن عن صفحة صحيحة معتمدة على رقم 1 بعد الإدراج
- تم مزامنة إصدار حزمة Lazarus وتم توسيع مجموعات اختبارات الانحدار المُوائَمة في Delphi و C++Builder و Lazarus إلى 52 حالة لكل منها
Version 1.6.1
- تم إصلاح اشتراط حد أدنى من الإصدار غير صحيح في مُدقّق توافق إصدار PDF في v1.6.0: تمت إعادة تصنيف إجراء SetState من PDF 1.5 إلى PDF 1.2، تطابقًا مع مرجع PDF 1.2 القسم 6.9.9. أهداف SaveAs لـ PDF 1.3 / 1.4 التي تحتوي على إجراءات SetState تُحفظ الآن بشكل صحيح بدلًا من رفضها
- تمت إضافة فحوصات معجمية مطابقة لـ PDF 1.2 وفقًا لنفس قسم المواصفات: تُحجب الآن إجراءات Sound و Movie و NOP وفضاء ألوان Separation عندما يكون الإصدار الهدف المختار أقدم من PDF 1.2
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 50 حالة لكل منها بإضافة اختبار قبول إيجابي لـ PDF 1.4 SetState يُثبّت الحد المُصحَّح
Version 1.6.0
- تم تحصين أهداف SaveAs الصريحة لـ PDF 1.0 إلى PDF 1.7 بمُدقّق ميزات إصدار كامل يغطي جدول ميزات PDF 1.1 إلى ISO 32000-1 الزمني بالكامل. يحجب المُدقّق الآن عمليات الحفظ التي تحتوي على إدخالات قاموس، أو أسماء filter، أو أنواع فرعية للتعليقات التوضيحية، أو أنواع إجراءات، أو خطوط، أو فضاءات ألوان، أو معاملات تشفير مُقدَّمة بعد الإصدار الهدف المختار. أمثلة: JBIG2Decode (1.4+)، و MarkInfo / Tagged PDF (1.4+)، و OutputIntents (1.4+)، و ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+)، وتعليقات Polygon / PolyLine / Caret / Screen / Watermark / Redact التوضيحية، وتشفير AES و AES-256 (CFM AESV2 / AESV3)، وإدخالات فهرس Perms / Legal / Requirements / NeedsRendering، والإجراءات المُحدَّدة بالإصدار مثل JavaScript و Trans و SetState و Rendition و GoToE و GoTo3DView كلها تُرفض عندما لا يستطيع إصدار PDF الهدف تمثيلها
Version 1.5.13
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 49 حالة لكل منها، بإضافة تغطية مباشرة لرفض فضاءات ألوان ICCBased، و MarkInfo لـ Tagged PDF، وتعليقات Polygon التوضيحية، وتشفير AES (V2)، وتعليقات Redact التوضيحية مقابل أهداف PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 على التوالي
Version 1.5.12
- تم إصلاح المعالجة اللاحقة لـ SaveAs من أجل إعادة كتابة الفهرس التزايدي. يتحقق PDFiumPas الآن من أحدث كائن غير مباشر مكرر، بحيث تُستبدل تجاوزات /Version للفهرس الحالية بشكل صحيح عند الحفظ إلى إصدار PDF هدف أقدم صريح
- تم توسيع مجموعات اختبارات الانحدار في Delphi و C++Builder و Lazarus إلى 44 حالة لكل منها، بإضافة تغطية مباشرة لاستبدال /Version للفهرس القديم، وتطبيع إصدار فهرس PDF 1.4، ورفض ميزات الشفافية والمجموعات المحمولة عندما لا يستطيع إصدار PDF الهدف المختار تمثيلها
Version 1.5.11
- تم تحصين مخرجات SaveAs ذات الإصدارات لأهداف PDF 1.3 و 1.4 و 1.5 و 1.6 و 1.7 الصريحة. يُطبّع PDFiumPas الآن علامات إصدار الفهرس، ويحافظ على OpenAction الافتراضي Fit Height آمنًا للإصدار، ويرفض ميزات PDF الأحدث عندما لا يستطيع الإصدار الهدف المختار تمثيلها
- تمت إضافة تغطية انحدار في Delphi و C++Builder و Lazarus تحفظ وتُعيد تحميل ملفات PDF 1.3 إلى PDF 1.7 الصريحة، وتتحقق من العنوان النهائي، و OpenAction الافتراضي Fit Height، وإصدار PDF المُبلَّغ عنه
Version 1.5.10
- تم الانتقال من الخيار B في المواصفات إلى الخيار C بإضافة اختبارات استدلالية لـ TPdfView في جميع مجموعات IDE الثلاث (Tests.PdfView). تبني كل مجموعة TForm والد مخفي (عبر TForm.CreateNew في جانب Pascal و
new TForm(NULL, 0)في جانب C++Builder)، وتُعيد توطين TPdfView، وتضبط Active := True، ثم تتحقق من سطح الدورة الكاملة لـ PageCount و PageNumber الافتراضي و Zoom و Rotation و DisplayMode، وأن View.Text يطابق TPdf.Text الأساسي. تشغّل كل مجموعة IDE الآن 39 حالة
Version 1.5.9
- تم الانتقال من الخيار A في المواصفات إلى الخيار B بإضافة اختبارات عرض استدلالية في جميع مجموعات IDE الثلاث. تستدعي كل مجموعة Tests.Render الدالة TPdf.RenderPage على sample.pdf وتتحقق من ثلاث إشارات صلبة بدلًا من checksums بايت ببايت: تتطابق النقطية المُعادة تمامًا مع حجم البكسل المطلوب؛ تنتج الأحجام المطلوبة المختلفة (200x100، 64x256) نقطيات متطابقة؛ والصفحة المعروضة تكون 95% خلفية بيضاء على الأقل مع 50 (Lazarus: 20) بكسلًا غير أبيض على الأقل لتمييز النص المُسوّى. تشغّل كل مجموعة IDE الآن 33 حالة
Version 1.5.8
- تم إغلاق مجموعات خطة اختبار A(2) الأصلية بإضافة سبعة اختبارات انحدار إضافية لكل IDE: TPdf.CreateAnnotation تبني تعليق anHighlight بالإضافة إلى دورة SaveAs/LoadDocument كاملة، ومسار قراءة AcroForm على Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType هي ftAcroForm، FormFieldCount > 0، تُسقط FlattenAllPages الحقول إلى صفر)، وتغطية مسار قراءة هادئة لـ Bookmarks و LinkAnnotationCount و WebLinkCount على مستند لا يحتوي على أي من تلك الميزات. تشغّل كل مجموعة IDE الآن 30 حالة
Version 1.5.7
- تم توسيع مجموعات Delphi (DUnitX) و Lazarus (FPCUnit) و C++Builder (GoogleTest) بسبعة اختبارات انحدار جديدة لكل IDE: PdfVersion و PageRotation و TPdf.FindFirst / FindNext للبحث عن سلسلة جزئية، وتطابق CharacterOrigin / CharacterRectangle مع نقطة أصل AddText، وتسجيل CreateAttachment بالإضافة إلى دورة SaveAs/LoadDocument، ودورة AddText كاملة لنص بعلامات تشكيل تتحقق من أن مسار تضمين TrueType الأوروبي في v1.3.0 يحافظ على نقاط شيفرة Latin-1 supplemental سليمة
Version 1.5.6
- ملفات PDF المحفوظة تحصل الآن على إجراء فتح افتراضي Fit Height للصفحة الأولى عندما لا يكون هناك OpenAction موجود، بحيث تعرض قارئات PDF المستندات المُولَّدة في البداية بتكبير ارتفاع الصفحة
- تمت إضافة تغطية انحدار في Delphi و Lazarus و C++Builder لـ OpenAction المُولَّد وضبط Fit Height
Version 1.5.5
- تمت إضافة اختبارات انحدار عبر مجموعات Delphi (DUnitX) و Lazarus (FPCUnit) و C++Builder (GoogleTest) لسطح API الخاص بفحص الأحرف والخطوط المُفهرس (TPdf.FontBaseName و FontFamilyName و FontWeight و FontItalicAngle و FontData و FontIsEmbedded و CharacterFontWeight و CharacterAngle). تتخطى مجموعة Lazarus عمدًا FontData، التي تُسبب حاليًا access-violates داخل FPDFFont_GetFontData تحت FPC
Version 1.5.4
- تمت إضافة عرض Attachment لـ C++Builder مَنقول من عينة Delphi، يغطي إنشاء ملفات PDF، وإضافة مرفقات الملفات المضمنة وسردها واستخراجها وحذفها وحفظها مع عرض النوع الفرعي MIME
Version 1.5.3
- تم كشف حساب صفحة spread الذي يدعم أوضاع الصفحتين في TPdfView كمساعد على مستوى الوحدة ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). السلوك لم يتغير؛ يجعل المساعد القاعدة المدركة للغلاف قابلة للاختبار بشكل مستقل دون إنشاء مثيل للعارض
- تمت إضافة خمسة اختبارات انحدار عبر مجموعات Delphi (DUnitX) و Lazarus (FPCUnit) و C++Builder (GoogleTest) تغطي المستندات الفارغة، والإقران القياسي للصفحتين، وصفحة الغلاف الواقفة وحدها في dmTwoPageContinuousWithCover، وأزواج ما بعد الغلاف، وسلوك قصّ الصفحة الأخيرة / خارج النطاق
Version 1.5.2
- تمت إضافة دعم لغة المستند من خلال TPdf.Language، مُربَط بإدخال فهرس PDF /Lang
- تمت إضافة الوصول إلى النوع الفرعي MIME للمرفقات مع TPdf.AttachmentType
- تمت إضافة anRedact إلى TPdfAnnotationSubtype وتمت إضافة مساعدات إزالة كائن الصفحة لـ TPdf و TPdfView
- تم تحديث عروض العارض والمرفقات لعرض معلومات اللغة الجديدة ونوع المرفق عند توفرها
Version 1.5.1
- تمت إضافة dmTwoPageContinuousWithCover لـ TPdfView بحيث تستطيع تخطيطات العارض إظهار الصفحة الأولى وحدها ثم الاستمرار بنشرات صفحتين
- تم تحديث عروض MultiPageViewer في Delphi و C++Builder و Lazarus لكشف وضع عرض الصفحتين المدرك للغلاف
Version 1.5.0
- تمت إضافة مجموعات اختبار تلقائية على مستوى استدلالي لـ Delphi (DUnitX) و Lazarus (FPCUnit) و C++Builder (GoogleTest). تشترك المجموعات الثلاث في مادة PDF واحدة في Tests\TestData وتشغّل نفس الحالات السبع لكل منها، تغطي تحميل المستند، ومعلومات الصفحة، واستخراج النص، والبيانات الوصفية، ودورة الحفظ الكاملة، والتحقق من ترويسة PDF، وخاصية Compressed
Version 1.4.3
- تم تحسين عرض FontProperties لإظهار واجهات بيانات وصفية للخطوط في كل من TPdfView و TPdf، بما في ذلك مقابض الخطوط، وحجم بيانات الخط، ومقاييس الأحرف
- تمت إضافة خصائص فحص الأحرف والخطوط المُفهرسة في TPdfView وتم تحديث عرض FontProperties للاستعلام عن البيانات الوصفية لخط الكائن النصي
Version 1.4.2
- تمت إضافة خصائص فحص الأحرف والخطوط المُفهرسة إلى TPdf لتحليل النص دون الحاجة إلى عارض. تستعلم خصائص مُفهرسة بالأحرف (CharacterAngle و CharacterFontSize و CharacterFontWeight) عن مقاييس لكل حرف من تدفق نص الصفحة الحالية. تستعلم خصائص مُفهرسة بكائن الصفحة (FontAscent و FontBaseName و FontData و FontDescent و FontFamilyName و FontHandle و FontIsEmbedded و FontItalicAngle و FontWeight) عن البيانات الوصفية للخط لأي كائن نصي على الصفحة الحالية
- تُعيد كائنات الصفحة غير النصية قيمًا صفرية أو فارغة آمنة لجميع خصائص Font* بدلًا من إثارة خطأ، مما يجعل من السهل التكرار على كل كائن صفحة وفحص الكائنات النصية فقط
- تقرأ FontBaseName اسم الخط الأساسي PostScript مباشرةً بدلًا من الرجوع إلى اسم عائلة الخط، مما يوفر معرّفًا أكثر دقة للخطوط المضمنة
Version 1.4.1
- تمت إضافة نسخ C++Builder و Lazarus من عرض EuropeanText بحيث تستطيع جميع عائلات IDE المدعومة التحقق من توليد النص الأوروبي بعلامات تشكيل باستخدام خطوط TrueType النظامية
- تمت إضافة نسخ C++Builder و Lazarus من عرض FormFill، بما في ذلك ملفات PDF نموذجية للنماذج، وتحرير الحقول، وإعادة توليد المظهر، وحفظ ممتلئ، وتدفقات عمل الحفظ المُسطّح
Version 1.4.0
- تمت إضافة دعم Lazarus / Free Pascal: توفر حزمة PDFiumLaz الجديدة نفس مكونات TPdf و TPdfView والمكونات ذات الصلة تحت مجموعة ودجت LCL، مما يمدّ المكتبة إلى Lazarus IDE ومُترجم Free Pascal جنبًا إلى جنب مع حِزَم Delphi و C++Builder الموجودة
- تمت إضافة نسخ Lazarus من العروض بحيث يستطيع مطورو Lazarus استكشاف كل ميزة بأمثلة قابلة للتشغيل
- تم إصلاح مشكلة تجميع Lazarus حيث كانت التعريفات الشرطية في Free Pascal تُقيَّم مع فحوصات إصدار مُترجم Delphi، مما يتسبب في محاولة بناءات FPC حل أسماء وحدات خاصة بـ Delphi وفشلها
Version 1.3.1
- تم توثيق تدفق عمل تسطيح النموذج في مجموعة المساعدة: GenerateFormAppearances و FlattenPage و FlattenAllPages وثوابت FLAT_* / FLATTEN_* ذات الصلة مغطاة الآن في TPdf و TPdfView ومرجع الـ API ومصفوفة الميزات وأمثلة البرمجة
- تم إصلاح جدول البنية في صفحة النظرة العامة بحيث تسرد وحدات الربط الفعلية المرفقة في مجلد Lib
Version 1.3.0
- تحسّن دعم الأحرف الأوروبية عند إنشاء ملفات PDF. تحمّل TPdf.AddText الآن وتخزّن في الذاكرة المخبأة خط TrueType النظامي المطابق قبل إنشاء كائن نصي، مما يحافظ على الأحرف ذات علامات التشكيل من اللغات التشيكية والفرنسية والألمانية والإسبانية والبرتغالية والبولندية والتركية التي لا تستطيع الخطوط القياسية المدمجة في PDFium تمثيلها
- التطبيقات التي كانت سابقًا تنتج علامات استفهام أو رموز glyphs بديلة لنص لاتيني غير ASCII ستُعرض الآن بشكل صحيح دون أي تغيير في الكود. تمت إضافة عرض EuropeanText لتوضيح الميزة
Version 1.2.0
- تمت إضافة تحديث مظهر AcroForm إلى TPdf: استدعاء GenerateFormAppearances بعد تعديل قيم FormField[] يُحدّث مظهر العنصر بحيث تكون القيم المعبّأة مرئية في قارئات PDF القياسية دون الحاجة إلى جلسة تحرير تفاعلية
- تمت إضافة مساعدات تسطيح النماذج إلى TPdf (FlattenPage / FlattenAllPages) و TPdfView (FlattenPage لصفحة العرض الحالية). يُضمّن التسطيح بشكل دائم قيم الحقول المعبّأة كمحتوى صفحة عادي ويُزيل طبقة النموذج التفاعلي، مما يُنتج مستندًا ثابتًا يُعرض باتساق عبر جميع العارضات
- تمت إضافة Demo\Delphi\FormFill لتوضيح تدفقات عمل الملء والحفظ، والملء والتسطيح، باستخدام عينة PDF لـ AcroForm
Version 1.1.2
- تمت إضافة ضغط تدفق PDF وقت الحفظ. تُعيد خاصية TPdf.Compressed الجديدة (مُمكَّنة افتراضيًا) كتابة تدفقات المحتوى غير المضغوطة كتدفقات مضغوطة بـ FlateDecode عند الحفظ، مما يُقلّل حجم الملف بشكل ملحوظ لملفات PDF المُولَّدة برمجيًا. التطبيقات التي تتطلب مخرجات غير مضغوطة عادية يمكنها ضبط Compressed إلى False قبل استدعاء SaveAs
Version 1.1.1
- بناءات حزمة Win64 لم تعد تتضمن وحدات تسجيل وقت التصميم، مما يمنع فشل وقت البناء عند نشر حزمة Win64 في سياق وقت تشغيل فقط
- يبحث مُحمّل PDFium DLL الآن في المجلد الفرعي للتطبيق Win32 أو Win64 أولًا، باستخدام الأسماء القياسية pdfium.dll و pdfium.v8.dll، ويرجع إلى المجلد المسطح للتطبيق ومجلد نظام Windows. هذا يطابق تخطيط DLL المرفق مع حزمة المكوّن، مما يجعل التثبيت مباشرًا
Version 1.1.0
- تم إصلاح عيب قصّ بصري في وضع الصفحتين في TPdfView: كان محتوى الصفحة ينزف عبر الفجوة لأن كلًا من بلاطات الصفحة اليسرى واليمنى كانت تتشارك مستطيل قصّ واحد. تقصّ كل بلاطة الآن بشكل مستقل بحيث يظل المحتوى داخل حدود صفحتها
- تم تحسين رسالة الخطأ في عرض Delphi عندما لا يمكن العثور على PDFium DLL، مما يوفر مطالبة أوضح باسم وموقع DLL المتوقع