یادداشتهای انتشار PDFiumPas
تاریخچه نسخه برای قابلیتهای قابلمشاهده، رفع اشکالها، بهبودهای نمایشگر، تولید سند، خروجی PDF/A، رندر و بهروزرسانیهای مستندات PDFiumPas
آخرین نسخه
- آخرین نسخه: 2.57.0؛ تاریخ انتشار:
Version 2.57.0
افزوده شده (Added)
TPdfThumbnailView.Orientationچیدمانهای عمودی و افقی تصویرسازی را پشتیبانی میکند در حالی که پیشفرض عمودی موجود را حفظ میکندFirstVisiblePageIndex،LastVisiblePageIndexوEnsureCurrentPageVisibleنمایگاه تصویرسازی را با شاخصهای صفحه مبتنی بر یک نشان داده و کنترل میکنند
تغییر یافته (Changed)
- تغییر
CurrentPageIndexاکنون تصویرسازی انتخابشده را در هر یک از دو جهت به نمایگاه میبرد - آزمونهای Delphi، Lazarus و C++Builder اکنون پیشفرضهای جهت، تعویض، محدودههای قابلمشاهده و دیدپذیری صفحه انتخابشده را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.57.0 را گزارش میکنند
Version 2.56.2
تغییر یافته (Changed)
HighlightSearchText،AddSearchTextHighlightوClearHighlightاکنون فقط مستطیلهای دستگاه برای محدودههای جستجویی که افزوده یا حذف شدهاند را باطل میکنند به جای اینکه کل نمایشگر را دوباره رنگآمیزی کنند- جایگزینی برجستهسازیها با همان تطابقها یا افزودن تطابقهای تکراری دیگر یک رنگآمیزی مجدد غیرضروری زمانبندی نمیکند
- آزمونهای Delphi، Lazarus و C++Builder اکنون باطلسازی محدود، بهروزرسانیهای همتوان، پاک کردن و ایمنی نمای غیرفعال را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.56.2 را گزارش میکنند
Version 2.56.1
تغییر یافته (Changed)
TPdfThumbnailViewاکنون بیتمپهای رندرشده را برای صفحاتی که در سراسر رنگآمیزیهای مجدد و موقعیتهای اسکرول مجاور قابلمشاهده باقی میمانند بازاستفاده میکند- کش فقط محدوده صفحه قابلمشاهده فعلی را نگه میدارد و ورودیها را دقیقاً هنگامی که صفحات از آن محدوده خارج میشوند، سند تخصیصیافته تغییر میکند یا ابعاد تصویرسازی تغییر میکند آزاد میکند
- آزمونهای Delphi، Lazarus و C++Builder اکنون بازاستفاده کش، هرس نمایگاه، باطلسازی اندازه، جایگزینی سند و تخریب مؤلفه را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.56.1 را گزارش میکنند
Version 2.56.0
افزوده شده (Added)
TPdfView.CutSelectedFormTextToClipboardوTPdfView.PasteFormTextFromClipboardویرایش بریدهدان یونیکد را برای ویجت فرم قابلویرایش متمرکز فراهم میکنند
تغییر یافته (Changed)
- ویرایشگرهای فرم متمرکز اکنون کلیدهای میانبر استاندارد کپی، برش، چسباندن و انتخاب همه را قبل از ارسال ورودی متن به PDFium مدیریت میکنند
- برش و چسباندن فیلدهای فقطخواندنی و نشستهای بدون مجوز پرکردن یا تغییر فرم را رد میکنند، در حالی که برش قبل از حذف متن انتخابشده با موفقیت کپی میکند
- آزمونهای Delphi، Lazarus و C++Builder اکنون فراخوانیهای بدون تمرکز، رفتوبرگشت میانبر و رفتار رد فقطخواندنی را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.56.0 را گزارش میکنند
Version 2.55.0
افزوده شده (Added)
TPdfView.AddSearchTextHighlightتطابقهای یکتا برای عبارت جستجوی دیگر را به همپوشانی صفحه فعلی میافزاید و اجازه میدهد چندین پرسوجو با هم برجسته باقی بمانند
تغییر یافته (Changed)
HighlightSearchTextهمچنان نقطه ورودی جایگزین است و اکنون پویشگر افزایشی را به اشتراک میگذارد، در حالی که محدودههای کاراکتر تکراری نادیده گرفته میشوند وClearHighlightمجموعه انباشته کامل را حذف میکند- آزمونهای Delphi، Lazarus و C++Builder اکنون انباشت پرسوجوی متمایز و سرکوب محدوده تکراری را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.55.0 را گزارش میکنند
Version 2.54.0
افزوده شده (Added)
TPdfاکنون تصاویر لحظهای کامل شیء-صفحه، بهروزرسانیهای سبک دستهای، تبدیلهای همسان اشیاء، قطعات مسیر، مسیرهای برش و فرزندان Form XObject را نشان میدهد- بازرسی کاراکتر اکنون شامل رنگهای پر و خط، نام و پرچمهای قلم، مرزهای شل گلیف، ماتریسهای مؤثر، دستگیرههای شیء-متن و تبدیل شاخص کاراکتر-به-متن است
- حاشیهنویسیها اکنون هندسه مرز و جریانهای ظاهر normal، rollover و down را رفتوبرگشت میکنند
- دسترسیهای جدید تصویرسازی raw و decoded، تبدیلهای محتوای-صفحه و حاشیهنویسی، و
RenderPageWithMatrixمسیرهای پیشرفته مستقیم رندر و ویرایش را فراهم میکنند
تغییر یافته (Changed)
- تغییرات سبک شیء-صفحه میتوانند بهعنوان یک دسته ثبت شوند تا PDFium محتوای صفحه را فقط یکبار بازتولید کند
- رندر ماتریسی زمانی از مسیر بیتمپ بدونکپی موجود استفاده میکند که چیدمان بیتمپ مقصد سازگار باشد
Version 2.53.1
اصلاح شده (Fixed)
- عنوان داخلی منوی Copy چینی اکنون از نقاط کد یونیکد مستقل از کدگذاری استفاده میکند و در ساختهای Lazarus بهدرستی نمایش داده میشود
- زنجیرهابزارهای قدیمیتر Delphi میتوانند
FPdfAsyncرا زمانی که واحدWinapi.Windowsآنها اعلامGetTickCount64را حذف میکند کامپایل کنند
Version 2.53.0
افزوده شده (Added)
- تجهیزات آزمون جدید
Tests.ApiCoverageکه APIهای عمومی TPdf را که قبلاً پوشش آزمون انتها-به-انتها صفر داشتند پوشش میدهد:GetPageBox/SetPageBox(خواندن/نوشتن MediaBox/CropBox، خطاهای جعبه مفقود و رفتوبرگشت ذخیره)،FlattenPage/FlattenAllPages(مقدار بازگشتی و حفظ تعداد صفحه)،GenerateFormAppearances(بدون عمل بر روی اسناد غیر فرم)،SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 با رفتوبرگشت گذرواژه — تأیید میکند که فایل رمزگذاریشده بدون گذرواژه از باز شدن امتناع میکند و با آن باز میشود)، اعتبارسنجی مرزDeletePage(صفحه 0 و خارج از محدودهEPdfErrorرا برمیکنند)، و نگهبانهای حاشیهنویسیHasContents/HasAuthorمعرفیشده در v2.38.0 (تأیید میکند کهDefault(TPdfAnnotation)آنها راFalseمیگذارد)
Version 2.52.0
افزوده شده (Added)
TPdfView.CopySelectedFormTextToClipboardانتخاب متن درون ویجت AcroForm متمرکز را بهعنوانCF_UNICODETEXTبه بریدهدان ویندوز کپی میکند
تغییر یافته (Changed)
- عملیاتهای کپی متن-صفحه و فرم متمرکز اکنون از همان نویسنده دفاعی بریدهدان یونیکد به اشتراک میگذارند و وقتی انتخابشان خالی است بریدهدان را بدون تغییر رها میکنند
- آزمونهای Delphi، Lazarus و C++Builder اکنون فراخوانیهای کپی فرم غیرفعال یا غیرمتمرکز و یک رفتوبرگشت انتخاب فرم متمرکز از طریق بریدهدان ویندوز را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.52.0 را گزارش میکنند
Version 2.51.0
افزوده شده (Added)
TPdfView.SelectLineAtخط متن بصری حاوی یک صفحه مبتنی بر یک و یک شاخص کاراکتر مبتنی بر صفر را بدون نیاز به ورودی ماوس انتخاب میکند
تغییر یافته (Changed)
- انتخاب خط برنامهای، انتخاب سهبار-کلیک و
Shift+HomeیاShift+Endاکنون از یک مدل مرز خط جعبه-کاراکتر به اشتراک میگذارند - آزمونهای Delphi، Lazarus و C++Builder اکنون انتخاب خط پایدار و شاخصهای صفحه یا کاراکتر نامعتبر را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.51.0 را گزارش میکنند
Version 2.50.0
افزوده شده (Added)
TPdf.LoadDocumentاکنون یک پنجرهIndexمبتنی بر صفر وCountرا در یک بافرTBytesمیپذیرد و اجازه میدهد PDFهای جاسازیشده بدون تخصیص یک برش آرایه-بایت موقت بارگذاری شوند
تغییر یافته (Changed)
- بارگذاری محدوده-بایت پنجرههای منفی یا خارج از محدوده را قبل از تغییر وضعیت سند رد میکند و گزینههای مدتعمر بافر بافرشده و قرضگرفتهشده موجود را حفظ میکند
- آزمونهای Delphi، Lazarus و C++Builder اکنون پنجرههای PDF جاسازیشده و آرگومانهای محدوده-بایت نامعتبر را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.50.0 را گزارش میکنند
Version 2.49.1
افزوده شده (Added)
TPdfView.FitModeاکنونpfmFitHeightرا برای برازش صفحه فعلی به ارتفاع قابل مشاهده نمایگاه با امکان اسکرول افقی در صورت نیاز پشتیبانی میکند
اصلاح شده (Fixed)
- حالتهای برازش اکنون پس از اینکه تغییر دیدپذیری نوار اسکرول ناحیه کلاینت را تغییر داد همگرا میشوند و نتایج fit-page، fit-width و fit-height را بین VCL و LCL سازگار نگه میدارند
- آزمونهای نمایشگر Delphi وLazarus وC++Builder اکنون انتخاب
pfmFitHeightو رفتوبرگشتهای شمارش را پوشش میدهند TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.49.1 را گزارش میکنند
Version 2.49.0
افزوده شده (Added)
- سطح پیوند عمومی PDFium اکنون همه 470 تابع صادرشده در سرصفحههای بازبینیشده را پوشش میدهد، از جمله دسترسی به توضیحات پیوست از طریق
FPDFAttachment_SetDescriptionوFPDFAttachment_GetDescription TPdfاکنون توضیحات پیوست، اعتبار ارجاع متقاطع، انحرافات پایان trailer، بازبینی security-handler، بارگذاری حافظه 64 بیتی، محدودههای بایت امضا، محدودههای متن پیوند وب و تصاویر لحظهای گستردهتر داده تصویر، فیلتر، فراداده و نمایه ICC را نشان میدهد- دستیارهای فرم اکنون تمرکز میدان بومی، پرسوجوها و بهروزرسانیهای گزینه انتخاب متمرکز، ارسال چرخ ماوس، ضربههای جوهر قابل نوشتن و همپوشانیهای فرم پس از رندر پیشرونده را پشتیبانی میکنند
تغییر یافته (Changed)
FormFieldCount، شاخصهای میدان فرم و ترتیب تب اکنون فقط حاشیهنویسیهای ویجت را توصیف میکنند به جای شامل کردن حاشیهنویسیهای صفحه نامرتبط- صفحات
TPdfبدون رابط اکنون وارد چرخه حیات صفحه پر کردن فرم میشوند و از آن خارج میشوند تا تمرکز بومی و APIهای میدان متمرکز بدونTPdfViewکار کنند - صادرات توضیحات پیوست بر اساس قابلیت محدود شدهاند تا برنامههایی که از یک ساخت قدیمیتر PDFium استفاده میکنند همچنان بتوانند کتابخانه را بارگذاری و قابلیت غیرقابل دسترس را تشخیص دهند
اصلاح شده (Fixed)
- رندر پیشرونده صفحه اکنون کنترلهای فرم را زمانی که پر کردن فرم فعال است نقاشی میکند
- آزمونهای Delphi وLazarus وC++Builder اکنون تشخیصهای جدید سند، توضیحات پیوست، مسیرهای جوهر، رفتار فرم، محدودههای بایت امضا، محدودههای پیوند وب و فراداده تصویر را پوشش میدهند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.49.0 را گزارش میکنند
Version 2.48.0
افزوده شده (Added)
TPdfMatrixاکنون کارخانهها، همسانهسازی و انتساب، تشخیصهای حالت متناهی و برگشتپذیری، مقایسه مبتنی بر تلورانس، دسترسی ترجمه، گزارش دترمینان و تجزیه آفین را نشان میدهد- ترکیب prepend، چرخش آگاه به محور، مقیاسگذاری، اریب و برگردانها، به علاوه نگاشت مستطیلهای stretch و contain و cover جریانهای کار فضای محلی و طرحبندیهای برازششده را بدون حساب دستی ضرایب پشتیبانی میکنند
- دسترسی معکوس غیرجهشدهنده، نگاشت نقطه معکوس، تبدیلهای بردار و چهارضلعی، دستههای پویای نقطه و مستطیل، واریانتهای درجا و مرزهای تبدیلشده یکگذره سطح هندسی قابل استفاده مجدد را گسترش میدهند
تغییر یافته (Changed)
- ترجمه، مقیاسگذاری و برگردانهای محور اکنون فقط ضرایب تحت تأثیر را بهروزرسانی میکنند به جای مسیریابی از طریق ضرب آفین عمومی
- تبدیل مستطیل ورودی خود را یکبار نرمالسازی میکند، در صورت امکان از مسیر دقیق تخصصی همراستای محور استفاده میکند و مرزهای چرخیده عمومی را بدون رکوردهای نقطه موقت محاسبه میکند
- تبدیلهای دسته نقطه و مستطیل یک آرایه نتیجه تخصیص میدهند یا ذخیره فراخوان را استفاده مجدد میکنند، در حالی که مرزهای نقطه تبدیلشده در یک گذر بدون آرایه میانی انباشته میشوند
اصلاح شده (Fixed)
- نگاشت مستطیل نتایج با اندازه صفر، نامتناهی و سرریز
Singleرا پیش از انتشار ماتریس غیرقابل استفاده رد میکند - آزمونهای Delphi وLazarus وC++Builder اکنون ترتیب ترکیب، ناورداهای محور، رفتوبرگشتهای معکوس، مستطیلهای برازششده، تجزیه و رفتار هندسه انبوه را تأیید میکنند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.48.0 را گزارش میکنند
Version 2.47.0
افزوده شده (Added)
FPdfAsyncاکنون دلایل و پیامهای لغو ساختاریافته، ثبتنامهای فراخوانی قابل حذف، منابع مبتنی بر زمانسنج، انتظار لغو و عملیاتهای try-cancel اتمی را از طریق رابطهای گسترشیافتهای که API اصلی را حفظ میکنند فراهم میکندTPdfFuture<T>.RunExارسال پاسخ و اولویت کارگر قابل پیکربندی را اضافه میکند در حالی که پاکتهای نتیجه شناسههای عملیات، اعتبار مقدار، نامهای کلاس استثنا، زمانسنجی تکمیل و کمککنندگان تکمیل قابل استفاده مجدد را نشان میدهندTPdfAsyncExecutorیک استخر کارگر ثابت قابل استفاده مجدد با چهار خط اولویت FIFO، فشارپسین صف محدود اختیاری، دستههای وظیفه قابل لغو، انتظار آگاه به زمانسنج، تصاویر لحظهای وظیفه، آمار تجمیعی و خاموشی منطقی را اضافه میکند
تغییر یافته (Changed)
- کارهای ناهمگام تکرارشونده میتوانند رشتههای کارگر و عملیاتهای صف O(1) را استفاده مجدد کنند به جای ایجاد رشته برای هر وظیفه، در حالی که تکمیل همگامشده برای میزبانهای UI در دسترس باقی میماند
- شکستهای executor و future تشخیصهای کلاس و پیام استثنا را حفظ میکنند، لغو دلیل اصلی خود را حفظ میکند و استثناهای فراخوان از چرخه حیات کارگر و خاموشی ایزوله باقی میمانند
- آزمونهای Delphi وLazarus وC++Builder اکنون سطح گسترشیافته لغو، فراداده future، کنترل وظیفه، فشارپسین، ترتیب اولویت، آمار، شکست و خاموشی را پوشش میدهند
اصلاح شده (Fixed)
- مالکان لغو همزمان اکنون به جای تکیه بر دنباله جداگانه مشاهده و لغو، یک نتیجه نخستیننویس قطعی دریافت میکنند
- انتظار بیکاری رشته اصلی پاسخهای وظیفه همگامشده را پردازش میکند و از اینکه کارگر تکمیلشده executor را بهطور دائمی غیربیکار در طول خاموشی هماهنگ رها کند جلوگیری میکند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.47.0 را گزارش میکنند
Version 2.46.0
افزوده شده (Added)
FPdfAsn1اکنون کلاسهای شناسه، رمزگذاری و رمزگشایی شماره برچسب بالا 64 بیتی، رکوردهای TLV تجزیهشده، پنجرههای خواننده فرزند با کپی صفر، رمزگشاهای بدوی تایپشده و برشهای محتوا یا مقادیر رمزشده را نشان میدهد- نویسندگان DER اکنون کل محدوده INTEGER 64 بیتی بدون علامت، محتوای INTEGER دلخواه تأییدشده، ENUMERATED، انتخاب خودکار UTCTime یا GeneralizedTime، برچسبهای application و private، SEQUENCE چندمقداری و خروجی SET OF مرتبشده قاعدهمند را پشتیبانی میکنند
ValidateDerخطاهای اعتبارسنجی آگاه به انحراف را برمیگرداند در حالی که محدودیتهای قابل پیکربندی تودرتوسازی، شمارش گره، طول محتوا، شمارش خطا، ریشه و ترتیببندی SET اختیاری را اعمال میکند
تغییر یافته (Changed)
- الحاق DER و ترکیب چندمقداری از یک تخصیص خروجی استفاده میکنند، بافرهای نویسنده عملیات reserve و count و capacity و انتقال مالکیت را نشان میدهند و ترتیببندی SET OF اکنون از مرتبسازی ادغام
O(n log n)استفاده میکند - مقادیر BOOLEAN و INTEGER و BIT STRING و OBJECT IDENTIFIER و NULL و UTF8String و PrintableString و IA5String و UTCTime و GeneralizedTime در طول رمزگذاری، رمزگشایی تایپشده یا اعتبارسنجی بررسیهای فرم قاعدهمند دریافت میکنند
- بسته زمان اجرای Lazarus اکنون
FPdfAsn1را صادر میکند و مجموعههای آزمون Delphi وLazarus وC++Builder همان سطح عمومی DER را تمرین میکنند
اصلاح شده (Fixed)
- شمارههای برچسب خاص زمینه بزرگتر از 30 دیگر در پنج بیت پایین شناسه قطع نمیشوند
- شناسههای برچسب بالا نادرست، طولهای معین غیرحداقل، UTF-8 نامعتبر، پدینگ BIT STRING غیرصفر، فیلدهای زمان نامعتبر، ریشههای انتهایی و نقض محدودیت منبع بهطور قطعی رد میشوند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.46.0 را گزارش میکنند
Version 2.45.0
افزوده شده (Added)
FPdfPreflightReportاکنون به هر مسئله شدت Info یا Warning یا Error را اختصاص میدهد و APIهای شدت، وضعیت، دسته، کد مسئله، lookup، search، flattening و filtering در سطح استاندارد و گزارش را نشان میدهد- گزارشهای preflight اکنون SARIF 2.1.0 و JUnit XML و NDJSON و XML بومی را از طریق روشهای
To*وSave*ToFileمنطبق برای خطوط لوله CI، اتوماسیون و جریان صادر میکنند - اثر انگشتهای گزارش SHA-256 پایدار نتایج اعتبارسنجی معادل را مستقل از مسیرهای منبع و مهرهای زمانی تولید شناسایی میکنند
تغییر یافته (Changed)
- گزارشهای JSON و CSV و text و Markdown و HTML اکنون شامل شدت و خلاصههای وضعیت گسترده هستند؛ HTML عنوانهای جدول قابل دسترس و یک خلاصه وضعیت را اضافه میکند
- ساخت مجموعههای مسئله و استاندارد از رشد هندسی ظرفیت استفاده میکند، نتایج پرسوجو از پیش اندازهگذاری شدهاند، فرار JSON در یک بافر خروجی محدود مینویسد و همه فایلهای گزارش از یک نویسنده مستقیم UTF-8 استفاده میکنند
- خلاصههای دسته مسئله از ترتیب قطعی استفاده میکنند، مهرهای زمانی شامل میلیثانیه هستند، JSON
formatVersion: 2را حمل میکند و سلولهای CSV فرمولهای صفحه گسترده را خنثی میکنند
اصلاح شده (Fixed)
- صادرات JSON اکنون جفتهای مکمل Unicode معتبر را حفظ میکند و به جای انتشار دادههای نردهای نادرست، واحدهای کد جایگزین UTF-16 مجزا را جایگزین میکند
- صادرات HTML اکنون آپوستروفها را فرار میدهد و نماهای گزارش فیلترشده به جای اشتراکگذاری ذخیره نتیجه قابل تغییر، آرایههای مسئله مستقل را در اختیار دارند
TPdf.AboutInfo، فراداده بسته Lazarus و فراداده نصبکننده اکنون بهطور یکسان Version 2.45.0 را گزارش میکنند
Version 2.44.0
اضافه شده (Added)
- نشانکها و مقصدها وضعیت باز، تعداد نزولی، اهداف اکشن، حالتهای نمایش مقصد و تا چهار پارامتر نمایش را expose میکنند
- متدهای
Metadata،GrantedPermissions،UserGrantedPermissions،HasPermissionوUserHasPermissionsnapshotهای تایپشدهٔ بازرسی سند و کوئریهای دسترسی را ارائه میدهند - متد
ExtractThumbnail(PageNumber)یک صفحهٔ درخواستی را بدون تغییر صفحهٔ فعال رندر میکند و نتایج timestamp در RFC 3161 جزئیات policy، زمان تولید و nonce را expose میکنند
تغییر یافته (Changed)
- مسیرهای نشانک، JavaScript، متادیتا، مقصد و تصویر بندانگشتی از بافرهای تأییدشدهٔ two-pass، رشد هندسی مجموعه و پیمایش ایمن در برابر چرخه (cycle-safe) استفاده میکنند
- پسپردازش ذخیرهسازی کاتالوگ فعال، درخت صفحه و open action را از طریق نسخهٔ فعلی xref تفکیک میکند، object streamهای decodeشده را کش کرده و دیکشنریهای PDF را با مرزهای واژگانی (lexical) اسکن میکند
- پارسینگ مشترک PDF اکنون هدرهای دقیق object، generationها، کلیدهای دیکشنری، طول stream، هندسی predictor، بازههای عدد صحیح و مرزهای comment، literal-string و hexadecimal-string را اعمال میکند
- اعتبارسنجی پاسخ RFC 3161 اکنون هر دو nonce و SHA-256
messageImprintرا مقید میسازد، یک signer معتبر از نظر ساختاری الزامی میکند و قوانین سختگیرانهٔ DER برای length، OID، INTEGER و GeneralizedTime را اعمال میکند
رفع شده (Fixed)
- اسناد incremental دیگر هنگام افزودن یک open action پیشفرض، کاتالوگهای تکراری غیرفعال یا پسوندهای ارجاع بدشکل را انتخاب نمیکنند
- توکنهای timestamp با طولهای long-form DER، توکن کامل کدگذاریشده را حفظ میکنند، در حالی که ترتیب فیلد اختیاری بدشکل CMS و مجموعههای signer خالی رد میشوند
- ساختهای تمیز Delphi اکنون فیلدهای seed nonce در PAdES را از طریق کپیهای بایت ایمن از نظر alignment مینویسند و بایتهای پاسخ XFA را با نوع اشارهگر بومی دقیق ارسال میکنند
Version 2.43.0
اضافه شده (Added)
- رکوردهای فیلد و حاشیهنویسی XFDF اکنون پرچمهای حضوری (presence flags) را expose میکنند که مقدار XML حذفشده را از مقدار به طور صریح خالی متمایز میسازد
تغییر یافته (Changed)
- بخش import برای XFDF عناصر و ویژگیهای دارای پیشوند namespace، محتوای متنی مخلوط و CDATA، ارجاعهای نهاد (entity references) و مقادیر دارای اهمیت فاصله (whitespace-significant) را میپذیرد در حالی که ارجاعهای اسکالر نامعتبر Unicode را رد میکند
- بخش import و export برای XFDF از تطبیق فیلد اندیسگذاریشده و بافرهای هندسی محدود استفاده میکنند، که بازدهی و رفتار تخصیص پیک را برای فرمهای عمیقاً تودرتو، مجموعههای بزرگ حاشیهنویسی، لیستهای جوهر (ink lists)، رأسها (vertices) و چهارضلعیهای نشانهگذاری (markup quadrilaterals) بهبود میبخشد
- اعتبارسنجی PDF/A و PDF/UA از رشد محدود برای مجموعههای بزرگ صفحه، stream، نام ساختار و RoleMap استفاده میکند؛ تفکیک RoleMap برای PDF/UA اکنون از آرایههای مستقیم و اشیای نام غیرمستقیم یا آرایه با نسل دقیق (exact-generation) پیروی میکند
رفع شده (Fixed)
- فرآیند رفتوبرگشت (round-trips) در XFDF اکنون مسیرهای فیلد عمیقاً تودرتو، مقادیر فیلد به طور صریح خالی، محتوای حاشیهنویسی به طور صریح خالی و تمایز بین محتوای غایب و خالی را حفظ میکند
- بارگذاریهای بافر حافظه نامعتبر و تخصیصهای صفحه خارج از محدوده بدون ایجاد وضعیت جزئی برای سند یا صفحه رد میشوند و بارگذاری مجدد ناموفق صفحه بومی، صفحه فعال قبلی را حفظ میکند
- شناسههای بزرگ محتوای نشانهگذاریشده (marked-content) و بافرهای متادیتای امضا قبل از تخصیص یا دسترسی بومی، محدود و اعتبارسنجی میشوند
Version 2.42.0
اضافه شده (Added)
- اکنون
TPdfMatrixمتدهایInvert،TryInvert،TransformPointوTransformRectرا برای نگاشت مختصات، تست ضربه (hit testing)، مرزهای نرمالشده و مدیریت صریح ماتریس تکین (singular-matrix) ارائه میدهد - متد
TPdf.WrapTextیک اورلودBreakLongWordsدریافت کرده است که متن CJK و سایر متون بدون فاصله را تقسیم میکند در حالی که جفتهای جانشین (surrogate pairs) معتبر UTF-16 را کنار هم نگه میدارد - فیلد
TPdfAnnotation.AttachmentPointSetsهر چهارضلعی را در حاشیهنویسیهای نشانهگذاری چندخطی expose میکند در حالی که فیلد موجودAttachmentPointsبه عنوان یک alias برای مجموعه اول باقی میماند
تغییر یافته (Changed)
- استخراج متن، ساخت محتوای خواندنی، جستجوی کلمات و نگاشت آفست متن گفتاری اکنون از تخصیص محدود و مسیرهای جستجوی باینری استفاده میکنند که باعث کاهش تخصیصهای مکرر و اسکنهای خطی روی صفحات بزرگ میشود
- سریالسازی ASN.1 و تولید PDF رمزگذاریشده اکنون از بافرهای خروجی هندسی استفاده میکنند؛ مرتبسازی اشیای رمزگذاریشده از مرتبسازی
O(n log n)استفاده میکند و ردیفهای xref مستقیماً در بافر نهایی نوشته میشوند - متد
WrapTextمرزهای خطوط CR، LF و CRLF را حفظ کرده و یک شیء اندازهگیری بومی را برای کل عملیات مجدداً استفاده میکند - بخش import و export برای XFDF هر چهارضلعی نشانهگذاری را حفظ میکنند؛ بخش import همچنین رنگهای RGB/interior را اعمال کرده و مختصات اعشاری را مستقل از locale پروسه پارس میکند
رفع شده (Fixed)
- فراخوانکنندگان قدیمی میتوانند مجدداً محتوا و نویسنده حاشیهنویسی را با تخصیص رشتههای غیرخالی بدون تنظیم نشانگرهای جدیدتر
HasContentsوHasAuthorبهروزرسانی کنند - رشتههای حاشیهنویسی به طور صریح خالی اکنون از یک بافر بومی معتبر خاتمهیافته با صفر استفاده میکنند، بنابراین پاک کردن
/Contents،/Tو سایر کلیدهای متنی اختیاری دیگر اشارهگر nil را به PDFium ارسال نمیکند
Version 2.41.0
تغییر یافته (Changed)
- گزارش Preflight متدهای
SaveJsonToFile،SaveMarkdownToFileوSaveTextToFileاکنون در Delphi خروجی UTF-8 مینویسند (مطابق باSaveHtmlToFileموجود) به جای صفحه کد ANSI سیستم؛ نویسههای غیر ASCII در مسیر فایلها، توصیهها و یادداشتهای محدوده هنگام ذخیرهسازی از طریق این متدها در Delphi مخدوش میشدند - متد
SaveCsvToFileاکنون خروجی UTF-8 را همراه با پیشوند BOM مینویسد تا Excel برای Windows به صورت خودکار کدگذاری را تشخیص دهد؛ بدون BOM، نرمافزار Excel فایل CSV با کدگذاری UTF-8 را به عنوان کدپیج 1252 در نظر گرفته و نویسههای غیر ASCII را مخدوش میکند
رفع شده (Fixed)
- برنامه نمونه
ExtractImagesاشیای کششدهٔTBitmapدرFExtractedImagesرا زمانی که فرم بدون پاکسازی صریح بسته میشد نشت میداد؛ اکنون فرم متدDestroyرا بازنویسی میکند تاClearExtractedImagesرا فراخوانی کرده و هر بایتمپ کششده را آزاد سازد
Version 2.40.0
تغییر یافته (Changed)
- متد
TPdf.RenderPage(HDC, ...)اکنون استثناهای FPU/SSE را در اطراف فراخوانیFPDF_RenderPageماسک میکند، که باTPdfView.RenderPage(HDC)(رفعشده در v2.25.0) و هر نقطه ورود رندری که شیء bitmap برمیگرداند مطابقت دارد؛ سربار مستقیم به DC در سطحTPdfپیش از این استثناهای FPU را در کامپایلرهای قبل از D12 بدون ماسک رها میکرد
رفع شده (Fixed)
- متد
ColorToARGBاکنون یک پیکسل کاملاً شفاف (آلفا 0) برایclNoneوclDefaultبرمیگرداند به جای اینکه با مقدار نگهبان به عنوان یک رنگ RGB واقعی رفتار کند؛ رفتار قبلی هنگامی که فراخوانکنندهclNoneرا به امید “بدون رنگ” ارسال میکرد، یک پرکننده تیره و تقریباً کدر تولید میکرد
Version 2.39.1
رفع شده (Fixed)
- ذخیرهسازیهای صریح PDF 1.3 اکنون ورودیهای
/SMask /None،/AIS falseو/TK trueرا که فقط وضعیت گرافیکی اولیه را تکرار میکنند حذف مینمایند در حالی که همچنان به رد وضعیت شفافیت غیرپیشفرض ادامه میدهند
Version 2.39.0
تغییر یافته (Changed)
- متدهای
CreatePDFوImageToPDFاکنون از مقصدهای ذخیرهسازی تأیید شده استفاده کرده و موفقیت را فقط زمانی گزارش میدهند کهSaveAsبا موفقیت به پایان برسد - متدهای
BatchExport،PDFtoJpgوSplitPDFاکنون دایرکتوریهای خروجی منحصربهفردی را تخصیص میدهند تا در اجراهای مکرر و ورودیهای همنام، نتایج قبلی حفظ شوند - پروژه
SplitViewاکنون جستجو را بدون به جا گذاشتن وضعیت صفحه پنهان پس از لغو یا عدم تطابق، یک بار پوشش میدهد و کارهای چاپ ناقص را به جای ارسال خروجی جزئی متوقف میکند
رفع شده (Fixed)
- متد
MergePDFاکنون توکنهای محدوده صفحه بدشکل و مسیرهای خروجی بازنویسی شونده منبع را رد میکند، صفحات واقعاً وارد شده را میشمارد و از ذخیره نتیجه خالی خودداری مینماید - دموهای
Attachmentدر Delphi و C++Builder اکنون ذخیرهسازیهای با مسیر یکسان را از طریق جایگزینی فایل ایمن در برابر بازگشت (rollback-safe) انجام میدهند تا شکست در تغییر نام نتواند فایل PDF اصلی را حذف کند
Version 2.38.0
تغییر یافته (Changed)
- متد
SetAnnotationDataاکنون نوشتن در/Contentsو/Authorرا پشت فیلدهای نگهبانHasContents/HasAuthorدرTPdfAnnotationمحافظت میکند، که با الگویHasName/HasSubject/HasIconموجود مطابقت دارد؛ پیش از این، این دو فیلد بدون شرط نوشته میشدند، بنابراین تخصیص یک رکوردDefault(TPdfAnnotation)برای بهروزرسانی تنها رنگ یا پرچمها، به طور خاموش محتوا و نویسنده موجود حاشیهنویسی را با رشتههای خالی بازنویسی میکرد؛ متدGetPageAnnotationاکنون فیلدهای نگهبان را تنظیم میکند تا یک چرخه خواندن-اصلاح-نوشتن، مقادیر اصلی را حفظ کند
رفع شده (Fixed)
- متد
GenerateFormAppearancesاکنون مقدار دکمه چکباکس/رادیو را از طریقFPDFAnnot_GetFormFieldValue(که طبق ISO 32000-1 §12.7.5) میخواند به جای اینکه ازFPDFAnnot_GetStringValue(Annot, 'V', ...)استفاده کند (که دیکشنری ویجت را میخواند)؛ ویجت معمولاً فاقد/Vاست، بنابراین/ASهرگز با وضعیت تیکخورده همگامسازی نمیشد و چکباکس/رادیو تختشده به عنوان تیکنخورده رندر میگردید
Version 2.37.0
تغییر یافته (Changed)
- متد
ParseTsaUrlاکنون پس از تجزیه، پورت را در محدوده1..65535محدود میکند؛ در غیر این صورت، یک مقدار پورت بیش از حد بزرگ از طریق برشDWORDسرریز میشد و میتوانست روی یک پورت معتبر قرار گیرد - متد
ParseFieldدر XFDF اکنون یک پارامتر عمق (پیشفرض 0، محدود به 64) را میپذیرد و در صورت رسیدن به حد مجاز یک فیلد خالی برمیگرداند، به طوری که یک زنجیره مخرب تودرتو از<field>با عمق 100000 دیگر نمیتواند باعث سرریز شدن پشته شود
رفع شده (Fixed)
- درخواست HTTP برای TSA اکنون قبل از انتقال
@ReqDer[0]بهWinHttpSendRequestدر برابر خالی بودن بدنه درخواست محافظت میکند؛ ارجاع به یک آرایه پویا با طول صفر به یک اشارهگر نامعتبر دسترسی پیدا میکرد؛ متدBuildTimeStampReqهمیشه یک SEQUENCE غیرخالی برمیگرداند، اما محل فراخوانی اکنون از قرارداد محافظت مینماید
یادداشتها (Notes)
- توضیحات هدر
FPdfTsaWinدرباره بررسی ابطال HTTPS اصلاح شده است: WinHttp به طور پیشفرض زنجیره گواهی سرور را اعتبارسنجی میکند اما بررسی ابطال CRL/OCSP را انجام نمیدهد مگر اینکه صراحتاً از طریقWinHttpSetOptionفعال شود؛ عبارت قبلی ادعا میکرد بررسی ابطال “به صورت رایگان ارائه میشود” که گمراهکننده بود
Version 2.36.0
تغییر یافته (Changed)
- درخواستهای HTTP برای TSA اکنون علاوه بر هدرهای
Content-TypeوAccept، یک هدر صریحContent-Lengthنیز ارسال میکنند؛ ابزار WinHttp آن را از طول کل ترکیب میکند، اما برخی از پروکسیهای RFC 3161 به یک هدر صریح نیاز دارند و بدون آن درخواست را با خطای411 Length Requiredرد میکنند - خروجی XFDF اکنون کاراکترهای کنترلی C0 (به غیر از TAB/LF/CR که قبلاً گریز داده شدهاند) را به جای ارسال یک دنباله نامعتبر بکاسلش-هگز، حذف میکند؛ گریز قبلی
\-01Fدر XML معتبر نیست (بکاسلش هیچ معنای خاصی در XML ندارد)، بنابراین هر خواننده منطبق، سند را به عنوان بدشکل رد میکرد - متد
InjectAssociatedFilesاکنون زمانی که فراخوانکنندهTAssociateFile.MIMETypeرا ارائه میدهد،/Subtypeرا روی دیکشنری جریان EmbeddedFile مینویسد؛ این فیلد تعریف و مستند شده بود اما تزریقکننده پیش از این به صورت هاردکد/Type /EmbeddedFileرا قرار میداد و آن را نادیده میگرفت (استاندارد ISO 32000-2 §7.11.4 اجازه استفاده از/Subtypeرا روی جریان میدهد)
رفع شده (Fixed)
- عملیات ورود XFDF اولین بایت محتوا را پس از UTF-8 BOM و همچنین اولین بایت را در صورت عدم وجود BOM نادیده میگرفت: فراخوانیهای
BytesToAnsi(Bytes, 4, ...)(برای BOM) وBytesToAnsi(Bytes, 1, ...)(بدون BOM) به دلیل اینکهBytesToAnsiیک ایندکس آرایه مبتنی بر 0 دریافت میکند، از آفستهای شروع با یک واحد خطا استفاده میکردند؛ فراخوانیها اکنون از3و0استفاده میکنند - متد
ExtractSignatureValueدارای دو باگ تورفتگیifمعلق بود که در آنهاR.Position:= CNبدون شرط برای شاخههای اختیاریcertificates [0]وsignedAttrs [0]اجرا میشد؛ اکنون شاخهها درbegin/endقرار گرفتهاند تا موقعیت تنها زمانی جلو برود که TLV اختیاری واقعاً خوانده شده باشد (همان کلاس باگ رفع شده درAddSignatureTimestampToCmsدر v2.22.0)
Version 2.35.0
تغییر یافته (Changed)
- متدهای
TFPDFAvail_IsDocAvail،TFPDFAvail_IsPageAvailوTFPDFAvail_IsFormAvailاکنون پارامترhints: PFX_DOWNLOADHINTSرا به جایvar hints: FX_DOWNLOADHINTSدریافت میکنند، به طوری که حالت مستندشدهٔnullptrتنها برای پرسوجو (بررسی در دسترس بودن فعلی بدون درخواست دادههای بیشتر) از Delphi قابل دسترسی باشد؛ هدر PDFium صراحتاً اجازه میدهدhintsمقدار null داشته باشد، در حالی که اتصالvarقبلی این کار را غیرممکن میساخت - متد
TFPDF_SetSystemFontInfoاکنون پارامترpFontInfo: PFPDF_SYSFONTINFOرا به جایvar pFontInfo: FPDF_SYSFONTINFOدریافت میکند، بنابراین فراخوانکنندگان میتوانند مقدارnilرا ارسال کنند تا به PDFium بگویند استفاده از رابط فونت سیستم ثبتشده قبلی را متوقف کند (مسیر غیرفعالسازی مستند شده) - متد
TPdfThumbnailView.PaintاکنونVisibleRowsرا با همان فرمولUpdateScrollBarRange(یعنیClientHeight div RowHeight) محاسبه میکند تا تعداد ردیفهای ترسیمشده با اندازه صفحه نوار پیمایش مطابقت داشته باشد؛ فرمول قبلی که فقط برای ترسیم بود ((ClientHeight - FMarginY) div RowHeight + 1) میتوانست در ارتفاعهای مرزی یک ردیف تفاوت داشته باشد، که منجر به هدر رفتن رندر در یک ردیف خارج از صفحه یا از دست رفتن آخرین ردیف قابل مشاهده میشد
Version 2.34.0
اضافه شده (Added)
- متدهای
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— یک API سطح بالا که سند را ذخیره کرده و سپس آن را با الگوریتم PDF 2.0 AES-256-CBC (V=5/R=5/R=6) رمزگذاری میکند؛ این متدها یک ساختارTPdfEncryptOptionsشامل رمز عبور کاربر/مالک، مجوزها و نسخه بازبینی را دریافت کرده و کار را بهEncryptDocumentBytesواگذار مینمایند - رمزگذاری رشته لیترال StrF: متد
EncryptDocumentBytesاکنون رشتههای لیترال(...)در اشیاء غیر جریانی (دیکشنری Info و غیره) را به رشتههای هگز AES-256-CBC رمزگذاری میکند، که با قالب رمزگذاری جریان (16-بایتی IV + متن رمزنگاری شده PKCS7) مطابقت دارد؛ رشتههای هگز<...>دستنخورده باقی میمانند
Version 2.33.0
اضافه شده (Added)
- تزریقکننده رمزگذاری کل سند AES-256-CBC در یونیت
FPdfEncrypt.pas: متدEncryptDocumentBytesیک فایل PDF متنی ساده و یک رمز عبور را دریافت میکند، هر شیء جریان غیرمستقیم را رمزگذاری کرده (16-بایتی IV + AES-256-CBC PKCS7 تحت کلید فایل)، فیلد/Lengthرا اصلاح مینماید، شیء دیکشنری/Encryptرا ضمیمه کرده و یک جدول کراسرفرنس کلاسیک کامل به همراه تریلر حاوی/Encryptو/IDرا بازسازی میکند؛ این کار پشته رمزگذاری PDF 2.0 را تکمیل میسازد (AES block + GCM + SHA-512/384 + اشتقاق کلید R6 + دیکشنری + پیمایش سند) - تابع کمکی
EncryptStreamPayload— قالب جریان PDF 2.0 AES-256 (IV پیش از متن رمزنگاری شده AES-CBC-PKCS7)، قابل استفاده مجدد توسط فراخوانکنندگانی که چیدمان شیء خود را مدیریت میکنند
Version 2.32.0
اضافه شده (Added)
- هش SHA-512 / SHA-384 (FIPS 180-4) در یونیت جدید
FPdfSha512.pas: پیادهسازی شده در Pure-Pascal و پورت شده از HotPDF؛ مورد نیاز برای تکرار هش رمز عبور PDF 2.0 R6 که بر اساس یک مقدار 128-بایتی mod-3 برای انتخاب یکی از الگوریتمهای SHA-256/384/512 در هر دور شاخه ایجاد میکند؛ درستی آن با پاسخهای مشخص FIPS-180-4 B.1 تایید گردید - اشتقاق کلید رمزگذاری PDF 2.0 و سازنده دیکشنری Encrypt در یونیت جدید
FPdfEncrypt.pas: الگوریتم 2.B از استاندارد ISO 32000-2 §7.6.4.3 را پیادهسازی میکند (رقص هش R6: شامل AES-128-CBC + انتخاب تکراری SHA-256/384/512)، کلید رمزگذاری فایل 32-بایتی را به همراه ورودیهای/O،/U،/OE،/UEو/Permsبه دست میآورد و دیکشنری Encrypt با ویژگیهای V=5/R=5/R=6 و ورودیهای/CFM /AESV3را میسازد؛ این یونیت از PDFlibPas پورت شده و با سبک TBytes سازگار شده است
Version 2.31.0
اضافه شده (Added)
- مفاهیم اولیه رمز بلوک AES (FIPS 197) در یونیت جدید
FPdfAes.pas: شامل رمزهای بلوک AES-128 و AES-256 در محیط Pure-Pascal به همراه توابع کمکی حالت CBC و یک سیستم پشتیبان CSPRNG که از HotPDF پورت شده است؛ آزمونهای با پاسخهای مشخص FIPS-197 پیوست C.2 / C.3 صحت عملکرد آن را تأیید میکنند؛ این بخش پایه رمزنگاری برای پشته رمزگذاری PDF 2.0 را تشکیل میدهد - رمزگذاری احراز هویت شده AES-GCM (NIST SP 800-38D) در یونیت جدید
FPdfAesGcm.pas: پیادهسازی کننده ساختار GHASH (ضرب در GF(2^128))، GCTR و ساختار GCM AEAD در بالای توابع پایه بلوک AES؛ موارد آزمون NIST GCM شماره 1 و 3 (برای AES-128) دقیقاً با متن رمزنگاری شده و تگ معتبر مطابقت دارند؛ مورد آزمون 13 (برای AES-256) به صورت رفت و برگشت عمل میکند؛ حالت GCM همان حالت استاندارد ISO/TS 32003 برای PDF 2.0 است - اعتبارسنجی یکپارچگی ParentTree و ClassMap برای استاندارد PDF/A Level A (طبق ISO 19005-1 §6.8.3): شناسه
pvaiParentTreeMissingیک StructTreeRoot را که فاقد درخت شماره /ParentTree است مشخص میکند؛ شناسهpvaiClassMapUnresolvedیک مرجع کلاس /C فاقد /ClassMap را علامتگذاری مینماید
Version 2.30.0
اضافه شده (Added)
- تزریق فایلهای مرتبط (متدهای
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles، طبق ISO 32000-2 §7.11.4): یونیت جدیدFPdfAssocFilesآرایههای/AFاز مراجع مشخصات فایل را به کاتالوگ یا هر دیکشنری صفحه ضمیمه میکند و هر هشت مقدار/AFRelationshipجدول 45 از استاندارد ISO 32000-2 را پوشش میدهد؛ این متد از الگوی بهروزرسانی افزایشی اثباتشده توسطInjectPadesDssMarkersاستفاده مجدد میکند - پشتیبانی از PDF/X-6 (ISO 15930-9:2020): ویژگی
TPdfXConformanceشناسهpxc6را اضافه میکند؛ تزریقکننده و اعتبارسنج آن را از طریق شناساییpdfxid:GTS_PDFXVersionهدایت میکنند؛ قالب PDF/X-6 جانشین مبتنی بر PDF 2.0 برای PDF/X-4 جهت تبادل کامل است - قالب PDF/A اقدام
/Threadرا ممنوع میکند (شکاف لیست سفید در ISO 19005-1 §6.6.1)؛ لیست اقدامات ممنوعه اکنون شامل Thread در کنار Launch، ResetForm، ImportData، SetOCGState، SetState، GoTo3DView، Rendition و Hide است
رفع شده (Fixed)
- مسیر اعتبارسنجی PDF/A-4e اکنون همان بررسیهای ساختار تگشده، MarkInfo و شکست کلمه را مانند Level A رعایت میکند؛ تنزل سطح در بخش ذخیرهسازی v2.29.0 ویژگی
PdfAIsLevelEرا پوشش میداد، اما سه دروازهValidatePdfAComplianceتنهاPdfAIsLevelAرا بررسی میکردند، به طوری که یک سند PDF/A-4e فاقد ساختار تگشده بدون هیچ هشداری پذیرفته میشد - انحراف آزمون OCG
/BaseState: مسیر پردازش پسین v2.28.0 به درستی پذیرش را به/ONیا/OFFگسترش داد (ISO 32000-1 Table 8.70)، اما آزمونهای Delphi و C++ همچنان انتظار داشتند که/OFFرد شود؛ اکنون آزمونها از یک مقدار واقعاً نامعتبر (/Undefined) استفاده میکنند و یک آزمون مثبت جدید پذیرش/OFFرا تثبیت مینماید - تطبیق بیش از حد
/Subtype /GEOژئواسپاشیال: تابعContainsDictionarySubtype('GEO')با هر دیکشنری حاوی این توکن مطابقت داشت، از جمله موارد غیرمرتبط مانند یک/ViewerPreferences << /Subtype /GEO >>سرگردان؛ متد جدیدContainsMeasureDictionarySubtypeعلاوه بر این به/Type /Measureیا یک کلید همتای انحصاری Measure نیاز دارد، به طوری که دیکشنریهای غیر Measure دیگر نیاز ADBE ExtensionLevel 3 را فعال نکنند
Version 2.29.0
اضافه شده (Added)
- پشتیبانی از PDF/A-4 (ISO 19005-4:2020) در سراسر اعتبارسنج، تزریقکننده XMP و لایه مدل شیء PDFium: ویژگی
TPdfAConformanceشناسههایpac4base،pac4fوpac4eرا اضافه میکند؛ سطح پایه مبتنی بر PDF 2.0 (ISO 32000-2) است و سطوح قدیمی A/B/U را با base + F (فرم) + E (دسترسیپذیری) جایگزین مینماید؛ متدValidatePdfAیک بسته XMP با ساختارpdfaid:part=4را میخواند (سطح پایه المان انطباق را حذف میکند)،SaveAsPdfAآن را صادر مینماید وSignPadesWithPdfAشناسهpac4baseرا به عنوان کانتینر آرشیو بلندمدت میپذیرد - اتصال
FPDFBookmark_GetColor— آخرین صادرات عمومی غیرمتصل در PDFium (469/469): ساختارTBookmarkفیلدهایHasColorوColorرا به دست میآورد که از آرایه علامتگذاری/C(طبق ISO 32000-1 §12.3.3) پر میشوند؛ این اتصال از بارگذاری سازگار استفاده میکند تا DLLهای قدیمیتر قبل از این صادرات همچنان کار کنند - بررسی نسخه هدر PDF/E-1 (طبق ISO 24517-1 §5) شناسه
pveiBadPdfVersion— قالب PDF/E-1 بر اساس PDF 1.6 است و هدرهای غیر 1.6 اکنون علامتگذاری میشوند - قالب PDF/R-1 (طبق ISO 23504-1) شناسه
pvriEncryptVersionMismatch— رمزگذاری فقط روی هدر%PDF-2.0مجاز است؛ بدنه 1.x حاوی/Encryptاکنون علامتگذاری میشود (که پیش از این به عنوان یک دستور بدون تأثیر بود) - قالب PDF/R-1 شناسه
pvriBadMediaBox— فیلدMediaBoxهر صفحه باید به صورت[0 0 w h]باشد؛ متدPdfRHasNonZeroMediaBoxOriginیک اسکنر ASCII مستقل از منطقه است که از MediaBoxهای با مرجع غیرمستقیم عبور میکند - قالب PDF/A Level A شناسه
pvaiRoleMapUnresolved(طبق ISO 19005-1 §6.8.3.4) — وجود یک RoleMap ناقص که نوعهای ساختار سفارشی/Sرا بدون نقشهنگاری رها میکند اکنون علامتگذاری میشود، که شکاف ناشی از بررسی وجود صِرفpvaiRoleMapMissingقبلی را برطرف میسازد
رفع شده (Fixed)
- تابع
PdfVersionToName(20)به جای"2.0"مقدار"1.0"را برمیگرداند، که ورودی کاتالوگ/Versionو پیامهای اعتبارسنجی را برای هر ذخیره PDF 2.0 خراب میکرد؛ قالببند اکنون major.minor را صراحتاً برای کدهای نسخه>= 20جدا میکند - کدگذار عدد منفی INTEGER در
FPdfAsn1.pasتحت Delphi 12 با خطای کامپایل مواجه میشد (خطایE2015رویInteger(-(V<0)))، که کل پروژه تست را مسدود میکرد؛ این مشکل با استفاده ازInt64(-Ord(V<0))برای ماسک علامت تعمیم رفع گردید - لیست حاشیهنویسیهای ممنوعه در PDF/A اکنون شامل
/RichMediaدر تمام بخشها میشود (که پیش از این از قلم افتاده بود؛ استاندارد ISO 32000-1 §12.5.6.35 آن را در PDF/A ممنوع میکند)
Version 2.28.0
اضافه شده (Added)
- ساختار
TPdfVersionاکنون شاملpv20برای PDF 2.0 (ISO 32000-2) میشود؛ متدDecodePdfVersion(20)به جایpvUnknownمقدارpv20را برمیگرداند وEncodePdfVersion(pv20)مقدار 20 را صادر میکند تا نسخه یک سند PDF 2.0 دیگر در هنگام خواندن مجدد از دست نرود و بتواند به طور صریح نوشته شود
تغییر یافته (Changed)
- متد
DecodeDateاکنون رشتههای تاریخ PDF را با فیلدهای اختیاری پایانی طبق مرجع PDF 3.8.3 تجزیه میکند، به جای اینکه به قالب کامل 23-کاراکتریD:YYYYMMDDHHmmSSOHH'mm'نیاز داشته باشد؛ تاریخهای کوتاه منطبق مانندD:20260712،D:20260712153000وD:20260712153000Zاکنون پذیرفته میشوند، در حالی که پیش از این توسط دروازه سختگیرانهٔLength=23رد میشدند؛ اختلاف ساعت منطقه زمانی اکنون به جای بررسی با شرط> 23، در برابر محدوده واقعی UTC-12..UTC+14 اعتبارسنجی میشود - متد
FPdfMeasure.MeasureTextاکنون نام فونت را به عنوان FPCAnsiString/ DelphiUTF8Encodeکدگذاری میکند، که با سایر نقاط فراخوانی FPDF_BYTESTRING کتابخانه مطابقت دارد، به جای اینکه از تبدیل مستقیمAnsiStringاستفاده کند که باعث مخدوش شدن نامهای خانواده غیر ASCII از طریق صفحه کد فعلی میشد
رفع شده (Fixed)
- مسیر مقدار منفی
TDerWriter.Integerدچار کرش میشد یا قالب DER بدشکلی تولید میکرد: حلقهwhile V <> -1 do V := V shr 8آرایهInnerرا برایValue = -1خالی رها میکرد (خطای محدوده درInner[Length(Inner)-1]بعدی) و برای سایر مقادیر منفی بایتهای اضافی تولید مینمود؛ اکنون کدگذار بایتهای مکمل دو را با شیفتهای تعمیم علامت استخراج میکند و زمانی که باقیمانده صرفاً تعمیم علامت باشد به درستی متوقف میشود؛ فیلدهای INTEGER در CMS/PAdES مثبت هستند، بنابراین این مورد تنها بر فراخوانکنندگانی که مقادیر منفی ارسال میکنند تأثیر میگذارد، اما اکنون مسیر اصلاح شده است - متدهای
TPdf.GetCharacterOriginوTPdfView.GetCharacterOriginمقدار بازگشتیFPDFText_GetCharOriginرا نادیده میگرفتند و در صورت شکست یک نقطه مقداردهینشده را برمیگرداندند؛ نتیجه اکنون با صفر مقداردهی اولیه میشود و یک خواندن ناموفق مبدا را برمیگرداند (که با قراردادGetCharacterRectangleمطابقت دارد)
Version 2.27.0
تغییر کرد (Changed)
- دموهای
PDFViewerوMultiPageViewerدر Delphi، C++Builder و Lazarus اکنون جستجوی سند را یکبار دربر میگیرند، برای نتیجهٔ بعدیEnterوF3را میپذیرند، با تغییر گزینههای تطبیق زمینهٔ جستجو را بازنشانی میکنند وEscرا برای لغو جستجو یا کار چاپ فعال نگه میدارند - چاپ نمایشگر اکنون از چرخش فعلی نمایشگر پیروی میکند و خروجی عمودی یا افقی مناسب را انتخاب میکند تا چرخش نوار ابزار در صفحات چاپشده بازتاب یابد
- هر سه دموی
ViewerInteractionLabاکنون میانبرهایCtrl+A،Ctrl+C،Enter،F3وEscرا بدون رهگیری فرمانهای بومی انتخاب و کپی کنترلهای ویرایش پشتیبانی میکنند
رفع شد (Fixed)
- لغو چاپ نمایشگر در C++Builder و Lazarus اکنون کار چاپگر را متوقف میکند، نه اینکه صفحات رندرشدهٔ پیش از لغو را ارسال کند، و Lazarus بهصراحت از هر حلقهٔ تودرتوی کپی، صفحه و مرتبسازی خارج میشود
- دکمهٔ Cancel در
MultiPageViewerدلفی اکنون به کنترلکنندهٔ خود متصل است و فیلدهای جستجویMultiPageViewerدر C++Builder/Lazarus ویرایش بومی با کلیدهای پیکان، Home و End را حفظ میکنند
Version 2.26.0
تغییر کرد (Changed)
TPdf.GetObjectBitmap،TPdf.GetBitmap،TPdf.GetThumbnailو همتایانTPdfViewاکنون قفل رندر را پیرامون فراخوانیFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmapمیگیرند، مانندRenderPage/RenderTile. این فراخوانیهای سمت رندر PDFium پیشتر بدون قفل اجرا میشدند و میتوانستند باUnloadPage/ReloadPageهمزمان روی همان سند رقابت کنندTPdf.RenderPageThumbnailاکنون ورودی صفحهٔ/Rotateرا رعایت میکند: برای صفحات/Rotate 90یا270، تناسب از ابعاد چرخیده دوباره محاسبه میشود تا نسبت تصویر بندانگشتی با نمایشگر مطابقت داشته باشد، نه ابعاد ذاتی (نچرخیده) بازگشتی ازFPDF_GetPageSizeByIndex
رفع شد (Fixed)
TPdfView.GetCharacterRectangleمقدار بازگشتیFPDFText_GetCharBoxرا نادیده میگرفت و هنگام گزارش خطا از سوی PDFium،TPdfRectangleمقداردهینشده را بهPageToDeviceمیداد. اکنون مستطیل با صفر مقداردهی میشود وGetCharBoxناموفقRect(0,0,0,0)برمیگرداند- طول بافر مسیر URI و مسیر فایل
GetLinkAnnotationsیک واحد خطا داشت: فراخوانی دومFPDFAction_GetURIPath/GetFilePathمقدارsize(شامل NUL پایانی) را برای بافری با اندازهٔsize-1میفرستاد. اکنونsize-1ارسال میشود تا در ساخت PDFium بدون محدودسازی داخلی خارج از تخصیص ننویسد
Version 2.25.0
تغییر کرد (Changed)
TPdf.AddText،SetText،AddPathوInsertFormObjectFromXObjectاکنون صفحهٔ متن کششده و حاشیهنویسیهای پیوند را پیش از تولید دوبارهٔ محتوای صفحه نامعتبر میکنند، مانندSetTextPositionsوRemoveObject. پیشتر فراخوانیGetText/GetWebLinks/FindFirstپس از ویرایش صفحه دادهٔ متن و پیوند قدیمی برمیگرداند و کنترلFPDF_TEXTPAGEپس از تولید محتوا با رفتار تعریفنشده استفاده میشدTPdfView.RenderPage(HDC, ...)اکنون قفل رندر را میگیرد و استثناهای FPU/SSE را پیرامون فراخوانیFPDF_RenderPageماسک میکند، مانند همهٔ نقاط ورود رندر. سربار مستقیم DC قبلی میتوانست باUnloadPage/ReloadPageهمزمان رقابت کند و در کامپایلرهای پیش از D12 استثناهای FPU را بدون ماسک بگذارد- دموی
PrintPDFدلفی هنگام لغو اکنونPrinter.Abortرا فراخوانی میکند، نه اینکه بلوکfinallyبهPrinter.EndDocبرسد که صفحات پیش از لغو را ارسال میکرد. دموی Lazarus از قبل درست عمل میکرد
رفع شد (Fixed)
TPdf.GetCharacter،TPdf.GetCharcodeو همتایانTPdfViewنقاط کد صفحهٔ جانبی (emoji، CJK Extension B) بازگشتی ازFPDFText_GetUnicodeرا باWideChar()به 16 بیت پایین کوتاه میکردند و جانشین تنها تولید میشد. نویسههای بالاتر از U+FFFF اکنون U+FFFD برمیگردانند؛ برای دریافت کدگذاری کامل UTF-16 نویسههای جانبی ازGetTextاستفاده کنیدGetWebLinksبدون محافظت در برابر بازگشت-1،SetLength(Rectangles, FPDFLink_CountRects(...))را فراخوانی میکرد و در صفحهٔ خرابEOutOfMemoryایجاد میشد. شمارش منفی اکنون به صفر محدود میشودTPdf.Destroyاکنون رشتهٔPasswordرا پیش از آزادسازی بافر شمارشمرجعدار از حافظه پاک میکند (باUniqueString+FillChar) تا پس از نابودی مؤلفه روی heap خوانا نماند
Version 2.24.0
افزوده شد (Added)
TPdf.DeletePage،GetAttachment،GetAttachmentName،GetAttachmentType،SetAttachmentوDeleteAttachmentاکنون شاخص صفحه/پیوست را اعتبارسنجی میکنند و برای مقدار خارج از محدودهEPdfErrorایجاد میکنند، مطابق رفتار موجود دسترسیدهندههای حاشیهنویسی. پیشتر شاخص خارج از محدوده مستقیماً به PDFium داده میشد و بیعملی خاموش یا رفتار تعریفنشده ایجاد میکرد
رفع شد (Fixed)
- نشت کنترل دستهٔ شیء صفحه در خطای
TPdf.AddText،AddBitmapوAddJpegImage: اگرFPDFText_SetText،FPDFImageObj_SetBitmap،FPDFImageObj_SetMatrixیاFPDFImageObj_LoadJpegFileInlineپس از ایجاد شیء و پیش از تحویل آن به صفحه توسطFPDFPage_InsertObjectاستثنا ایجاد میکرد، دستهٔ بومیFPDF_PAGEOBJECTنشت میکرد. اکنون هر مسیر در استثنا شیء را پیش از پرتاب دوباره نابود میکند TPdf.UnloadPageدستهٔFPathدر حال پردازش (تنظیمشده باCreatePathاما هنوز مصرفنشده توسطAddPath) را با تنظیمnilبدون فراخوانیFPDFPageObj_Destroyکنار میگذاشت. اکنون دسته نابود میشود تا مسیر ایجادشده و رهاشده دیگر نشت نکندTPdf.InsertFormObjectFromXObjectفراخوانیUpdatePage(FPDFPage_GenerateContent) را که همهٔ درجهای همتا انجام میدهند حذف کرده بود و Form XObject درجشده پس از بارگذاری یا ذخیرهٔ بعدی ناپدید میشد. اکنون پس از درجUpdatePageفراخوانی میشود
Version 2.23.0
رفع شد (Fixed)
- اعتبارسنجی محتوای اختیاری
/BaseStateاکنون/OFFرا علاوه بر/ONمیپذیرد (ISO 32000-1 Table 8.70 هر دو را مجاز میداند). بررسی قبلی پیکربندی معتبر/OCProperties /D /BaseState /OFFرا با خطای محتوای اختیاری بدساخت رد میکرد - اعتبارسنجی
/Intentمحتوای اختیاری اکنون/Designو آرایههای نام مانند[/View /Design]را میپذیرد، نه فقط مقدار literal/View. ISO 32000-1 Table 8.70/Intentرا نام یا آرایهای از نامهای/Viewو/Designتعریف میکند - تشخیص فرهنگواژهٔ Measure مکانی برای دروازهٔ ExtensionLevel 3 در PDF 1.7
/Extensions /ADBEدیگر به/Type /Measureنیاز ندارد که ISO 32000-1 Table 254 آن را اختیاری میداند. اکنون تشخیص فقط با/Subtype /GEOمنطبق میشود
Version 2.22.0
تغییر کرد (Changed)
- محاسبات زوم برازش
TPdfView(GetPageZoom،GetPageWidthZoom،GetPageHeightZoom) اکنون به جایWidth/Heightپنجره ازClientWidth/ClientHeightاستفاده میکنند تاpfmFitPage/pfmFitWidth/pfmFitHeightصفحه را با ناحیهٔ دیدنی تنظیم کنند و نوار پیمایش اضافی حذف شود AddSignatureTimestampToCmsاکنونExceptionصریحی با شناسایی فیلد CMS SignerInfo ناخوانا (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) ایجاد میکند و اصلاح شاخهٔ اختیاریsignedAttrs [0]نیز انجام شده است
رفع شد (Fixed)
- نشت دستهٔ کلید خصوصی CNG در
ResolveWinSignerرفع شد؛ در صورت شکست پس ازCryptAcquireCertificatePrivateKey، دسته اکنون باNCryptFreeObjectآزاد میشود EcDsaP1363ToDerاکنون نیمهٔ کاملاً صفرrیاsرا رد میکند وINTEGER 0تولید نمیکند؛ امضاهای ECDSA باr = 0یاs = 0نامعتبر هستند (RFC 4754 §6 / FIPS 186-4 §6،1 ≤ r, s ≤ n-1)
Version 2.21.12
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.5 تا PDF 1.7 اکنون ساختارهای ناقص
/OCPropertiesفهرست را رد میکنند، از جمله ورودیهای مورد نیاز/OCGsیا/Dمفقود، مقادیر پیکربندی پیشفرض نامعتبر و ورودیهای وضعیت غیرآرایهای
Version 2.21.11
رفع شد (Fixed)
- ذخیرهسازیهای صریح نسخه PDF اکنون ورودیهای مستقیم یا غیرمستقیم
/Annotsصفحه را که فرهنگنامههای حاشیهنویسی آنها ورودی مورد نیاز/Subtypeیا/Rectرا حذف میکنند رد میکنند
Version 2.21.10
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.7 اکنون نیاز دارند که فرهنگنامههای مکانی
/Type /Measure /Subtype /GEOو حاشیهنویسیهای Projection/Extensions /ADBEرا با/BaseVersion /1.7و/ExtensionLevel 3یا جدیدتر اعلام کنند
Version 2.21.9
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.7 اکنون نیاز دارند که حاشیهنویسیهای RichMedia و اقدامات
RichMediaExecute/Extensions /ADBEرا با/BaseVersion /1.7و/ExtensionLevel 3یا جدیدتر اعلام کنند
Version 2.21.8
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.7 اکنون نیاز دارند که جریانهای PRC سهبعدی
/Extensions /ADBEرا با/BaseVersion /1.7و/ExtensionLevel 1یا جدیدتر اعلام کنند، به جای اینکه PRC را به عنوان ویژگی اصلی PDF 1.7 در نظر بگیرند
Version 2.21.7
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.4 و قدیمیتر اکنون ورودیهای
/SMaskInDataXObject تصویری را رد میکنند، از جمله مقدار صریح0، زیرا کانالهای ماسک نرم JPEG 2000 تعبیهشده به PDF 1.5 یا جدیدتر نیاز دارند
Version 2.21.6
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.4 و قدیمیتر اکنون XObjectهای تصویری 16 بیتی را که به PDF 1.5 یا جدیدتر نیاز دارند رد میکنند، در حالی که اهداف PDF 1.5 تا PDF 1.7 دادههای تصویر
/BitsPerComponent 16را حفظ میکنند
Version 2.21.5
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.4 و قدیمیتر اکنون مقادیر
/PageLayout /TwoPageLeftو/TwoPageRightفهرست سند را که به PDF 1.5 یا جدیدتر نیاز دارند رد میکنند، در حالی که اهداف PDF 1.5 تا PDF 1.7 طرحبندی دو صفحهای درخواستشده را حفظ میکنند
Version 2.21.4
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.3 اکنون ورودیهای
/Langدر فهرست سند را که به PDF 1.4 یا جدیدتر نیاز دارند رد میکنند، در حالی که اهداف PDF 1.4 تا PDF 1.7 شناسه زبان را حفظ میکنند
Version 2.21.3
رفع شد (Fixed)
- ذخیرهسازیهای صریح PDF 1.3 حالا درختهای نام
/EmbeddedFilesسند را که نیازمند PDF 1.4 یا جدیدتر هستند رد میکنند، بدون رد اجریای فایلهای تعبیهشده مرتبط با مشخصات فایل قدیمیتر
Version 2.21.2
رفع شد (Fixed)
- آخرین نسخه: 2.21.2; تاریخ انتشار:
Version 2.21.1
رفع شد (Fixed)
- اعتبارسنجی ارجاع هیبرید حالا ورودیهای
/XRefStmتکمیلی را قبل از عناصر xref کلاسیک همان بازبینی اعمال میکند، بنابراین توضیحات فشردهشده و سایر اشیاء محدودبهنسخه دیگر نادیده نمیمانند
Version 2.21.0
تغییر یافت (Changed)
- تمام نمونههای نمایشگر Delphi، C++Builder و Lazarus میتوانند PDF ارسالشده به عنوان اولین آرگومان خط فرمان را باز کنند، و نمونههای
MultiPageViewerبرای C++Builder و Lazarus میانبر صریح برای انتخاب همه و کپی ارائه میدهند
رفع شد (Fixed)
- آخرین نسخه: 2.21.3; تاریخ انتشار:
Version 2.20.0
تغییر یافت (Changed)
- آخرین نسخه: 2.21.4; تاریخ انتشار:
Version 2.19.1
رفع شد (Fixed)
- آخرین نسخه: 2.21.12; تاریخ انتشار:
Version 2.19.0
تغییر یافت (Changed)
- آخرین نسخه: 2.19.1; تاریخ انتشار:
رفع شد (Fixed)
CJKTextLabدر C++Builder اکنون متن را از طریق توابع ویرایش PDFium صادر شده اندازهگیری میکند وMergePDFاز یک بارگذاری پیام ابهامآمیز VCL اجتناب میکند و بیلدهای پاکیزه RAD Studio 37 را بازمیگرداند
Version 2.18.3
رفع شد (Fixed)
- Document Time-stamp مربوط به PAdES B-LTA اکنون بهعنوان یک فیلد امضای قابلکشف ثبت میشود — یک Widget نامرئی که از طریق
/Annotsصفحه اول و/Fieldsدر AcroForm (ETSI EN 319 142-1 §5.4.3) قابل دسترسی است — بهجای یک شیء یتیم غیرقابل دسترسی که اعتبارسنجهای شمارنده فیلد امضا نمیتوانستند آن را پیدا کنند؛ حاشیهنویسیها و فیلدهای موجود حفظ میشوند
Version 2.18.2
رفع شد (Fixed)
- امضای PAdES و نوشتن کلاسیک cross-reference اکنون زمانی که یک byte offset از عرض فیلد ثابت ۱۰ رقمی (~9.3 گیگابایت) بیشتر شود یک خطای واضح ایجاد میکنند، بهجای اینکه placeholder
/ByteRangeبدون صدا نانوشته بماند (که امضای نامعتبر تولید میکند) یا خط xref 20 بایتی را از مرز رد کند (ISO 32000-1 §7.5.4)؛ خروجی cross-reference-stream که از فیلدهای باینری 8 بایتی استفاده میکند تحتتأثیر قرار نمیگیرد
Version 2.18.1
رفع شد (Fixed)
- امضای PAdES اکنون مراجع غیرمستقیم
/Annotsو/AcroFormو/Fieldsصفحه اول را از طریق هدر کامل شیء (ISO 32000-1 §7.5.3) و شماره generation واقعی مرجع حل میکند؛ جستجوی substring ساده قبلاً با یک شماره شیء داخل یک عدد بلندتر تطبیق میداد (5 0 Rرا به15 0 objحل میکرد) و generation هاردکد شده اشیاءgen>0را نادیده میگرفت که آرایههای فیلد امضا را خراب میکرد یا اسناد معتبر را رد میکرد - وقتی کاتالوگ، صفحه اول،
/Annots،/AcroFormیا/Fieldsداخل یک object stream باشد، امضا اکنون قبل از شکست روی یک نسخه گسترشیافته تلاش میکند بهجای اینکه سند را فوراً رد کند
Version 2.18.0
اضافه شد (Added)
ReadPdfVersionInfoنسخه هدر، نسخه هسته مؤثر، override کاتالوگ و سطح developer extension ادوبی را از یک PDF stream گزارش میدهد
تغییر یافت (Changed)
- ذخیرههای صریح PDF 1.3-1.7 اکنون ساختارهای کاتالوگ، منابع صفحه، XFA، redaction و developer-extension را در زمینه شیء دارندهشان اعتبارسنجی میکنند؛ خروجی رمزنگاریشده با نسخه صریح و normalization تزایدی PDF 1.3 برای حفظ یکپارچگی سند رد میشوند
- ذخیرههای مسیر فایل اکنون به یک فایل موقت خواهر مینویسند و مقصد را فقط پس از موفقیت همه بررسیهای فشردهسازی، normalization و نسخه جایگزین میکنند
رفع شد (Fixed)
- خروجی PDF 1.3 اکنون منبع کامل
/ProcSetمورد نیاز را حمل میکند و کلیدهای شفافیت PDF 1.4 را وقتی فقط مقادیر اولیه وضعیت گرافیک PDF 1.3 را تکرار میکنند حذف مینماید - فایلهای hybrid-reference، xref-stream و object-stream دیگر توسط compressor کلاسیک-xref بازنویسی نمیشوند و از افتادن ورودیهای شیء فشردهشده جلوگیری میکند
- نامهایی که شبیه کلیدهای شفافیت یا ویژگی کاتالوگ داخل رشتهها، نظرات یا نقشههای منابع نامرتبط هستند دیگر باعث شکستهای نادرست نسخه هدف نمیشوند
Version 2.17.0
اضافه شد (Added)
- امضاهای PAdES اکنون بهعنوان حاشیهنویسیهای Widget نامرئی در آرایه
/Annotsصفحه اول و در آرایه/Fieldsدر AcroForm ثبت میشوند و حاشیهنویسیها و فیلدهای فرم موجود را حفظ میکنند
تغییر یافت (Changed)
- بهروزرسانیهای تزایدی PDF/A، PDF/X، PDF/E، PDF/R، PDF/UA، PDF/VT و PAdES اکنون نمایش cross-reference سند منبع را حفظ میکنند: اسناد xref-stream یک بهروزرسانی xref-stream طبق ISO 32000-1 §7.5.8.1 دریافت میکنند، در حالی که اسناد کلاسیک همچنان جدول xref دریافت میکنند
- آفستهای cross-reference،
startxref،/Prev، مقادیر ByteRange در PAdES و پردازش محدوده SHA-256 اکنون از موقعیتهای 64 بیتی با hashing تکهتکهشده استفاده میکنند و فایلهای بزرگتر از 2 گیگابایت را در بیلدهای 64 بیتی ممکن میسازند - بستههای XMP قابلنوشتن تولیدشده اکنون 2048 بایت padding قبل از دستورالعمل بسته بستن ذخیره میکنند
Version 2.16.10
رفع شد (Fixed)
- گسترش object-stream دیگر نسخههای قدیمی اشیایی را که یک بهروزرسانی تزایدی آنها را از object stream به تعریف ساده منتقل کرده زنده نمیکند (ISO 32000-1 §7.5.7)؛ بررسیهای انطباق و تزریق marker قبلاً کاتالوگ یا دیکشنری metadata قدیمی را در چنین فایلهایی حل میکردند
Version 2.16.9
رفع شد (Fixed)
- در Free Pascal، رشتههای متنی که ورودیشان UTF-8 معتبر نیست بایتبهبایت بهعنوان Latin-1 گسترش مییابند و بهصورت رشتههای hex با UTF-16BE نوشته میشوند؛ بایتهای بالای خام قبلاً به یک رشته لیترال نشت میکردند که یک رمزگذاری رشته متنی قانونی PDF 1.7 نیست
- رمزگشایی stream اکنون دادههای deflate خام بدون بستهبندی RFC 1950 zlib (یک نقص رایج نویسندگان معیوب) را تشخیص میدهد و آن را در حالت raw رمزگشایی میکند، بنابراین اسکنهای انطباق دیگر بر روی چنین streamهایی بهطور خاموش کور نمیشوند
Version 2.16.8
رفع شد (Fixed)
- بهروزرسانیهای تزایدی نوشتهشده توسط مسیر post-processing ذخیره اکنون عنصر دوم (تغییرکننده) trailer
/IDرا طبق ISO 32000-1 §14.4 تازهسازی میکنند؛ هر دو عنصر قبلاً بهصورت کلمهبهکلمه کپی میشدند، بنابراین ابزارهای caching و synchronisation بعد از هر بهروزرسانی یک identifier تغییرنکرده میدیدند
Version 2.16.7
رفع شد (Fixed)
- پاکسازی body stream استفادهشده توسط اسکنهای انطباق اکنون نیاز دارد که کلیدواژه
streamبا end-of-line دنبال شود (ISO 32000-1 §7.3.8.1)؛ این کلمه داخل یک رشته لیترال مثل(downstream)قبلاً تمام ساختار بعدی تاendstreamبعدی را پاک میکرد و نقضهای واقعی را از بررسیهای سطح بایت پنهان میکرد - اسکنهای ویژگی ممنوع PDF/X و PDF/E اکنون رشتههای لیترال و نظرات (§7.2.2) را نیز پاک میکنند، بنابراین یک مقداری مانند
/Title (see /JavaScript docs)یا یک token کامنتشده دیگر یافته نادرستJavaScript،AcroFormیاLZWDecodeتولید نمیکند
Version 2.16.6
رفع شد (Fixed)
- ورودیهای DPM در PDF/VT اکنون در زمان نوشتن طبق مستندات اعتبارسنجی میشوند: نامهای کلیدی که قانون NMTOKEN در ISO 16612-2 §6.6 یا قانون پیشوند ثبتکننده در Annex E را نقض میکنند، و نامهای تکراری، بهجای نوشتن در دیکشنری DPart رد میشوند — یک نام حاوی فاصله قبلاً به یک جفت کلید/مقدار تقلبی تقسیم میشد و دیکشنری را خراب میکرد
Version 2.16.5
رفع شد (Fixed)
- حذف یک ورودی دیکشنری که مقدارش یک رشته hex است (مانند
/Check <...>) اکنون کل ورودی را حذف میکند؛ تزریقگرها قبلاً یک مقدار hex یتیم باقی میگذاشتند که یک دیکشنری نحوی شکسته تولید میکرد - حذف یک ورودی که مرجع غیرمستقیمش از newlineهایی بین tokenها استفاده میکند (ISO 32000-1 §7.3.10 هر whitespace را مجاز میداند) دیگر شماره generation و کلیدواژه
Rرا پشت سر باقی نمیگذارد
Version 2.16.4
رفع شد (Fixed)
- اسکن maximum-object-number دیگر نیاز ندارد که هدرهای شیء یک خط را شروع کنند (ISO 32000-1 §7.5.3 هر whitespace یا delimiter قبل از آنها را مجاز میداند)، بنابراین تزریقگرها دیگر نمیتوانند یک شماره شیء تخصیص دهند که با یک هدر
N G objدرونخطی برخورد کند و فایل را بهطور خاموش خراب کند؛ شمارههای شیء توسط سقف Annex C کراندار میشوند - streamهایی که
/Lengthشان یک مرجع غیرمستقیم است اکنون شیء integer ارجاعشده را حل میکنند و مقدارش را وقتی باendstreamبستن همراستا میشود استفاده میکنند؛ قبلاً این streamها توسط جستجوی pattern کراندار میشدند که bodyهایی را که بهطور قانونی حاوی توالی بایتendstreamهستند قطع میکرد — نمونهای برای پیوستهای PDF تعبیهشده
Version 2.16.3
رفع شد (Fixed)
- مسیرهای فشردهسازی stream اسناد cross-reference-stream (فایلهای PDF 1.5+ بدون کلیدواژه کلاسیک
trailer) را بدون تغییر عبور میدهند؛ مسیر rebuild قبلاًstartxrefرا بهاشتباه بهعنوان موقعیت جدول parse میکرد و یک trailer حدسی میساخت که میتوانست یک فایل غیرقابلباز تولید کند - compressor streamهای metadata XMP را skip میکند تا یک سند PDF/A stream metadata اجباری فیلترنشده خود را حفظ کند (ISO 19005-1 §6.7.2) و streamهای فایل خارجی (
/Fبا/FFilter) را دستنخورده رها میکند - جدول cross-reference بازسازیشده یک نسخه بدون stream از سند را اسکن میکند، بنابراین محتوای باینری stream دیگر نمیتواند هدرهای شیء جعلی بسازد یا جدول را متورم کند؛
/Sizeدر trailer بازسازیشده اکنون جدول واقعی را منعکس میکند و شمارههای شیء با سقف Annex C کراندار میشوند - تعیین موقعیت جدول cross-reference اصلی پایانهای خط CR-only را میپذیرد (ISO 32000-1 §7.5.1) و دیگر نمیتواند حروف
xrefداخلstartxrefرا تطبیق دهد؛ اسکن کلیدواژه stream همان نگهبان دمendstreamاستفادهشده در جای دیگر را به دست آورد و اکنون از body streamهای skipشده عبور میکند
Version 2.16.2
رفع شد (Fixed)
- تجزیه integer در خوانندگان PDF سطح بایت اکنون علامت صریح
+مجاز در ISO 32000-1 §7.3.3 را میپذیرد و رشتههای رقمی که overflow میکردند را رد میکند، بنابراین اسناد خصمانه یا فاسد دیگر نمیتوانند طولها و آفستهای parseشده را به مقادیر گمراهکننده بپیچانند
Version 2.16.1
رفع شد (Fixed)
- تزریقگر PDF/UA مقدار
/Langکاتالوگ را بهعنوان یک رشته متنی PDF مناسب مینویسد؛ قبلاً مقدار را از طریق XML escaper عبور میداد، بنابراین یک تگ زبانی حاوی&یا پرانتز یک ورودی خراب تولید میکرد و ورودی غیر-ASCII بهعنوان UTF-8 خام نوشته میشد - ورودی Info
/ISO_PDFEVersionدر PDF/E از رمزگذار رشته متنی مشترک استفاده میکند و مقادیر غیر-ASCII را در PDF 1.7 قانونی نگه میدارد - XML escaping برای بستههای XMP کاراکترهای کنترلی که در XML 1.0 غیرقانونی هستند را میاندازد، بنابراین metadata کپیشده از یک سند منبع آسیبدیده دیگر نمیتواند کل stream metadata را غیر well-formed کند
- تبدیل تاریخ PDF به XMP اعتبارسنجی میکند که فیلدهای تاریخ عددی هستند و فیلد دقیقه گمشده را padding میکند و از تاریخهای ISO 8601 بدشکل در XMP تولیدشده جلوگیری میکند؛ در پلتفرمهای غیر Windows، timestamp fallback اکنون شامل زمان روز بهجای تاریخ خالی میشود
Version 2.16.0
اضافه شد (Added)
- رمزگشایی stream اکنون predictorهای
/DecodeParms(predictorهای PNG 10-15 و predictor TIFF 2، ISO 32000-1 §7.4.4.4) را بعد از FlateDecode بازسازی میکند و/Colors،/BitsPerComponentو/Columnsرا رعایت میکند؛ object streamهای فشردهشده با predictor — یک انتخاب رایج نویسندگان PDF 1.5+ — قبلاً بایتهای diffed را نشان میدادند، بنابراین اشیایی که حمل میکنند بهطور خاموش برای اسکنهای انطباق و تزریق marker نامرئی بودند
رفع شد (Fixed)
- تشخیص FlateDecode اکنون مقدار
/Filterرا بهجای substring match بهعنوان name یا array parse میکند، بنابراین زنجیرههای filter cascade شده و وقوع کلمه داخل مقادیر نامرتبط دیگر inflate نادرست را فعال نمیکنند؛ زنجیرههای پشتیبانینشده مانند قبل به بایتهای خام برمیگردند
Version 2.15.1
رفع شد (Fixed)
- اسکنر دیکشنری اکنون هنگام تعادل
<</>>(ISO 32000-1 §7.2.2) رشتههای لیترال، رشتههای hex و نظرات را skip میکند، بنابراین دیکشنریهایی که حاوی مقادیری مانند(A >> B)یا یک رشته hex چسبیده به delimiter بستن هستند دیگر در طول parse trailer، کاتالوگ و اسکن انطباق قطع نمیشوند - استخراج رشته لیترال اکنون مجموعه escape کامل §7.3.4.2 جدول 3 را رمزگشایی میکند —
\n \r \t \b \f، اکتال\ddd، ادامه خط و normalization EOL escapeنشده — بهجای کپی کردن حرف escape بهصورت تحتالفظی و مقایسههای صحیح/Producer،/GTS_PDFXVersionو/ISO_PDFEVersionرا برای نویسندگانی که از octal escape استفاده میکنند بازمیگرداند - رشتههای لیترال نوشتهشده توسط تزریقگرهای marker اکنون CR، LF و سایر کاراکترهای کنترلی را escape میکنند تا مقادیر بعد از normalization EOL سمت خواننده بایتبهبایت دستنخورده بمانند
Version 2.15.0
رفع شد (Fixed)
- بهروزرسانیهای تزایدی نوشتهشده توسط تزریقگرهای marker PDF/A، PDF/X، PDF/E، PDF/R، PDF/UA و PDF/VT و مسیرهای امضای PAdES و DSS اکنون identifier دائمی فایل سند منبع را حفظ میکنند: عنصر اول
/IDtrailer طبق ISO 32000-1 §14.4 بهصورت verbatim منتقل میشود و فقط عنصر دوم (تغییرکننده) تازهسازی میشود؛ قبلاً هر دو عنصر بازتولید میشدند، بنابراین مراجع خارجی و workflowهای اعتبارسنجی بلندمدت بعد از هر ذخیره یک هویت سند متفاوت میدیدند - امضاهای PAdES، تزریق DSS و Document Time-stampهای B-LTA اکنون مرجع
/Infotrailer منبع را به جلو حمل میکنند (ISO 32000-1 §7.5.6)، بنابراین خصوصیات سند دیگر بعد از امضا از پانلهای خواننده ناپدید نمیشوند؛ trailer Document Time-stamp نیز آرایه/IDرا به دست میآورد - fallback
/Infotrailer برای اسناد cross-reference-stream اکنون دیکشنری XRef stream را بهدرستی تعیین موقعیت میکند و شماره generation مرجع را حفظ میکند؛ قبلاً هرگز روی فایلهای PDF 1.5+ منطبق تطبیق نمیداد و/Infoرا بهطور خاموش رها میکرد
Version 2.14.4
رفع شد (Fixed)
- تاریخ
/Mدیکشنری امضا که توسطTPdf.SignPadesوSignPadesBytesنوشته میشود اکنون پیشوند اجباریD:و marker offset UTC بهصورتZکه ISO 32000-1 §7.9.4 نیاز دارد را حمل میکند؛ اعتبارسنجهای سختگیرانه قبلاً زمان امضا را بهعنوان یک رشته تاریخ بدشکل رد میکردند
Version 2.14.3
رفع شد (Fixed)
- جستجوهای کلید دیکشنری در PDF خوانده مشترک اکنون tokenهای نام کامل را تطبیق میدهند (ISO 32000-1 §7.3.5)؛ یک stream که دیکشنریش
/Length1را قبل از/Lengthفهرست میکرد (نمونهای برای streamهای FontFile) قبلاً به تعداد بایت اشتباه قطع میشد و اسکنهای انطباق PDF/A، PDF/UA و سایر موارد که streamهای فونت، CMap یا metadata میخوانند را بهطور خاموش کور میکرد - جستجوهای trailer
/Encrypt،/Root،/Sizeو/Infoدیگر کلیدهای طولانیتری را که پیشوند یکسان دارند (مانند/EncryptMetadata) تطبیق نمیدهند - گسترش object-stream دیگر به یک مقدار
/Nفاسد یا خصمانه اعتماد نمیکند: مقادیر غیر integer اکنون بهجای یک عدد غیر مقداردهیشده 0 برمیگردانند، و یک کران بالا مشتقشده از/Firstاز تخصیصهای بیش از حد هنگام اسکن اسناد بدشکل جلوگیری میکند
Version 2.14.2
رفع شد (Fixed)
- تزریقگرهای marker PDF/X، PDF/VT، PDF/UA، PDF/E و PDF/R اکنون اسناد منبع رمزنگاریشده را بدون تغییر عبور میدهند بهجای اینکه بخشهای بهروزرسانی متن ساده append کنند؛ رفتار قبلی فایلهایی تولید میکرد که آخرین trailerشان ورودی
/Encryptرا از دست داد (ISO 32000-1 §7.5.6)، بنابراین خوانندگان منطبق body رمزنگاریشده را بهعنوان متن ساده اشتباه میخواندند TPdf.SignPades،SignPadesBytesوInjectPadesDssMarkersاکنونEPadesCryptoرا وقتی سند منبع رمزنگاری شده است ایجاد میکنند، بهجای اینکه بهطور خاموش یک فایل فاسد یا غیرقابلتأیید منتشر کنند؛ قبل از امضا یا جاسازی مواد DSS، رمزگذاری را حذف کنید
Version 2.14.1
رفع شد (Fixed)
TPdf.SignPadesوSignPadesBytesاکنون همه چهار فیلد/ByteRangeدیکشنری امضا را پر میکنند؛ قبلاً سه فیلد آخر در صفرهای placeholderشان باقی میماندند، بنابراین امضاهای تولیدشده یک بازه بایت خالی اعلام میکردند و در اعتبارسنجهای منطبق شکست میخوردند- دیکشنریهای Document Time-stamp PAdES B-LTA همان تصحیح back-fill
/ByteRangeرا دریافت میکنند ValidatePadesComplianceاکنون layout امضای استاندارد را میپذیرد که در آن شکاف بازه بایت مقدار/Contentshex را نگه میدارد، و بررسی میکند که بخش دوم بازه دقیقاً در پایان فایل به پایان میرسد؛ قبلاً فقط بازههای بدون شکاف بررسی coverage را قبول میکردند
Version 2.14.0
اضافه شد (Added)
TPdf.ExportXFDFهر مقدار فیلد فرم و حاشیهنویسی را در همه صفحات به یک سند XFDF (ISO 19444-1) سریالسازی میکند،<fields>برای مقادیر فرم سلسلهمراتبی و<annots>برای همه زیرانواع حاشیهنویسی پشتیبانیشده منتشر میکندTPdf.ImportXFDFیک سند XFDF را به PDF بارگذاریشده برمیگرداند، حاشیهنویسیها را در صفحات تطبیقیافته بازآفرینی میکند و مقادیر فیلد را روی حاشیهنویسیهای Widget آنها اعمال میکند- رکورد
TPdfAnnotationفیلدهایName(NM)،Subject،ModificationDate(M)،CreationDate،Icon،Opacity(CA)، endpointهای خط، رأسهای چندضلعی/polyline و فیلدهای ink-list gesture را به دست آورد تا round-tripهای XFDF metadata کامل حاشیهنویسی را حفظ کنند - نمونه جدید
XfdfLabدر مجموعههای demo Delphi، C++Builder و Lazarus round-trip صادرات/واردات را نشان میدهد
Version 2.13.6
رفع شد (Fixed)
ValidatePdfAاکنون streamهای/Metadataکاتالوگ بدون/Type /Metadataیا/Subtype /XMLرا از طریقpvaiMissingXmpMetadataبهعنوان XMP metadata گمشده تلقی میکند- گزارشهای preflight PDF/A اکنون
pvaiMissingXmpMetadataرا بهعنوان Metadata دستهبندی میکنند و یک stream/Metadataکاتالوگ با/Type /Metadata،/Subtype /XML، XMP فیلترنشده و markerهایpdfaidتوصیه میکنند
Version 2.13.5
رفع شد (Fixed)
ValidatePdfAاکنون حاشیهنویسیهای Widget بدون دیکشنری appearance و حاشیهنویسیهای PDF/A-2 / PDF/A-3 که نیاز به/APدارند اما فاقد آن هستند را از طریقpvaiAnnotationApDictViolationگزارش میکند- گزارشهای preflight PDF/A اکنون
pvaiAnnotationApDictViolationرا بهعنوان محتوایی دستهبندی میکنند که تزریق marker نمیتواند آن را تعمیر کند
Version 2.13.4
رفع شد (Fixed)
ValidatePdfAاکنون تصاویر inline PDF/A-2 و PDF/A-3 که مقدار/Iیا/Interpolateشانtrueاست را از طریقpvaiImageDictionaryViolationگزارش میکند و با پوشش دیکشنری Image XObject موجود همخوانی دارد- گزارشهای preflight PDF/A اکنون
pvaiImageDictionaryViolationرا بهعنوان محتوایی دستهبندی میکنند که تزریق marker نمیتواند آن را تعمیر کند
Version 2.13.3
رفع شد (Fixed)
ValidatePdfAاکنون تصاویر inline PDF/A-1 که از فیلترهای/LZWDecodeیا/LZWمختصر داخل content streamها استفاده میکنند را از طریقpvaiInlineImageLzwForbiddenگزارش میکند و با پوشش تصویر inline موجود PDF/A-2 و PDF/A-3 همخوانی دارد- اسکنر فیلتر تصویر inline اکنون از نامهای منبع پیشرو مانند
/GS1عبور میکند و از توقف هنگام اسکن content streamهای گستردهتر PDF/A-1 اجتناب میکند
Version 2.13.2
اضافه شد (Added)
TPdf.SetFocusedFormFieldTextمتن را از طریقFORM_ReplaceSelectionبه بافر ویرایش فیلد فرم در حال تمرکز مینویسد و متقارن باFocusedFormFieldTextاست. برای فیلدهای text/combo در AcroForm مقدار هنگام از دست دادن تمرکز به/Vcommit میشود و ماندگار است؛ برای فیلدهای متنی XFA نوشتن فقط در بافر in-memory صورت میگیرد (PDFium هیچ API عمومی برای reconcile مقادیر XFA با بسته datasets نشان نمیدهد، بنابراین در ذخیرهها ماندگار نمیشود)- پلتفرم JavaScript host اکنون هر زمان که موتور V8 در دسترس باشد متصل میشود، صرفنظر از اینکه سند XFA باشد — بنابراین JavaScript تعبیهشده AcroForm (scriptهای سطح سند، محاسبات فیلد،
app.alert) هم میتوانند اجرا شوند. قبلاًm_pJsPlatformفقط برای اسناد XFA سیمکشی میشد و JS AcroForm را بهطور خاموش غیرفعال میگذاشت
تغییر یافت (Changed)
- اتصال پلتفرم JavaScript اکنون مستقل از تصمیم XFA در
InitializeFormFillاست — جدولm_pJsPlatformهر زمان کهV8FeaturesAvailableدرست است ساخته میشود و بعد از سیمکشی نسخه/callback XFA اعمال میشود نه داخل آن
Version 2.13.1
اضافه شد (Added)
- رویدادهای host جدید اطلاعاتی را که callbackهای form-fill در v2.13.0 قبلاً میبلعیدند نشان میدهند:
OnXfaUriAction،OnXfaPageCountChanged،OnXfaFocusChange،OnXfaEmail،OnXfaHttpRequest،OnXfaOpenFile،OnJavaScriptBeep،OnJavaScriptPrint،OnJavaScriptMail،OnJavaScriptSubmitForm. هر رویداد وقتی تعییننشده است بهطور پیشفرض به رفتار no-op موجود برمیگردد، بنابراین hostهای موجود تحتتأثیر قرار نمیگیرند - ویژگی read-only
TPdf.XfaFormPacketsیک snapshot یکبار از همه بستههای XFA (TXfaPacketList) برمیگرداند و انواعTXfaPacket/TXfaPacketListقبلاً اعلامشده اما استفادهنشده را تحقق میبخشد - کدهای خطا XFA PDFium
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTاکنون bind شدهاند و از طریقLastPdfErrorنشان داده میشوند و "خطای ناشناخته" عمومی را برای شکستهای بارگذاری/چیدمان XFA جایگزین میکنند
تغییر یافت (Changed)
FFI_DoURIActionWithKeyboardModifierاکنون قبل از shell-executing یک URI از یک فیلد XFA باOnXfaUriActionمشورت میکند و به host حق وتو میدهد (امنیت: یک فیلد XFA مخرب قبلاً میتوانست URLهای دلخواه را بدون قید راهاندازی کند). handlerهای تعییننشده پیشفرض قبلیShellExecuteWرا حفظ میکنندDecodeFormFieldTypeاکنون انواع فیلد XFA را از طریقIsXfaFormFieldهدایت میکند نه از طریق یک case صریح 8-شاخه، که enum را باFPDF_FORMFIELD_XFA_*توسط offset ترتیبی همراستا نگه میدارد
رفع شد (Fixed)
ValidatePdfAاکنون ادعاهای PDF/A-1 که از streamهای cross-reference PDF 1.5 یا object streamها استفاده میکنند را با issue جدیدpvaiPdfA1Pdf15Structureگزارش میکند، در حالی که object streamها را برای PDF/A-2 و PDF/A-3 همچنان مجاز میداند
Version 2.13.0
اضافه شد (Added)
- پشتیبانی کامل runtime از XFA (XML Forms Architecture):
TPdf.InitializeFormFillاکنون همه ۱۴ callback نسخه 2FPDF_FORMFILLINFOرا سیمکشی میکند و یکIPDF_JsPlatformرا متصل میکند تا یکpdfium.dllفعال XFA بتواند فرمهای XFA پویا را رندر کرده و scriptنویسی کند - واحد جدید
Lib\FPdfXfa.pasثابتهای XFA و انواعTXfaPacket/TXfaSaveFormatرا که قبلاً فقط در نظرات به آنها اشاره شده بود اعلام میکند - خواننده بسته استاتیک XFA بر روی
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameبه علاوهGetXfaTemplate/GetXfaDatasets/GetXfaConfigبستههای XFAtemplate،datasetsوconfigرا بهعنوان XML خام بدون نیاز به runtime فعال XFA استخراج میکنند - پروبهای قابلیت:
XfaFeaturesAvailableعمومی، وTPdf.XfaRuntimeAvailableبرای هر سند (اینکه آیاFPDF_LoadXFAواقعاً موفق شد) وTPdf.XfaStaticReadable(اینکه آیا صادرات خواننده بسته حل میشوند) TPdfFormFieldTypeباfiXfa،fiXfaCheckBox،fiXfaComboBox،fiXfaImageField،fiXfaListBox،fiXfaPushButton،fiXfaSignature،fiXfaTextFieldگسترش یافت وDecodeFormFieldTypeمقادیر جدیدFPDF_FORMFIELD_XFA_*را نگاشت میکند- رویدادهای host JavaScript بر روی
TPdf:OnJavaScriptAlert،OnJavaScriptResponse،OnXfaGotoUrlوOnXfaRuntimeMissingبه host اجازه میدهند دیالوگهای JS و ناوبری XFA را سفارشی کنند، یا واکنش نشان دهند وقتی یک سند XFA نمیتواند موتور را اجرا کند - نمونه جدید Delphi
XfaLabشناسایی XFA، استخراج بسته، بررسی قابلیت و مسیر fallback runtime-missing را نشان میدهد
تغییر یافت (Changed)
TPdf.LoadDocumentاکنون ورودی را برای markerهای XFA (/XFAدر دیکشنری AcroForm، یا/NeedsRenderingکاتالوگ) پیشاسکن میکند و وقتی آنها پیدا میشوند، قبل از اولین بارگذاری کتابخانه singleton با تنظیمEnableV8Engine := Trueبهطور خودکارpdfium.v8.dllرا انتخاب میکندTPdf.GetPageCountاکنون تعداد صفحاتی را که موتور XFA از طریقFFI_PageEventبعد از صفحهبندی مجدد پویا گزارش میدهد منعکس میکند، نه فقط درخت صفحه استاتیک PDF- وقتی یک سند XFA باز میشود اما runtime در دسترس نیست،
InitializeFormFillاکنونversion=1وxfa_disabled=1را pin میکند بهجای اینکه نسخه 2 با callbackهای تعییننشده را درخواست کند
Version 2.12.2
رفع شد (Fixed)
ValidatePdfAComplianceاکنون namespaceهای XMP سفارشی استفادهشده بدونpdfaExtension:schemasرا گزارش میکند در حالی که metadata استانداردpdfaidبدون اعلانهای extension را همچنان میپذیرد- اعتبارسنجی فایل تعبیهشده PDF/A-3 اکنون هر دو ورودی سطح بالای
/Fو/UFرا در filespec dictionaryها نیاز دارد و کلیدهای stream/EFتو در تو را هنگام بررسی آن نامها نادیده میگیرد
Version 2.12.1
رفع شد (Fixed)
ValidatePdfAComplianceاکنون tokenهای نام PDF escapeشده را قبل از تطبیق JavaScript، LZWDecode، Type1 و نامهای ممنوع مرتبط رمزگشایی میکند، بنابراین نامهای رمزگذاریشده اما از نظر معنایی یکسان بهدرستی گزارش میشوند- بررسیهای تصویر inline PDF/A اکنون مقادیر
/Filterو/Fکه از/LZWDecode،/LZWمختصر یا/Cryptاستفاده میکنند، از جمله فرمهای array و escaped-name را رد میکنند - اعتبارسنجی PDF/A اکنون streamهای metadata با stream filterهای ممنوع، پروفایلهای ICC OutputIntent که تعداد مؤلفه
/Nشان گمشده یا ناسازگار است، و filespecهای فایل تعبیهشده PDF/A-3 با/AFRelationshipگمشده یا نامعتبر را گزارش میکند
Version 2.12.0
اضافه شد (Added)
- درخواستهای HTTP TSA اکنون تایماوتهای صریح 30 ثانیهای برای هر مرحله (resolve/connect/send/receive) از طریق
WinHttpSetTimeoutsتنظیم میکنند، بنابراین یک timestamp authority کند یا غیرقابل دسترسی نمیتواند thread امضا را بهطور نامحدود متوقف کند - استخراج nonce برای هر درخواست برای درخواستهای timestamp PAdES B-T / B-LTA وقتی caller
TPadesSignOptions.Nonceرا حذف میکند: یک fold SHA-256 از counter یکنواخت + ساعت دیواری +GetTickCount64+ process id جایگزین fallback ثابت قبلی$100000000میشود، بنابراین دو درخواست صادرشده در همان میلیثانیه دیگر همان anti-replay nonce را دوباره استفاده نمیکنند PdfInflateاکنون خروجی decompressشده را در 256 MiB محدود میکند تا از خالی کردن حافظه توسط یک stream فشردهشده zlib بر روی ورودی خصمانه یا فاسد جلوگیری کند ("zlib bomb")؛ این سقف برای هر stream PDF واقعی سخاوتمندانه است
تغییر یافت (Changed)
- overlay blending در
TPdfView(هایلایت جستجو، انتخاب متن، کلمه خواندن، انتخاب spread) دیگر ازGetPixel/SetPixelVبرای هر پیکسل استفاده نمیکند؛ مستطیل اکنون از طریق یکTBitmapخارج از صفحه 32-bpp وScanLineدر یک پاس blend میشود FPdfAsn1.TDerReader.ReadIntegerاکنون فیلدهای INTEGER طولانیتر از 8 بایت (و 8 بایت منفی که bit علامتشان نیاز بهshl >= 64دارد) را رد میکند و 0 برمیگرداند بهجای محاسبه یک مقدار اشتباهParseTimeStampRespدیگر nonce درخواست را بهعنوانTPadesTimestamp.Nonceبازتاب نمیدهد؛ فیلد در 0 میماند تا "تأیید نشده" را نشان دهد
رفع شد (Fixed)
PointsToPixelsبرای هر DPI ورودیاش را بدون تغییر برمیگرداند: مقسومعلیهPointsPerInch(ثابت 72) بود بهجای 72 تحتالفظی و فرمول را بهResult := Pointsفروکاهید. هر caller خارجی که از طریق این helper اندازهگیری points→device-pixel انجام میدهد اکنونPoints × PixelsPerInch / 72صحیح را میگیردPdfMaxObjNumدر اسنادی که از object streamها استفاده میکنند (ObjStm در PDF 1.5+) کمتر میشمرد: اشیاء فشردهشده داخل/ObjStmهیچ markerN 0 objندارند، بنابراین اسکن raw-byte آنها را از دست میداد. اسکن اکنون ابتدا object streamها را گسترش میدهد تا هر شماره شیء مرئی باشدInjectPdfAMarkersدیگر یک ادعای انطباق PDF/A را در یک سند رمزنگاریشده جعل نمیکند: PDF/A (ISO 19005-1 §7.1) رمزنگاری را ممنوع میکند و تزریقگر قبلاً منبع را با markerها عبور میداد حتی در این حالت. وقتیHasEncryptتنظیم شده است منبع اکنون بدون تغییر عبور میکندPdfReadStreamBytesاکنون یک/Lengthبزرگتر از کل فایل را قبل از تخصیص بافر نتیجه رد میکند
Version 2.11.0
اضافه شد (Added)
- رکورد PDFium
FPDF_FILEHANDLERاکنون شش callback خود را (Release،GetSize،ReadBlock،WriteBlock،Flush،Truncate) بهعنوان فیلدهای واقعی بهجای نظرات اعلام میکند و با layout هدر C مطابقت دارد - بارگذاری و تخلیه کتابخانه PDFium (
LoadLibrary/UnloadLibrary) اکنون توسط یک critical section سراسری پروسه سریالسازی میشوند، بنابراین دو thread workerTPdfFuture<T>نمیتوانند هر دوPDFiumLibrary=0را ببینند و double-bind کنند - یک بخش
initialization/finalizationاکنونUnloadLibraryرا هنگام تخلیه واحد فراخوانی میکند و اطمینان حاصل میکند کهFPDF_DestroyLibraryاجرا میشود (join thread worker، تخلیه V8 isolate، teardown font/cache)
تغییر یافت (Changed)
TPdf.SetActiveاکنون هر استثنایی را در طول بارگذاری میبلعد (قبلاً فقطEPdfError)، بنابراین یک خطای stream یا access violation در طول تنظیم form/pageActive=Falseرا باقی میگذارد بهجای یک component بارگذاریشده ناقص با وضعیت نامعین- رمزگذاری کاراکتر سازگار برای آرگومانهای کلید metadata PDFium:
TPdf.GetMetaTextاکنون همان split FPCAnsiString/ DelphiUTF8Encodeرا مانندGetViewerPreferenceو مسیرهای بارگذاری استفاده میکند - helperهای
BytesToAnsi،AnsiToBytes،WriteBytesوWriteStrdedup شدند:FPdfCompressاکنون آنها را ازFPdfPdfCommonimport میکند
رفع شد (Fixed)
- نشت منبع در
TPdf.LoadDocument(فایل، حافظه،TBytes،TMemoryStream، stream سفارشی) وTPdf.CreateDocument: اگرInitializeFormFillیاReloadPageبعد از موفقیتFPDF_LoadDocument/FPDF_CreateNewDocumentاستثنا ایجاد میکرد، دسته بومیFPDF_DOCUMENTنشت میکرد. هر مسیر اکنون سند را در صورت شکست میبندد - تشخیصهای بارگذاری DLL PDFium دوستانهتر:
CheckLoadLibraryERROR_BAD_EXE_FORMAT(193) را تشخیص میدهد و یک عدم تطابق معماری 32/64 بیتی را گزارش میکند و به بیلدDLLs/Win32یاDLLs/Win64مطابق اشاره میکند.CheckGetProcAddressاکنون بیان میکند کهpdfium.dllمستقر از binding قدیمیتر است وقتی یک صادرات مورد نیاز گمشده است
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تنها زمانی بهعنوان fallback باقی میماند که تجزیهٔ DER گواهی شکست بخورد
تغییر یافت (Changed)
TCmsSignerId.SerialNumber: Int64باSerialDer: TBytes(serialNumber TLV خام) جایگزین شد. سازندهٔ CMS برش TLV را دقیقاً درIssuerAndSerialNumberجایگذاری میکند و از سرریزInt64در شمارههای سریال ۲۰ بایتی CA (کران بالای 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اکنون مقید شده و نشت یک context-بهازای-هر-امضای یادشده در v2.8.0 را میبندد - گردشکار یکپارچهسازی PDF/A:
TPdf.SignPadesWithPdfAابتدا سند را به PDF/A (بالاترین سطحی که کتابخانه امروز emits میکند) تبدیل میکند و سپس امضای PAdES درخواستشده را اعمال میکند — الگوی container بایگانی بلندمدت که 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 بازگشتی را بهعنوان صفت unsigned مربوط به SignerInfo با نامsignature-time-stampجایگذاری میکند — گام B-T trusted-time (EN 319 142-1 §6.3 نیازمندی o) FPdfTsa: کلاینت RFC 3161 چندسکویی —BuildTimeStampReq(نسخهٔ ۱، SHA-256 messageImprint روی مقدار امضا، nonce، certReq=true)،ParseTimeStampResp(PKIStatus 0/1 را میپذیرد، 2+ را رد میکند، TimeStampToken ContentInfo را دقیقاً استخراج میکند)، وRequestTimestamp(دنبالهٔ یکبارهٔ build+POST+parse).PadesTsaAvailableقابلیت را در سکوهایی بدون HTTP backend محدود میکندFPdfTsaWin: backend مربوط به Windows WinHttp، که بهصورت پویا از winhttp.dll مقید میشود (صفر وابستگی جدید در زمان کامپایل؛ HTTPS توسط مخزن گواهی ویندوز مذاکره میشود). الگوی مقیدسازی پویایFPdfCryptoWinرا بازتاب میدهدFPdfCms:ExtractSignatureValueیک CMS ساختهشده را برای بازیابی octets خام امضا (ورودی هش TSA) پیمایش میکند، وAddSignatureTimestampToCmsContentInfo را با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 که CMS نیاز داردFPdfCms: سازندهٔ CAdES SignedData (BuildSignedData) که صفتهای signed مربوط به content-type، message-digest و signing-certificate-v2 را که پایهٔ PAdES الزام میکند emits میکند، با signing-time و commitment-type-indication اختیاری. هش signedAttrs روی فرم SET-tagged (0x31) محاسبه و با تگ IMPLICIT [0] (0xA0) مطابق RFC 5652 §5.4 مجدداً emits میشودFPdfCrypto+FPdfCryptoWin: انتزاع backend رمزنگاری باPadesCryptoAvailable/ResolvePadesSigner، و پیادهسازی Windows که بهصورت پویا crypt32.dll / ncrypt.dll را مقید میکند (بدون وابستگی DLL جدید در زمان کامپایل). امضاهای ECDSA از فرم IEEE P1363 r¦s مربوط به ویندوز به فرم DERECDSA-Sig-Valueکه CMS نیاز دارد بازرمزگذاری میشوندSignPadesBytes: تزریق امضا در سطح بایت — یک slot هگز/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 در سطح بند: ۲۶ enum با الگوی
ppei*پذیرش/SubFilter(adbe.pkcs7.sha1وadbe.x509.rsa_sha1بهعنوان ممنوع علامتگذاری میشوند)، پوشش فایل/ByteRange، ممنوعیت/Cert، شکل CMSSignedData(یک امضاکننده، detached eContent، بازهٔ نسخه)، صفتهای signed موردنیاز (content-type،message-digest،signing-certificate/v2)، هشهای ممنوع (MD5، SHA-1)، انحصار متقابل/Reasonدر برابرcommitment-type-indication(نیازمندی d)، نیازمندی B-T trusted-time، نشانگر B-LT/DSS+/Certs+ ESIC Level 1، و نشانگر B-LTA Document Time-stamp + ESIC Level 2 را پوشش میدهند - تزریقکنندهٔ DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamیک بهروزرسانی افزایشی روی یک نسخه از سند اضافه میکنند که یک دیکشنری/DSS(با آرایههای stream/Certs،/OCSPs،/CRLs) و نشانگر/Extensions /ESIC(Level 1 یا ۲) را حمل میکند، در حالی که bytes اصلی را حفظ میکند — گام جایگذاری مادهٔ اعتبارسنجی B-LT/B-LTA (بند 5.4.2) - مرحلهٔ چندسکویی و بدون وابستگی: اعتبارسنج و تزریقکنندهٔ DSS بهصورت Pascal خالص هستند و روی هر IDE پشتیبانیشده (Delphi، Lazarus، FPC، C++Builder) کار میکنند؛ برای این نسخه backend رمزنگاری لازم نیست و وابستگی DLL جدیدی معرفی نمیشود
Version 2.6.0
تغییر یافت (Changed)
- حذف کدهای تکراری بین استانداردها: هفت تابع کمکی تکراری دیگر (PdfEnclosingObjNum، PdfDictRefNum، PdfExpandObjectStreams، PdfTextStr، ExtractLiteralString، ExtractXmpAttr) از واحدهای استاندارد جداگانه حذف و در
FPdfPdfCommonتجمیع شدند که بار نگهداری copy-paste را حدود ۳۰۰ خط کاهش میدهد - کیفیت PreflightReport: مسائل content-class مربوط به PDF/X و PDF/E که قبلاً در دستهٔ عمومی “missing marker” میافتادند اکنون دستههای Content/Metadata/Security دقیق و توصیههای خاص هر بند را حمل میکنند (~۱۵ enum در طول هر دو استاندارد)
- پوشش تستهای PDF/E و PDF/R: شش enum دیگر با پوشش صفر، تستهای مثبت دریافت کردند (
pveiLzwForbidden،pveiJavaScriptForbidden،pveiFormFieldsForbidden،pveiEmbeddedFilesForbidden،pvriBadHeader،pvriProhibitedInfoEntry) - اصلاح build مربوط به 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 هستند یا طول آن از ۷۰ تجاوز میکند علامتگذاری میکند
برطرف شد (Fixed)
InjectPdfVTMarkersاکنون Info/CreationDateو/ModDateرا از گزینههای ذخیره مینویسد، تا فایل تولیدشده بدون یکpvviInfoModDateMismatchکاذب ازValidatePdfVTComplianceعبور کند (تزریقکننده قبلاً تاریخهای 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/VT را از طریقvtmviInlinePdfNotPdfVTعلامتگذاری میکند
Version 2.5.1
افزوده شد (Added)
- اعتبارسنجی تکهبندی DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingیک آرایهٔ/DPartsرا که زیرآرایههای غیرنهایی آن دقیقاً ۸۱۹۲ مدخل ندارند یا زیرآرایهٔ آخر آن خارج از ۱..۸۱۹۲ قرار دارد علامتگذاری میکند - سازگاری 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 تکرارشونده را برطرف کردند که در آن افست ۱-based بازگشتی ازAnsiFindKeyبهعنوان یک افست بایت مطلق درون PDF بسطیافته تلقی میشد
Version 2.5.0
افزوده شد (Added)
- فرادادهٔ Document Part برای PDF/VT (DPM، ISO 16612-2 §6.6):
TPdfVTSaveOptionsDpmEntriesوDpmTargetرا به دست آورد تا یک writer بتواند یک دیکشنری/DPMرا به گره DPart ترکیبشده متصل کند، با اعتبارسنجی نام کلید در برابر قاعدهٔ second-class-prefix ضمیمهٔ E و قواعد NMTOKEN / یکتایی / شکلGTS_Managedدر §6.6 در سمت اعتبارسنج - تبادل جریان PDF/VT-2s (ضمیمهٔ A): واحد جدید
FPdfPdfvtMimeBuildPdfVT2sStreamو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: مقدار enumptvUnknownحذف میشود (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 اکنون دقیقاً یکبار در پایگاه کد وجود دارد
Version 2.4.0
برطرف شد (Fixed)
- تابع
InjectPdfUaMarkersدیگر مرجع/Infoمربوط به trailer را روی پایه cross-reference-stream رها نمیکند: تابع محلیSourceTrailerInfoRef(که فاقد xref-stream fallback بود) با تابع مشترکPdfSourceTrailerInfoRefجایگزین شده است (که از نسخه PDF/A ارتقا یافته که از v2.0.0 دارای fallback بوده است) - تابع مشترک
PdfReadStreamBytesاکنون مراجع غیرمستقیم/Length N G Rرا مدیریت میکند (که از نسخه محلی PDF/A پورت شده است)، بنابراین اعتبارسنجهای PDF/VT، PDF/R و PDF/E دیگر جریانهای متادیتای XMP تولید شده توسط ابزارهایی که از Length غیرمستقیم استفاده میکنند (Acrobat، Ghostscript) را اشتباه نمیخوانند یا نادیده نمیگیرند
تغییر یافت (Changed)
- حذف کدهای تکراری بین استانداردها: کپیهای محلی
PdfReadTrailerدرFPdfPdfaوFPdfPdfx، کپیهای محلیSourceTrailerInfoRefدرFPdfPdfaوFPdfPdfua، و کپی محلیPdfReadStreamBytesدرFPdfPdfaهمگی حذف شدهاند — نسخههای مشترکFPdfPdfCommonاکنون در همه جا اعمال میشوند؛ این امر حدود 330 خط کد تکراری را حذف کرده و بار نگهداری برای همگامسازی کپیها را از بین میبرد - پوشش تستهای مفقود برای PDF/X: هفت enum کلاس محتوا (content-class) که قبلاً دارای پوشش صفر بودند، اکنون دارای تستهای مثبت هستند (
pvxiLzwForbidden،pvxiJavaScriptForbidden،pvxiFormFieldsForbidden،pvxiAdditionalActions،pvxiEmbeddedFilesForbidden،pvxiMissingTrimBox،pvxiTrappedNotSet)
Version 2.3.0
تغییر یافت (Changed)
- پوشش تستهای مفقود برای PDF/A ادامه دارد: سه enum دیگر با پوشش صفر تستهای مثبت دریافت کردند؛
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حل شده و XMPpdfaid:partبر روی یک پایه xref-stream خوانده میشود (نه فقط/Root+/ID)؛ یک تست جدیدInjectPdfA_XrefStreamBase_RoundTripsاز مسیر xref-stream انژکتور که در v2.0.0 اضافه شده بود محافظت میکند؛ دو تست بین استانداردی (PdfE_XrefStreamBase_NotRejectedAsUnparsable،PdfR_XrefStreamBase_NotRejectedAsUnparsable) تأیید میکنند که اعتبارسنجهای PDF/E و PDF/R دیگر فایلهای PDF دارای xref-stream را به عنوان غیرقابل پارس رد نمیکنند - تسویه بدهی تست PDF/A: متد
Validate_MinimalPdf_FlagsRequiredMarkersتأیید میکند که یک PDF حداقل و خالی باعث تحریکpvaiMissingPdfAIdentifier،pvaiMissingOutputIntent،pvaiMissingIccProfile،pvaiMissingXmpMetadataوpvaiMissingXmpDatesمیشود — که این کار شکاف تقارن با اعتبارسنجهای PDF/E و PDF/X را که از قبل تستهای معادل داشتند پر میکند؛ دو enum دیگر با پوشش صفر تستهای مثبت دریافت کردند:pvaiUnembeddedFontوpvaiSubsetMissingCidSet
Version 2.1.0
رفع شد
- استاندارد PDF/E به طور ناخواسته از اصلاحیه cross-reference-stream در v2.0.0 کنار گذاشته شده بود: هر دو متد
InjectPdfEMarkersوValidatePdfEComplianceهمچنانPdfReadTrailerرا بدونAcceptXrefStreamفراخوانی میکردند، بنابراین انژکتور PDF/E در خروجیهای PDF 1.5+ (پیشفرضSaveAsCopyدر pdfium) به طور خاموش شکست میخورد؛ هر دو محل فراخوانی اکنون مقدارTrueرا ارسال میکنند - بخش پشتیبان مشترک
PdfReadTrailerبرای cross-reference-stream اکنون حامل گارد/Type /XRefاست که نسخههای محلی PDF/A و PDF/X از قبل داشتند، بنابراین یک آفست خرابstartxrefکه به یک دیکشنری نامرتبط اشاره میکند به طور تمیز شکست میخورد به جای اینکه به عنوان تریلر اشتباه پارس شود - حلکننده ارجاع غیرمستقیم
/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به دیکشنری شیء cross-reference-stream عقبنشینی میکند (PDF 1.5+)؛ پیش از این، خروجیSaveAsCopyدر pdfium (که از جریان cross-reference استفاده میکند) باعث میشد که همه انژکتورهای نشانگر به طور خاموش شکست بخورند — بایتهای منبع بدون تغییر کپی میشدند و فراخوانی همچنان موفقیتآمیز بازگردانده میشد؛ اعتبارسنج PDF/R-1.0 (که پایه PDF 2.0 آن همیشه یک جریان cross-reference است) عملاً هیچ کاری انجام نمیداد؛ پیادهسازی کامل اعتبارسنج PDF/A به تابع کمکی مشترک پورت شد تا همه استانداردها بهرهمند شوند - اسکن دیکشنری تریلر در
InjectPdfUaMarkersوInjectPdfAMarkersاکنون از متد حساس به عمقPdfDictEndبه جای جستجوی ساده>>استفاده میکند، بنابراین تریلری که حاوی یک دیکشنری تودرتو باشد (مانند/Encrypt << ... >>) دیگر قبل از ورودی پایانی/Infoکوتاه و قطع نمیشود
تغییر یافت
- متد
TPdf.ValidatePdfUaاکنون در صورتی که خطای دقیق مدل شیءpvuaiPdfiumFontNotEmbeddedدر لایه Pdfium قبلاً رخ داده باشد، خطای خام سطح بایتpvuaiFontNotEmbeddedرا سرکوب میکند، بنابراین گزارش پرواز دیگر شامل دو ردیف تقریباً تکراری "فونتها را جاسازی کنید" برای یک نقص مشابه نخواهد بود - بررسی
pvuaiLangInvalidFormat(§7.2) اکنون ارجاع غیرمستقیم/Lang(N 0 R) را به شیء رشتهای آن حل کرده و محتوا را اعتبارسنجی میکند، بنابراین تگ زبان ارجاع داده شده به صورت غیرمستقیم دیگر یک نقطه کور نیست
Version 1.99.0
رفع شد
- بررسی
pvuaiLangInvalidFormat(§7.2) دیگر به رشتههای/Langرمزگذاریشده به صورت هگزادسیمال اجازه عبور بدون بررسی نمیدهد: جفتهای UTF-16BE (همراه باFE FFBOM) و رشتههای هگزادسیمال ساده ASCII اکنون رمزگشایی شده و مانند رشتههای تحتاللفظی(...)تحت همان بررسی گرامری BCP 47 قرار میگیرند، بنابراین یک/Langهگزادسیمال نادرست شناسایی میشود در حالی که یک نمونه منطبق (مانندen-USبا کدگذاری UTF-16BE) دیگر در معرض خطر علامتگذاری قرار نخواهد گرفت
تغییر یافت
- بررسی
pvuaiFontMissingToUnicode(§7.21.7) اکنون در کنار/WinAnsiEncodingو/MacRomanEncoding، گزینهی/MacExpertEncodingرا نیز مستثنی میکند که با چهار شرط استثنای ذکر شده در این بند مطابقت دارد
Version 1.98.0
اضافه شد
- بررسی
pvuaiNeedAppearancesTrue(§7.18.4) یک AcroForm را که پرچم/NeedAppearancesآن true است علامتگذاری میکند، زیرا در این حالت ظاهر ویجتها به طور مطمئن قفل نمیشود و فناوریهای کمکی نمیتوانند آنها را با درخت ساختار مرتبط کنند؛ این قابلیت از اعتبارسنجی PDF/A پورت شده و برای محدود کردن سطح اسکن به وجود/AcroFormمشروط شده است
تغییر یافت
- رگرسیون مجموعه نمونههای veraPDF: اتصال زوجهای قبولی+ردی Reference-XObject §7.20 و زوجهای قبولی+ردی زیرمجموعه CharSet/CIDSet §7.21.4.2 به تابع
Live_Corpus_ValidatePdfUaMatchesConformanceانجام شد؛ همچنین نمونههای قبولی مقدار ممنوعه ToUnicode §7.21.7 و کلیپ رسانهای §7.18.6.2 به عنوان محافظ در برابر مثبت کاذب متصل شدند (نمونههای ردی آنها از ساختار دیکشنری استفاده میکنند که اسکن در سطح بایت آنها را شناسایی نمیکند، بنابراین فقط بخش قبولی متصل شده است) - لیست ادعاهای مسیر قبولی مجموعه نمونهها ۱۵ محافظ جدید با خطای مثبت کاذب صفر دریافت کرد تا هر بررسی فعال ساختار و سطح بایت
pvuai*در برابر نمونههای منطبق آزمایش شود (پیش از این تنها حدود ۳۰ مورد از ۶۰ خطای فعال محافظت شده بودند)؛ محافظتpvuaiLangInvalidFormatبه طور عمدی حذف شد زیرا بررسیکننده سطح بایت رشتههای/Langرمزگذاریشده به صورت هگز را که قادر به رمزگشایی آنها نیست به طور محافظهکارانه علامتگذاری میکند
Version 1.97.0
رفع شد
- مقاومسازی
ValidatePdfUaStructureElements: پیمایش زنجیره والدEnclosingTableاکنون حامل یک شمارنده گام (محدود به تعداد عناصر) است، به طوری که یک چرخه نادرستParentIndexدر یک آرایه عناصر ساختاری مصنوعی دیگر نمیتواند فراخوانکننده را متوقف کند؛ تخصیص آرایه شناسههای marked-content در تابعValidatePdfUaPageContentTaggingاکنون به حداکثر یک میلیون ورودی محدود شده است تا از تخصیص چند گیگابایتی حافظه در صورت مواجهه باMarkedContentIDنادرست یا مخرب جلوگیری شود
تغییر یافت
- توضیحات داک enum برای
pvuaiOrderedListMissingListNumberingاکنون به طور دقیق عملکرد بررسی را شرح میدهد: این بررسی یک عنصرLرا که مقدارListNumberingآن خارج از مجموعه جدول ۳۴۷ استاندارد ISO 32000-1 باشد علامتگذاری میکند (نبود صفت علامتگذاری نمیشود)؛ توضیحات قبلی اشاره داشت که این بررسی نبود صفت در لیستهای مرتب را نیز تشخیص میدهد که پیادهسازی فعلی چنین کاری انجام نمیدهد - دو نمونه ردی اختلاف WMode در
7.21.3.3-t02از مجموعه نمونهها اکنون بهLive_Corpus_ValidatePdfUaMatchesConformanceمتصل شدهاند — از نسخه v1.95.0 جریان CMap با روش FlateDecode باز میشود، بنابراین مقایسه دیکشنری در برابر محتوا اکنون روی یک بخش خوانا اجرا میشود؛ کامنت قدیمی مبنی بر "متصل نشده است" حذف شد
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) باشد علامتگذاری میکند، زیرا این امر لینک را برای فناوریهای کمکی غیرقابل استفاده میسازد
رفع شد
- ادغام درخت ساختار بین صفحات: حلقه انباشت
AllElemsدرTPdf.ValidatePdfUaاکنونParentIndexهر عنصر را از آرایه محلی صفحه به آرایه ادغامشده تغییر مبدا میدهد؛ بدون این کار، عناصر فرزند صفحه ۲ یک ایندکس محلی صفحه را نگه میداشتند که به بخشی از صفحه ۱ اشاره میکرد، که این امر به طور خاموش تمام بررسیهای وابسته به ParentIndex را خراب میکرد (ساختار جدول/لیست، تعداد فرزند H در §7.4.4، EnclosingTable) - پارس کردن RoleMap: تابع
PdfReadRoleMapPairsدیگر کل اسکن کلید/مقدار را زمانی که یک مقدار ارجاع غیرمستقیم (N 0 R) یا آرایه ([...]) باشد متوقف نمیکند — هر دو فرم طبق استاندارد ISO 32000-1 14.8.5.1 فرمهای معتبر برای RoleMap هستند؛ اکنون این تابع به جای استفاده ازBreak، فقط از روی آن ورودی عبور میکند (Continue)، که این امر مثبتهای کاذب درpvuaiRoleMapUnresolvedرا برای انواع نگاشتشده بعد از یک ورودی غیرمستقیم/آرایهای از بین میبرد
تغییر یافت
- گزارش
FPdfPreflightReport: تعداد ۱۸ مقدار فعالTPdfUaValidationIssueکه قبلاً به دستهبندی عمومی و توصیه "نشانگر مفقود" منتقل میشدند، اکنون دارای دستهبندیهای دقیق (ساختار / محتوا / متادیتا / امنیت) و توصیههای مربوط به بندهای خاص هستند؛ همچنین غلط املاییpuaNone / pua1→pucNone / puc1در فایلPDFSpecComplianceMatrix.mdبرطرف شد
Version 1.95.0
تغییر یافت
- بررسی جامع و بازنگری صحت عملکرد
TPdf.ValidatePdfUa: بررسیهایpvuaiCMapWModeMismatch(§7.21.3.3) وpvuaiToUnicodeForbiddenValue(§7.21.7) اکنون جریانهای CMap / ToUnicode فشردهشده با روش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 را که از بررسی بند به بند و اسکن مجدد APIهای بومی Pdfium (که از قبل رپ شده اما در مسیر PDF/UA استفاده نشده بودند) به دست آمده بودند برطرف کرد؛ بررسیpvuaiHeadingFormatInvalid(§7.4.3) تگهای هدر تعریفشده توسط کاربر را که با H شروع میشوند اما به جای ارقام عربی خالص، دارای جداکننده، فاصله یا اعداد رومی هستند علامتگذاری میکند؛ بررسیpvuaiMissingDocumentOutline(§7.17، توصیه) یک سند چندصفحهای را که فاقد ساختار درختی نشانک (bookmark outline) است علامتگذاری میکند (سندهای تکصفحهای مستثنی هستند)؛ بررسی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 از قبل تنظیم شده باشند خارج میشود، حلقه داخلی شیء با اولین فونت غیرجاسازیشده پایان مییابد، و اسکن کاراکتر در صورت برخورد قبلی باUnicodeMapErrorاز پیمایش.notdefعبور میکند؛ استاندارد PDF/UA آخرین استاندارد اعتبارسنجی PDF بود که لایه مدل شیء Pdfium نداشت
Version 1.92.0
اضافه شد
- ایجاد فایل
Tests.PdfR— اولین فایل تست برای اعتبارسنجی PDF/R-1 (تابعFPdfPdfr) که اعتبارسنجی هدر، ممنوعیت ObjStm، تشخیص نشانگر شطرنجی و محافظ فایل پاک بدون مثبت کاذب را پوشش میدهد؛ اکنون هر شش مجموعه تست استاندارد PDF دارای فایلهای تست اختصاصی هستند: PdfA(80)، PdfUa(101)، PdfX(7)، PdfE(5)، PdfVT(15)، PdfR(4) = در مجموع ۲۱۲ تست
Version 1.91.0
اضافه شد
- توابع
ValidatePdfEوValidatePdfVTبررسیهای سطح محتوایی را دریافت کردند که پیش از این فقط در اعتبارسنجیهای PDF/A، PDF/UA و PDF/X موجود بودند:pveiLzwForbidden،pveiJavaScriptForbidden،pveiFormFieldsForbidden(فقط در PDF/E)،pveiEmbeddedFilesForbidden(فقط در PDF/E)،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برای هر صفحه (که یک نقشه ادعای شناسه marked-content ایجاد کرده و هر شیء متنی/تصویری را بررسی متقابل میکند) اکنون با پیدا شدنpvuaiUntaggedContentدر صفحات بعدی نادیده گرفته میشود — عناصر ساختاری همچنان برای بررسیهای بینصفحهای (نوت شناسه منحصربهفرد، توالی عناوین) جمعآوری میشوند، اما بررسی گرانقیمت برچسبگذاری محتوای هر صفحه زودتر متوقف میشود
Version 1.89.0
تغییر یافت
- عملکرد لایه مدل شیء Pdfium در تابع
TPdf.ValidatePdfA: پیمایش صفحه/شیء اکنون در سه سطح میانبر میزند — حلقه صفحه زمانی که تمام خطاهای قابل اعمال لایه Pdfium از قبل پیدا شده باشند خارج میشود، حلقه داخلی شیء با تنظیم شدن هر دو خطای مربوط به شیء (جاسازی فونت + شفافیت) پایان مییابد، و اسکن کاراکتر صفحه متنی در صورت برخورد قبلی باUnicodeMapErrorاز بررسی.notdefعبور میکند؛ بررسیهای دسترسی به API با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اختلاف دارند یاSupplementCIDFont از مقدار CMap فراتر میرود علامتگذاری میکند،pvuaiCMapNotEmbeddedCMapهایی را که با نام (بهعنوانEncodingیاUseCMap) ارجاع میشوند و از CMapهای ازپیشتعریفشده جدول ۱۱۸ ISO 32000-1 نیستند علامتگذاری میکند، وpvuaiCMapWModeMismatchCMapهای جاسازیشدهای را علامتگذاری میکند که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
تغییر یافت
- بررسی ترتیب تب ISO 14289-1 §7.18.3 یعنی
pvuaiMissingTabsOrderاکنون به ازای هر صفحه اجرا میشود: هر صفحهای که حاشیهنویسی دارد باید/Tabs /Sرا در دیکشنری صفحه خود اعلام کند، بنابراین یک صفحه همنظیر مطابق دیگر نمیتواند صفحهای را که این اعلام را ندارد پنهان کند
Version 1.85.0
اضافه شد
- اعتبارسنجی PDF/UA اکنون فرمهای XFA پویا را از ایستا طبق ISO 14289-1 §7.15 تمایز میدهد:
pvuaiXfaDynamicفرمهایی را علامتگذاری میکند که پیکربندی XFA آنهاdynamicRenderرا رویrequiredتنظیم کرده است
تغییر یافت
- پرچم قبلی هر-XFA یعنی
pvuaiXfaPresentبازنشسته شده و دیگر صادر نمیشود (XFA ایستا با §7.15 مطابقت دارد)؛ مقدار enum برای سازگاری API حفظ شده است
Version 1.84.0
اضافه شد
- اعتبارسنجی PDF/UA اکنون محتوای واقعی تگنخورده موردنیاز ISO 14289-1 §7.1 را تشخیص میدهد:
pvuaiUntaggedContentاشیاء متن و تصویر رندرشدهای را علامتگذاری میکند که نه توسط درخت ساختار صفحه (از طریق IDهای marked-content) ادعا شدهاند و نه بهعنوان 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(با رمزگشایی escape نام 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 را در اسنادی علامتگذاری میکند که هیچ ID عنصر ساختاری تعریف نکردهاند TPdfStructureElementویژگیهای جدولScope،HasHeaders،HeadersIds،ColSpanوRowSpanرا که در طول پیمایش درخت ساختار برطرف میشوند، در معرض دید قرار میدهد
تغییر یافت
- پیمایش درخت ساختار اکنون تمام ویژگیهای طرحبندی و جدول را در یک گذر واحد بر روی دیکشنریهای ویژگی هر عنصر میخواند، بهجای یک اسکن به ازای هر ویژگی
Version 1.79.1
اضافه شده
- پروژه نمونه
AnnotationsLabبه Lazarus و C++Builder منتقل شد و به نمونه کنسول دلفی موجود پیوست
رفع اشکالات
TPdf.CreateAnnotationممکن بود خطای “Cannot set attachment points” را برای حاشیهنویسیهای نشانهگذاری که از نقاط چهارگانه استفاده میکنند (Highlight, Underline, StrikeOut, Squiggly) ایجاد کند زیرا حاشیهنویسی جدید هنوز شکاف چهارگانهای برای جایگزینی نداشت؛ اکنون بهجای آن اولین چهارگانه را ضمیمه میکند
Version 1.79.0
اضافه شده
- نمونه کنسول دلفی جدید
AnnotationsLab: حاشیهنویسیهای Text، Highlight، Square و Circle را ایجاد میکند، آنها را در یک PDF مینویسد، سپس فایل را دوباره بارگیری کرده و لیست حاشیهنویسی صفحه را شمارش میکند
Version 1.78.0
اضافه شده
- توابع جدید
TPdf.MeasureTextوTPdf.MeasureTextWidth: عرض و ارتفاع رندر شده یک رشته را برای یک فونت و اندازه معین (واحدهای کاربر PDF، 1 واحد = 1/72 اینچ) بدون افزودن محتوا به صفحه اندازهگیری میکند، که منطق طرحبندی و شکستن کلمات را در بالایAddTextممکن میسازد؛ توسط یونیت مستقلFPdfMeasureبهعنوان کمککننده کلاس ارائه میشود - تابع جدید
TPdf.WrapText: شکستن کلمات حریصانه که بر پایهMeasureTextWidthساخته شده است و متن را در فضاها تقسیم میکند و کلمات را در خطوطی قرار میدهد که از عرض مشخص شده (واحدهای کاربر PDF) بازتر نباشند؛ یک کلمه تکی بیش از حد طولانی خط مخصوص به خود را میگیرد (بدون شکست درونکلمهای)، و خطوط شکستهشده را بهعنوان یک آرایه برمیگرداند
Version 1.77.0
اضافه شده
ValidatePdfAسه مقدار جدیدTPdfAValidationIssueرا به دست آورد که بندهای قبلاً ارزیابی شده با “NO” یا “reader behaviour” در حسابرسی شکاف قبلی را پوشش میدهد (اعداد ترتیبی ضمیمه شدند، مقادیر موجود بدون تغییر):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — کاراکتری که به یونیکد 0 حل میشود بدون خطای نقشهبرداری، علامت زمان اجرای یک مرجع حروف.notdef؛ شناسایی شده از طریق لایه مدل شیء Pdfium)،pvaiWordBreakMissing(سطح A 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 — یک توکن عددی که از محدودیت صحیح علامتدار ۳۲ بیتی 2,147,483,647 فراتر میرود)،pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — یک مقدار/BMخارج از مجموعه استاندارد blend-mode در 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 معرفی شده در نسخه 1.73.0 را برای گرفتن اثرات blend-mode/soft-mask که بررسی نام در سطح بایت ممکن است از دست بدهد، گسترش میدهد)
Version 1.73.0
اضافه شده (Added)
TPdf.ValidatePdfAاکنون یک مرحله مدل شیء Pdfium را بر روی بازرس سطح بایت قرار میدهد: اشیاء متنی هر صفحه را از طریقFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedپیمایش میکند و فونت رندر شده و جاسازی نشده را به عنوانpvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4) گزارش میدهد، و هر صفحه متنی را برای بررسیFPDFText_HasUnicodeMapErrorبارگذاری میکند و نقشه یونیکد خراب را به عنوان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 — بیت ToggleNoView حاشیهنویسی/F، مقدار 512، ممنوع است)
Version 1.71.0
تغییر یافته
- اکنون
ValidatePdfUaخطایpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6) را صادر میکند: پیمایشگر درخت ساختار، ویژگی طرحبندیListNumberingرا در هر عنصرLاز طریق API ویژگیهای Pdfium بررسی میکند و هر مقداری که خارج از مجموعه جدول 347 استاندارد ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square) باشد را علامتگذاری میکند. عدم وجود این ویژگی علامتگذاری نمیشود، زیرا ممکن است لیست بدون ترتیب باشد؛ این امر آخرین شکاف باقیمانده ISO 14289-1 را که در پایان دور ۵ ثبت شده بود، برطرف میکند
Version 1.70.0
اضافه شده
ValidatePdfUaچهار مقدار جدیدTPdfUaValidationIssueرا به دست آورد (اعداد ترتیبی اضافه شدند، مقادیر موجود بدون تغییر):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — یکFontDescriptorزیرمجموعه CID باید/CIDSetرا اعلام کند)،pvuaiToUnicodeForbiddenValue(7.21.7 — یک CMap از نوع ToUnicode نباید هیچ کدی را بهU+FEFFیاU+FFFEنگاشت کند؛ جریانهای فشردهنشده برای یافتن فرمهای خروجی<FEFF>/<FFFE>اسکن میشوند)،pvuaiLangInvalidFormat(7.2 —/Langباید یک تگ معتبر RFC 1766 / BCP 47 باشد؛ یک گرامر آسانگیرانهen،en-US،zh-Hans،es-419را میپذیرد و مقادیر کاملاً نامنطبق را علامتگذاری میکند)، وpvuaiOrderedListMissingListNumbering(7.6 — برای کامل بودن API حفظ شده است؛ هنوز توسط اعتبارسنج صادر نمیشود زیرا تشخیص قابل اتکای لیستهای مرتب از نامرتب به مقدار ویژگیListNumberingنیاز دارد که پیمایشگر درخت ساختار آن را در دسترس قرار نمیدهد)
Version 1.69.0
اضافه شده
ValidatePdfUaدو مقدار جدیدTPdfUaValidationIssueرا به دست آورد (اعداد ترتیبی اضافه شدند، مقادیر موجود بدون تغییر):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — یک عنصر ساختار Widget باید درون یک عنصرFormقرار داده شود؛ پیمایشگر درخت ساختار اکنون نوع والد مستقیم هر Widget را بررسی میکند) وpvuaiSubsetMissingCharSet(7.21.4.2 — یکFontDescriptorزیرمجموعه Type 1 باید/CharSetرا اعلام کند که با پیشوند ۶ حرفی+در نام زیرمجموعه روی/FontNameشناسایی میشود)
Version 1.68.0
اضافه شده
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
اضافه شده
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 از نوع Type 2 جاسازی شده باید شامل/CIDToGIDMapباشد)
Version 1.66.0
اضافه شده
ValidatePdfUaپنج مقدار جدیدTPdfUaValidationIssueرا به دست آورد (اعداد ترتیبی اضافه شدند، مقادیر موجود بدون تغییر):pvuaiRoleMapMissing(ISO 14289-1 7.1 — یک سند تگدار با انواع ساختار غیراستاندارد باید دارای یک/RoleMapباشد)،pvuaiOptionalContentAsKey(7.10 — یک دیکشنری پیکربندی محتوای اختیاری نباید کلید حالت خودکار/ASرا داشته باشد)،pvuaiXfaPresent(7.15 — وجود/XFAدر AcroForm علامتگذاری میشود زیرا XFA پویا ممنوع است)،pvuaiTrapNetAnnotation(7.18.2 — حاشیهنویسیهای/TrapNetممنوع هستند)، وpvuaiReferenceXObject(7.20 — اشیاء Reference XObjects، که با نشانگر/Refمشخص میشوند، ممنوع هستند)
رفع شده
ValidatePdfUaدیگر روی هر فایل رمزگذاری شده به اشتباه خطایpvuaiEncryptionPresentرا صادر نمیکند: استاندارد PDF/UA رمزگذاری را تا زمانی که کلید/Pدیکشنری رمزگذاری دارای بیت دهم تنظیم شده (مقدار ۱۰۲۴) باشد، مجاز میداند که دسترسی فناوری کمکی را اعطا میکند (7.16). اکنون نقض دقیق از طریق خطای جدیدpvuaiEncryptionPBitMissingگزارش میشود؛pvuaiEncryptionPresentبرای سازگاری API در شمارشی حفظ شده است اما دیگر توسط اعتبارسنج سطح بایت صادر نمیشود
Version 1.65.0
اضافه شده
ValidatePdfAپنج مقدار جدیدTPdfAValidationIssueرا به دست آورد (اعداد ترتیبی اضافه شدند، مقادیر موجود بدون تغییر):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — یک CIDFont از نوع Type 2 جاسازی شده باید دارای/CIDToGIDMapباشد)،pvaiSubsetMissingCharSet(6.3.5 — یکFontDescriptorزیرمجموعه Type 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
اضافه شده
ValidatePdfAهشت مقدار جدیدTPdfAValidationIssueرا به دست آورد (اعداد ترتیبی اضافه شدند، مقادیر موجود بدون تغییر):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — هدر%PDF-x.yباید با یک کامنت%با حداقل چهار بایت بزرگتر از ۱۲۷ دنبال شود)،pvaiExternalStreamRef(6.1.7 — یک دیکشنری جریان نباید دارای/F،/FFilterیا/FDecodeParmsباشد)،pvaiOutputIntentScheme(6.2.2 — مقدار/Sدر OutputIntent باید/GTS_PDFA1باشد)،pvaiInfoXmpDateMismatch(6.7.3 — مقادیرCreationDate/ModDateدر Info نیز باید به عنوان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 باید ۱، ۳ یا ۴ جزء را اعلام کند)
رفع شده
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 به طور مستقیم شناسایی میشود (6.6.1)
Version 1.63.0
- افزوده شد (اضافه شده)
TPdf.MeasureTextوTPdf.MeasureTextWidth: اندازهگیری عرض و ارتفاع رندر شده متن با فونت و اندازه مشخص بدون افزودن محتوا به صفحه (واحدهای PDF، ۱ واحد = ۱/۷۲ اینچ)، که امکان محاسبات چیدمان و شکستن خودکار خط را در بالایAddTextفراهم میکند؛ از طریق واحد مستقلFPdfMeasureبه صورت class helper ارائه شده است- تغییر یافت (تغییر یافته)
- دموهای
Demo\Delphi\MergePDF،Demo\CBuilder\MergePDFوDemo\Lazarus\MergePDFبرای هر سه IDE بهبود یافتند: انتخاب محدوده صفحه به ازای هر فایل، مسیر خروجی اختیاری، حذف تکراری، گزارش اجرا، دکمه لغو و خلاصه تکمیل ادغام؛ نشانکها و متادیتا از اولین منبع در زمان وارد کردن منتقل میشوند - دموهای
CreatePDFبرای هر سه IDE اکنون گزینهای برای نوشتن متن اروپایی با کاراکترهای لهجهدار چک/فرانسوی/آلمانی/اسپانیایی/پرتغالی/لهستانی/ترکی دارند، به منظور تأیید انتخاب فونت و پردازش Unicode (نمونه قبلیEuropeanTextدر آن ادغام شده است) - نمونههای
ExtractTextPagesوEuropeanTextحذف شدند: استخراج متن صفحهبهصفحه درExtractTextPagesتوسط گزینههای محدوده صفحه و جداکننده درExtractTextپوشش داده میشود؛ رندرینگ چندزبانهEuropeanTextدرCreatePDFادغام شده است
Version 1.62.2
رفع شد (رفع شده)
- هدرهای C++Builder (
.hpp) برای همه نسخهها و پلتفرمهای RAD Studio (Win32/Win64/Win64x) دوباره تولید شدند؛ آنها از منابع Pascal عقب افتاده بودند و امضاهای قدیمی تابع و unitهای جاافتاده را از طریق توزیع سورس به کاربران C++Builder میرساندند
Version 1.62.1
رفع شد (رفع شده)
- کامپایل سورس در RAD Studio 12 Athens و نسخههای قدیمیتر بازیابی شد: یک انتساب
TArray<Byte>در مسیر اعتبارسنجی PDF/UA از تبدیل ضمنی آرایه مخصوص Delphi 13 استفاده میکرد که در IDEهای قدیمیتر کامپایل نمیشد
Version 1.62.0
افزوده شد (اضافه شده)
TPdf.RenderPageThumbnailهر صفحه را با index به یک bitmap متناسب با نسبت تصویر رندر میکند، بدون آنکه صفحه جاری سند، صفحه بارگذاریشده یا رویدادOnPageChangeرا تغییر دهد
رفع شد (رفع شده)
TPdfThumbnailViewدیگر هنگام paint مقدارPageNumberسند میزبان را تغییر نمیدهد؛ پیشتر هر repaint صفحهها را دوباره بارگذاری میکرد،OnPageChangeرا اجرا میکرد و text page را دور میانداخت، که میتوانست یکTPdfViewمتصل را مختل کند و حلقههای repaint ایجاد کند. اکنون thumbnailها از طریقRenderPageThumbnailبدون این عوارض جانبی رندر میشوند- اعتبارسنجی سازگاری PDF/X اکنون سندهای دارای cross-reference stream (PDF 1.6، رایج در PDF/X-4) و objectهای ذخیرهشده در compressed object streams را بررسی میکند، بهجای آنکه چنین فایلهایی را یکجا ناسازگار گزارش کند؛ نشانگر
GTS_PDFXVersionهم از element-form و هم از RDF attribute-form در XMP خوانده میشود - اعتبارسنجی PDF/R اکنون وقتی Info dictionary و XMP درباره Producer یا Creator اختلاف دارند
pvriInfoXmpMismatchرا گزارش میکند؛ این مورد قبلاً تعریف شده بود اما هرگز اعلام نمیشد - timerهای form-fill برای هر درخواست جداگانه دنبال میشوند، بنابراین سندی که چند timer را همزمان اجرا میکند (برای نمونه یک JavaScript interval کنار چشمکزدن field caret) همه آنها را نگه میدارد و دیگر بهجز تازهترین timer بقیه را از دست نمیدهد
- paint در
TPdfViewو متدهای عمومیRenderPage/RenderTileاکنون document render lock را نگه میدارند و در برابر rendering همانTPdfاز worker-thread بهصورت ترتیبی اجرا میشوند (PDFium thread-safe نیست) - متن غیر ASCII نوشتهشده در metadataهای PDF/X، PDF/R و PDF/VT (نامهای شرط OutputIntent، Creator، Producer) اکنون طبق ISO 32000-1 §7.9.2.2 بهصورت رشته UTF-16BE کدگذاری میشود، نه raw UTF-8 که readerهای سازگار آن را اشتباه میخواندند
- helperهای سازگاری embedded metadata streams را که
/Lengthآنها indirect reference است درست میخوانند، source bytes را باReadBufferبارگذاری میکنند (تا short read تمیز شکست بخورد) و offset منفیstartxrefرا رد میکنند، بهجای آنکه خطر خواندن خارج از محدوده پیش بیاید
Version 1.61.0
تغییر کرد (تغییر یافته)
- اصلاحات اعلانهای FFI/ABI که ممکن است بازکامپایل کدی را لازم کند که callbackهای تحتتأثیر را پیادهسازی کرده است: callback form-fill
FFI_OpenFileاکنونcdecl(Win32 stack convention) دارد و پارامترvalueدرFPDFAnnot_SetStringValueوFPDFAttachment_SetStringValueاکنونFPDF_WIDESTRING(UTF-16LE) است تا با PDFium headers مطابقت داشته باشد - callbackهای progressive-load
FX_FILEAVAIL.IsDataAvailوFX_DOWNLOADHINTS.AddSegmentاکنون offsetهایsize_tمیگیرند وsize_tدر Free Pascal / Lazarus Win64 به پهنای pointer است (قبلاً به 32-bit بریده میشد)، و فراخوانیهای API مربوط به data-availability وoutsize_tرا در FPC Win64 اصلاح میکند
رفع شد (رفع شده)
- ایمنی حافظه: استفاده پس از آزادسازیِ form-fill timer هنگام نابود کردن یک
TPdfبا caret فعال AcroForm؛ یکFPDF_CloseDocumentدوبارهای در مسیر خطایImportNPagesToOne؛ بیرونزدن exceptionهای Pascal از callbackهایFPDF_FILEWRITE/FPDF_FILEACCESSاز مرز C هنگام ذخیرهسازی و درج JPEG؛ و سرریز integer در استخراج متن هنگام خواندن از یک index آغازین تا انتهای صفحه TPdfFuture<T>اکنون callbackِ نتیجه را بهطور قابل اعتماد تحویل میدهد؛ پاسخ قبلاً تقریباً همیشه کنار گذاشته میشد (و میتوانست به یک thread آزادشده دست بزند) چون worker خودش را پیش از اجرای پاسخِ صفشده آزاد میکرد- خروجی PDF/A، PDF/X، PDF/E، PDF/R، PDF/VT و PDF/UA اکنون ورودیهای cross-reference را دقیقاً 20 bytes مینویسد، همانطور که ISO 32000-1 §7.5.4要求 میکند
- تزریق markerهای استاندارد دیگر یک dictionary را نابود نمیکند وقتی کلید حذفشده (برای نمونه
/Trapped) آخرین entry بود، که قبلاً>>پایانی را میبلعید و یک object معیوب تولید میکرد - streamهای ICC profile مربوط به OutputIntent اکنون شمار component موردنیاز
/Nرا برای PDF/X و PDF/VT اعلام میکنند (که از قبل برای PDF/A وجود داشت)؛ سندهای منبع رمزگذاریشده پیش از تزریق markerهای PDF/X، PDF/E، PDF/R، PDF/VT و PDF/UA رمزگشایی میشوند، تا خروجی معتبر باشد نه اینکه بیصدا خراب شود - BOM بسته xpacket UTF-8 در XMP تولیدشده بهصورت بایتهای دقیق صادر میشود و خرابی در نصبهای Delphi با code page ANSI غیر Latin-1 را برطرف میکند؛ trailerهای بهروزرسانی افزایشی اکنون ارجاع
/Infoسند را حفظ میکنند SaveAsبا فشردهسازی دیگر streamهایی را که/Lengthآنها یک indirect reference است کوتاه نمیکند و جدولهای cross-reference بازسازیشده اکنون ورودیهای 20 بایتی، generation numberهای واقعی و pointer قدیمی/Prevرا حذف میکنند- اعتبارسنجی همخوانی اکنون markerهای نسخه XMP را در قالب attribute برای PDF/E و PDF/X میخواند، تا فایلهای PDF/X-4 که بهصورت attribute-serialized ذخیره شدهاند شناخته شوند، شناسه دقیق
PDF/E-1را لازم میداند، streamهای metadata با indirect/Lengthرا درست میخواند و دیگر هنگام بررسی trailer مربوط به PDF/UA یک کلید/IDیا/StructTreeRootدر یک structure element را اشتباه تطبیق نمیدهد؛ یک offset خرابstartxrefدیگر خطای range ایجاد نمیکند TPdfThumbnailView: اکنون آخرین صفحه با scrollbar قابل دسترس است، صفحه فعلی سند میزبان پس از ترسیم thumbnailها بازیابی میشود و رسیدگی استاندارد به mouse-leave دوباره ارسال میشود- bitmapهای صفحه و تصویر با خاکستری دیگر با palette نادرست رندر نمیشوند؛
TPdfViewدیگر وقتیTPdfآن نخست آزاد میشود با یک reference dangling رها نمیشود - گزارشهای preflight: HTML برای مطابقت با charset اعلامشدهاش بهصورت UTF-8 ذخیره میشود و escaping رشته JSON توالیهای درست
\uرا برای نویسههای غیر ASCII در Free Pascal تولید میکند - نسخههای trial: dialog یادآوری trial اکنون بهجای اینکه پیش از نمایش سرکوب شود، نمایش داده میشود
TPdfStreamAdapterاکنون streamهای بزرگتر از 4 GiB را با یک خطای روشن رد میکند، بهجای اینکه طولی را که به PDFium پاس داده میشود بیصدا کوتاه کند
Version 1.60.1
تغییر کرد (تغییر یافته)
- نمونههای AccessibilityReader برای Delphi، Lazarus و C++Builder اکنون خواندن با صدای بلند را بر پایه
TPdfReadingSessionاجرا میکنند: هر صفحه باBuildSpokenTextFromWordsبه یک بخش گفتاری واحد سرهم میشود، موقعیتهای واژهای SAPI بهFeedSpokenPositionداده میشوند، و session با جابهجایی میان صفحهها نشانگر واژه در view را هدایت میکند و هماهنگسازی دستیای را که قبلاً در هر نمونه وجود داشت جایگزین میسازد - ردگیری کارائوکهای در سطح کلمه در این نمونهها اکنون هنگام استفاده از NVDA بهعنوان موتور گفتار نیز کار میکند:
EstimatePacingسرعتگذاری نشانگر خواندن را بر پایه زمان سپریشده گفتار انجام میدهد، در حالی که NVDA پیشتر فقط متن را میخواند و هیچ ردگیری در سطح کلمه نداشت - Pause و Resume در این نمونهها اکنون با NVDA هم کار میکنند:
ResumeRestartsChunkدر Resume صفحه جاری را از ابتدای آن دوباره میخواند، در حالی که SAPI همان pause و resume بومیِ درجا را حفظ میکند
Version 1.60.0
افزوده شد (اضافه شده)
- رندر زنده برای کمبینایان در
TPdfView: گزینههای جدید رندرreInvertوreNightDuotoneهر کاشی صفحه رندرشده را پیش از ترسیم لایههای جستجو، انتخاب، خواندن و مکاننمای کلمه دوباره رنگآمیزی میکنند و تبدیلهای رنگی bitmap موجود را برای هر دو چیدمان تکصفحه و روبهرو به نمایشگر تعاملی میآورند؛ با تغییر گزینهها، بلافاصله بازترسیم انجام میشود NightDuotoneInkوNightDuotonePaperپالت شب را پیکربندی میکنند و بهصورت پیشفرض متن کهربایی را روی صفحهای سیاه میگذارند؛ اگر هر دو گزینه فعال باشند،reInvertاولویت دارد
Version 1.59.0
افزوده شد (اضافه شده)
TPdfReadingSession: یک مؤلفه هماهنگساز خواندن با صدای بلند که به موتور گفتار خاصی وابسته نیست. این مؤلفه نشانگر chunk، نشانگر واژه و وضعیت پخش (Play/PlayFrom/Pause/Resume/Stop) را نگه میدارد، وقتی میزبان بیکار شدن موتور را در میان chunkهای بارگذاریشدهٔTPdfSpokenTextپیش میرود وقتی میزبان بیکار شدن موتور را از طریقTickگزارش میکند، offsetهای متن گفتاری را دوباره به نویسههای صفحه برمیگرداند و نشانگر واژهٔTPdfViewمتصل را بهصورت خودکار هدایت میکند؛ میزبان هر موتور گفتاری را از راهOnSpeakو رویدادهای درخواست cancel / pause / resume متصل میکند، بنابراین خود کتابخانه به هیچ speech APIای لینک نمیشودFeedSpokenPositionموقعیتهای واژهای موتور را مصرف میکند، مانند SAPIStatus.InputWordPosition؛EstimatePacingهمراه باEstimatedWordsPerMinuteموتورهایی را که سیگنال موقعیت ندارند زمانبندی میکند؛ وResumeRestartsChunkبرای موتورهایی که pause بومی ندارند chunk فعلی را دوباره میخواندOnChunkChange،OnWordChangeوOnFinishedفقط هنگام تغییر واقعی اجرا میشوند، و view متصل اگر آزاد شود خودش بهطور خودکار جدا میشود، بنابراین کد میزبان بدون flicker و در برابر crash ایمن میماند
Version 1.58.0
افزوده شد (اضافه شده)
EstimateSpokenWordIndexبا استفاده از زمان سپریشده و نرخ کلماتبردقیقه تخمین میزند موتور گفتار در حال خواندن کدام واژه است و به واژههای بلندتر بهتناسب زمان بیشتری میدهد، بنابراین موتورهایی که هیچ موقعیت واژهای گزارش نمیکنند، مانند NVDA controller client، باز هم میتوانند نشانگر خواندن در سطح کلمه را هدایت کنند؛ زمان سپریشده از سوی فراخواننده تأمین میشود، پس این routine بدون وابستگی به ساعت و قابل unit-test باقی میماند
Version 1.57.0
افزوده شد (اضافه شده)
- سرهمسازی متن گفتاری با نگاشت دومحدودهای برای ردگیری خواندن با صدای بلند:
BuildSpokenTextFromWordsوSpokenTextAppendرشتهای را که به موتور text-to-speech داده میشود از word boxهای صفحه میسازند و همزمان یک جدول span ثبت میکنند، وSpokenToPageCharoffset گفتاری گزارششده از سوی موتور، مانند SAPIStatus.InputWordPosition، را دوباره به index نویسهٔ صفحه برمیگرداند تا وقتی متن گفتاری کل متن صفحه نیست، مثل ناحیههای ردشده، خواندن واحدبهواحد یا overrideهای تلفظ، ردگیری highlight در سطح کلمه درست بماند - نوعهای
TPdfSpokenTextوTPdfSpokenSpanرشتهٔ گفتاری را همراه با بازههای صفحهٔ مبدأیی که از آن ساخته شده حمل میکنند؛ offsetهای روی جداکنندههای درجشده به واژهٔ نگاشتشدهٔ بعدی resolve میشوند و offsetهایی که از runهای نگاشتشده جلوتر میروند، بدون تطابق گزارش میشوند
Version 1.56.9
افزوده شد (اضافه شده)
Demo\Delphi\PreflightReportاکنون یک پیشنمایش Action Plan اضافه میکند که استانداردهای ناموفق، اولویتها، اقدامهای بعدی، کدهای issue و توصیهها را در یک چکلیست اصلاحی فشرده میسازدDemo\Delphi\PreflightReportCliاکنونplan/actionplanرا بهعنوان قالب خروجی برای اجراهای تکفایلی و batch میپذیرد و همان چکلیست اصلاحی را در یک فایل متنی مینویسد
تغییر کرد (تغییر یافته)
- هر دو نمونهٔ Delphi PreflightReport اکنون شمار وضعیتهای pass / action / review را در کنار مجموع استانداردها و issueها نمایش میدهند
Version 1.56.8
تغییر کرد (تغییر یافته)
ViewerInteractionLabاکنون شامل کنترلهای پرش صفحه، کنترلهای بزرگنمایی دستی، ثبت مختصات مبتنی بر کلیکDeviceToPage/PageToDeviceو یک گزارش تعاملی شفافتر برای بررسی انتخاب، جستجو، چرخش و ناوبری است- صفحههای readme برای
ViewerInteractionLabاکنون گردشکار تعاملی افزودهشده را در مجموعه readmeهای بومیسازیشده مستند میکنند
Version 1.56.7
افزوده شد (اضافه شده)
AccessibilityWorkbenchCliهر finding فعالشده را به Success Criteriaهای WCAG 2.1 و ناحیهٔ بند متناظر در ISO 14289-1 (PDF/UA-1) نگاشت میکند و بخشی برای پوشش استانداردها در گزارشها نشان میدهدAccessibilityWorkbenchCliیک امتیاز دسترسپذیری مستندسازیشدهٔ 0 تا 100 را با rubric جریمهٔ منتشرشده و بازههای excellent / good / needs work / poor محاسبه میکند و آن را برای هر فایل و بهصورت میانگین batch نمایش میدهدAccessibilityWorkbenchCliاکنونfailscore=Nرا میپذیرد تا اگر امتیاز هر فایل از N کمتر باشد، اجرا را با شکست پایان دهد، یعنی exit code 2AccessibilityWorkbenchCliوقتی نام خلاصهٔ batch به.sarifختم شود، یک log با قالب SARIF 2.1.0 مینویسد که برای هر نوع finding یک rule دارد و tagهای WCAG 2.1 و PDF/UA آن را برای CI و code-scanning ingestion حمل میکندAccessibilityWorkbenchCliیک دستورversionاضافه میکند که نسخهٔ PDFiumPas لینکشده را چاپ میکند
Version 1.56.6
افزوده شد (اضافه شده)
IntakeWorkbenchCliبرای هر فایل ورودی یک hash جرمشناسانهٔ SHA-256 محاسبه میکند، و بهunavailableتنزل میکند روی compilerهایی کهSystem.Hashندارند، و آن را در همهٔ قالبها گزارش میدهدIntakeWorkbenchCliاکنونpasswords=file.txtرا میپذیرد تا سندهای نیازمند گذرواژه را با فهرستی از گزینههای کاندید آزمایشی باز کند و index گزینهٔ منطبق را ثبت کند، بیآنکه متن گذرواژه هرگز log شودIntakeWorkbenchCliاکنونcopyto=dirرا میپذیرد تا هر فایل auditشده را به یک زیردایرکتوری بر پایهٔ سطح ریسک هدایت کند و auditor را به یک intake sorter تبدیل کندIntakeWorkbenchCliوقتی نام خلاصهٔ batch به.sarifختم شود، یک log با قالب SARIF 2.1.0 مینویسد که برای هر risk flag یک rule و برای هر فایل نشاندار یک result دارد تا در CI و code-scanning ingestion استفاده شودIntakeWorkbenchCliیک دستورversionاضافه میکند که نسخهٔ PDFiumPas لینکشده را چاپ میکند
Version 1.56.5
افزوده شد (اضافه شده)
IntakeWorkbenchCliاکنون اقدامهای پیشنهادی پس از intake، مانند accept، request-password، manual-review، quarantine و deduplicate را استخراج میکند و شمار آنها را در خلاصههای batch نشان میدهدAccessibilityWorkbenchCliاکنون اقدامهای پیشنهادی اصلاحی، مانند pass-through، remediate-tags، run-ocr، remediate-semantics و manual-review را استخراج میکند و شمار متناظر actionها را در batch نشان میدهد
تغییر کرد (تغییر یافته)
- هر دو نمونهٔ CLI در سطح ابزار اکنون اقدام پیشنهادی را در خروجی console، text، HTML، JSON و CSV نمایش میدهند تا اپراتورهای batch بتوانند فایلها را بدون تکیه بر post-processingِ فیلدهای risk یا status مسیردهی کنند
Version 1.56.4
رفع شد (رفع شده)
- خواندن annotationها، bookmarkها یا link annotationها در یک loop دیگر رشتههای متنیِ مورد قبلی را نشت نمیدهد: recordهای نتیجهٔ
TPdfAnnotation،TBookmarkوTLinkAnnotationاکنون بهجای zero کردن خام حافظه، با مقداردهی اولیهٔ آگاه از managed-type پاک میشوند، بنابراین سندهایی که تعداد بسیار زیادی annotation متنی دارند دیگر در طول عمر برنامه حافظهٔ process را بیدلیل متورم نمیکنند - نابود کردن یک
TPdfکه یک handler برایOnUnsupportedFeatureثبت کرده بود، اکنون آن را از callback سراسریِ process در PDFium جدا میکند، بنابراین بارگذاری بعدی یک سند از نمونهٔ دیگری ازTPdfکه handler خودش را ندارد دیگر نمیتواند به داخل component آزادشده dispatch شود، یعنی use-after-free رخ نمیدهد
Version 1.56.3
رفع شد (رفع شده)
AccessibilityWorkbenchCliدیگر صفحههای خالی را بهعنوان صفحههای heuristic reading-order نمیشمارد، بنابراین سندهای tagged که صفحههای جداکنندهٔ خالی دارند وضعیت درست دسترسپذیری خود را حفظ میکنند؛ صفحههایی که محتوای قابلخواندن ندارند اکنون جداگانه گزارش میشوندAccessibilityWorkbenchCliدر تشخیص table-header دیگر برای cellهایTHکه به یک جدول تودرتو تعلق دارند، به جدول بیرونی امتیاز نمیدهد، و نامهای form-field و font با حساسیت به بزرگیوکوچکی حروف تطبیق داده میشوند تا fieldهای متمایز با هم ادغام نشوندIntakeWorkbenchCliاکنون در فهرست hostهای URL، بخشهای userinfo، query و fragment را حذف میکند تا پیوندی ساختگی مانندtrusted.example@evil.exampleبه host واقعی نسبت داده شود و مقصدهایmailto:بهجای نامرئی ماندن، دامنهٔ خود را در گزارش وارد کنندIntakeWorkbenchCliدر گزارشهای Markdown اکنون backtickهای موجود در pathها، hostها و نام پیوستهایی را که attacker آنها را کنترل میکند escape میکند تا قالببندی گزارش از داخل یک سند قابلشکستن نباشد
تغییر کرد (تغییر یافته)
AccessibilityWorkbenchCliخرابیهای font-scan و form-field-scan را بهصورت شمارندههای جداگانه گزارش میکند، قلمهای جاسازینشدهای را که نمونههای جاسازیشده نیز دارند مشخص میکند، و فهرستهای طولانی قلم را با نشانگر صریح کوتاهسازی محدود میکند- خلاصههای دستهای
IntakeWorkbenchCliستون شمارش attachment-annotation را اضافه میکنند، و سرشماری annotation در هر صفحه به 20000 annotation در هر صفحه محدود میشود و این سقف در همه قالبها گزارش میشود
Version 1.56.2
افزوده شد (اضافه شده)
AccessibilityWorkbenchCliاکنون embedding فونت، tooltipهای form-field، منبع reading-order، outlineهای سند، ساختار جدول و فهرست، alternate textهای مشکوک و جزئیات بازبینی غنیتر در سطح هر صفحه را audit میکند تا گزارشهای batch دسترسپذیری هدفهای اصلاحی بیشتری را شناسایی کنندIntakeWorkbenchCliاکنون محدودیتهای اسکن صفحه، actionهای launch و remote-go-to، فهرست hostهای URI، شمار annotationها، قابلیتهای پشتیبانینشدهٔ PDFium، شناسههای تکراری سند و risk flagهای گسترشیافته را برای بازبینی خودکار intake گزارش میکند
تغییر کرد (تغییر یافته)
IntakeWorkbenchCliاکنون در حالت تکفایل و batch،maxpages=Nرا میپذیرد تا اسکن صفحههای هر سند سقف داشته باشد و در عین حال گزارشگیریِ metadata، attachment، script، XFA، signature و risk همچنان کامل انجام شود
Version 1.56.1
رفع شد (رفع شده)
- بارگذاری یک
pdfium.dllقدیمیتر که یک export جدید را ندارد اکنون بهشکلی تمیز شکست میخورد: مسیر شکست همهٔ entry pointهای APIِ bindشده را reset میکند، بنابراین بررسیهایAssigned()، برای نمونه رویFPDF_GetLastErrorیاFPDF_GetSecurityHandlerRevision، کتابخانه را بهعنوان بارگذارینشده گزارش میدهند، نه اینکه به ماژولی که از قبل unload شده فراخوانی بزنند و با access violation crash کنند UnloadLibraryاکنون همهٔ bindingهای API در PDFium را پاک میکند، نه فقط helperهای اختیاری V8 را، بنابراین بعد از آزاد شدن DLL هیچ function pointer کهنهای باقی نمیماند
Version 1.56.0
افزوده شد (اضافه شده)
- نشانگر خواندن کارائوکهای در سطح واژه روی
TPdfView:TrackReadingWordAtoffset نویسهٔ واژهٔ جاریِ موتور text-to-speech، مانند SAPIStatus.InputWordPosition، را روی word boxهای صفحه نگاشت میکند، واژهٔ شامل آن را بهصورت overlayای متمایز بالای بلوک خواندن highlight میکند، آن را به داخل view اسکرول میدهد و index واژه را برمیگرداند، تا با پیش رفتن صدا، واژهٔ گفتهشده روشن شود SetReadingWordوClearReadingWordواژهٔ highlightشده را مستقیماً از یکTPdfWordBoxتنظیم یا پاک میکنند؛ تنظیم دوبارهٔ همان واژه no-op است، بنابراین ردگیری واژهبهواژه هرگز باعث flicker در view نمیشودReadingWordColorوReadingWordFollowرنگ نشانگر واژه و اینکه view واژهٔ خواندهشده را خودکار به داخل دید بیاورد یا نه کنترل میکنند
Version 1.55.2
رفع شد (رفع شده)
- ViewerInteractionLab اکنون به ردیفهای نوار ابزار فضای عمودی بیشتری میدهد تا کنترلهای Open PDF، Create Sample، ناوبری، جستجو و انتخاب دیگر زیر فونتهای مقیاسشده روی هم نیفتند
Version 1.55.1
رفع شد (رفع شده)
- ViewerInteractionLab اکنون Prev، Next و Rotate را در ردیف دوم نوار ابزار قرار میدهد و از همپوشانی اولیه با Open PDF و Create Sample جلوگیری میکند
Version 1.55.0
افزوده شد (اضافه شده)
- پل میان واژه و selection برای خواندن «بخوان و انتخاب کن»:
TPdfView.SelectWordBoxوSelectWordSpanیک word box تکی یا یک span همصفحه از word boxها را، ازPageWordBoxes، بر پایهٔ بازههای نویسهای آنها انتخاب میکنند تا واژه یا خطی که اکنون خوانده میشود بتواند همزمان انتخاب و کپی هم بشود WordBoxIndexAtCharIndexیک index نویسه را دوباره به word boxی که آن را در بر میگیرد نگاشت میکند و با پیشروی read cursor در TTS، highlight واژهبهواژه را هدایت میکند
Version 1.54.0
افزوده شد (اضافه شده)
- accessorهای تکمیل فرم صوتی که field متمرکز را مستقیم از روی نشانگر منطقی میخوانند:
FocusedFormFieldValue،FocusedFormFieldNameوFocusedFormFieldDetailsرویTPdfوTPdfViewمقدار field جاری، نام خوانا برای انسان آن، یعنی tooltipِ/TUبا fallback به/T، و کلTPdfFormFieldInfoشامل type، flagها و optionها را گزارش میکنند؛ یعنی هر چیزی که یک voice UI برای اعلام کردن هنگام حرکت در فرم نیاز دارد
رفع شد (رفع شده)
FocusedFormFieldValuefield را بر پایهٔFocusedFormFieldIndexمیخواند، نه focus تعاملیِ pdfium، بنابراین یک form filler هدایتشونده با صدا حتی بدون caret روی صفحه هم مقدار درست را میگیرد؛FocusedFormFieldTextموجود همچنان focus خودِ pdfium را بازتاب میدهد و تغییری نکرده است
Version 1.53.0
افزوده شد (اضافه شده)
- پشتیبانی از highlight در سطح واژه:
TPdf.PageWordBoxesوTPdfView.PageWordBoxesیک صفحه را به recordهایTPdfWordBoxمیشکنند که هرکدام متن واژه، بازهٔ نویسهای آن و یک مستطیل bounding در فضای صفحه را حمل میکنند، تا یک accessibility reader بتواند هر واژهٔ گفتهشده را به نوبت، یعنی در خواندن «کارائوکهای»، با فرستادن آن مستطیل بهSetReadingHighlightبرجسته کند BuildWordBoxesگام tokenizer را بهصورت مستقل در دسترس میگذارد و متن صفحه را به word boxهایی با بازههای نویسهای تبدیل میکند
Version 1.52.0
افزوده شد (اضافه شده)
- helperهای رندر برای کمبینایی، یعنی
InvertPdfBitmap،GrayscalePdfBitmapوDuotonePdfBitmap، تبدیلهای رنگی را درجا روی یک bitmap رندرشدهٔ 32-bit اعمال میکنند تا یک accessibility reader بتواند صفحهها را برای کاربران کمبینا بهصورت وارونه / dark-mode، خاکستری یا با یک طرح دورنگ سفارشی، برای نمونه پسزمینهٔ تیره با متن روشن، ارائه کند - این تبدیلها بهازای هر pixel اجرا میشوند و روی VCL و Lazarus/LCL رفتاری یکسان دارند و ابعاد bitmap را دستنخورده میگذارند
Version 1.51.0
افزوده شد (اضافه شده)
- واحدهای خواندن در سطح جمله برای listen-reading کمکی:
TPdf.ReadingUnits،TPdf.DocumentReadingUnitsوTPdfView.ReadingUnitsجریان محتوای قابلخواندن را به recordهای مرتبشده و هماندازهٔ جمله از نوعTPdfReadingUnitخطیسازی میکنند؛ هرکدام متن قابلگفتن را همراه با نوع معنایی، صفحه، مستطیلهای highlight و tag زبان حمل میکند تا یک برنامهٔ screen-reader بتواند صفحه یا کل سند را هر بار یک واحد گفتاری جلو ببرد - ناوبری معنایی با
NextReadingUnitOfKindکه به رابط صوتی اجازه میدهد بدون پیمایش دستی جریان، به سرصفحه، شکل، مورد فهرست یا سلول جدول بعدی یا قبلی بپرد BuildReadingUnitsهرTPdfContentFragmentsرا مستقیماً به reading unit تبدیل میکند: headingها و توضیحات figure/alt کامل باقی میمانند، paragraphها بر مرز جمله شکسته میشوند، نقطههای اعشاری حفظ میشوند، و نشانگر خواندن یک index ساده در مالکیت فراخواننده است
Version 1.50.0
افزوده شد (اضافه شده)
ValidatePdfAاکنون میتواند سندهای PDF 1.5+ را که catalog، OutputIntent یا dictionaryهای دیگر را داخل compressed object streamها، یعنی/Type /ObjStm، ذخیره میکنند بررسی کند. object streamها از حالت فشرده خارج میشوند و objectهایی که حمل میکنند resolve میشوند، بنابراین این سندها بر پایهٔ واقعیت خودشان اعتبارسنجی میشوند، نه اینکه صرفاً بهعنوان فایلهایی با markerهای PDF/A مفقود گزارش شوند
Version 1.49.5
رفع شد (رفع شده)
ValidatePdfAدیگر نبودِ توضیحpdfaExtension:schemasرا بهعنوان مشکل گزارش نمیکند. schema شناسهٔ PDF/A، یعنی pdfaid، شناختهشده است، بنابراین نه veraPDF و نه PDF/A-2/-3 برای آن توضیح extension-schema لازم نمیدانند، و flag کردن نبود آن پیشتر همهٔ PDF/Aهای conformantِ شخص ثالث را به اشتباه مشکلدار گزارش میکرد. سندهایی که خود کتابخانه تولید میکند همچنان این توضیح را در بر دارند
Version 1.49.4
رفع شد (رفع شده)
ValidatePdfAاکنون وقتی شناسهٔ PDF/A بهجای child elementها بهشکل attributeهای XML، مانندpdfaid:part="2"، نوشته شده باشد، سطح conformance را تشخیص میدهد، بنابراین سندهای attribute-form دیگر با سطحی ناشناخته گزارش نمیشوند. این کار همچنین زنجیرهای از خطاها را اصلاح میکند که در آن تشخیصندادن سطح باعث میشد بررسیهای مخصوص هر part به قواعد سختگیرانهٔ PDF/A-1 برگردند و فایلهای پیوستشده و transparencyای را که PDF/A-2 و PDF/A-3 مجاز میدانند بهاشتباه flag کنند
Version 1.49.3
رفع شد (رفع شده)
ValidatePdfAاکنون سندهای PDF 1.5+ای را بررسی میکند که دادهٔ cross-reference آنها یک cross-reference stream است، یعنی فایلهایی که keywordِtrailerندارند. سطح conformance،/IDدر trailer و markerهای دیگر از dictionaryِ cross-reference stream خوانده میشوند، بنابراین این سندها بر پایهٔ واقعیت خودشان اعتبارسنجی میشوند، نه اینکه بهطور کامل غیرمنطبق گزارش شوند
Version 1.49.2
رفع شد (رفع شده)
ValidatePdfAدیگر روی سندهایی که همهٔ fontهای خود را embed کردهاند، issue جعلیِ non-embedded-font گزارش نمیکند. heuristic قبلی تعداد tokenهای/FontDescriptorرا با برنامههای fontِ embedشده مقایسه میکرد، اما هر fontِ embedشده دو token از/FontDescriptorتولید میکند، یکی ارجاع dictionaryِ font و دیگری خود object descriptor، بنابراین هر فایلِ دارای fontهای embedشده بهاشتباه flag میشد. این بررسی اکنون فقط سندی را گزارش میکند که به fontها ارجاع میدهد اما هیچ برنامهٔ fontی را اصلاً embed نکرده است، همراستا با اصلاح متناظر درValidatePdfUa
Version 1.49.1
رفع شد (رفع شده)
- خروجی PDF/A اکنون در veraPDF بهعنوان PDF/A-1b و PDF/A-1a conformant اعتبارسنجی میشود: streamِ ICC profile مربوط به OutputIntent با sRGBِ embedشده، که از طریق
/DestOutputProfileارجاع داده میشود، اکنون شمار component موردنیاز/Nرا اعلام میکند، یعنی 3 برای profile داخلیِ RGB، همانطور که ISO 19005-1 6.2.3.2 الزام میکند. سندهایی کهSaveAsPdfAتولید میکرد قبلاً در اعتبارسنجی سختگیرانهٔ PDF/A-1 رد میشدند، چون streamِ profile مقصد/Nرا نداشت؛ این مقدار از headerِ ICC profile مشتق میشود، بنابراین profileهای CMYK یا Gray که فراخواننده میدهد نیز شمار درست را دریافت میکنند
Version 1.49.0
رفع شد (رفع شده)
ValidatePdfUaدیگر نبودِ جعلیِ شناسهگذاری XMP را روی tagged PDFهای conformant گزارش نمیکند، زیرا شناسهٔ PDF/UA یعنیpdfuaid:part، مقدارdc:title، تاریخهای XMP و/IDدر trailer اکنون از byteهای اصلی سند خوانده میشوند، نه از نسخهٔ دوبارهذخیرهشدهای که streamِ XMPِ/Metadataو، در فایلهای cross-reference-stream،/IDدر trailer را حذف میکند- بررسی font-embedding در
ValidatePdfUaاصلاح شد تا سندی که همهٔ fontهای خود را embed میکند دیگر دارای fontهای embedنشده گزارش نشود؛ اکنون فقط سندی flag میشود که به fontها ارجاع میدهد اما هیچ برنامهٔ fontی را اصلاً embed نکرده است ValidatePdfUaاکنون یک element ساختاریِFormulaرا میپذیرد که متن جایگزین آن از طریقActualTextداده شده باشد، نه از طریق یک entry با نامAlt، مطابق ISO 14289-1 §7.7 و سازگار با قاعدهٔ موجود برایFigure
Version 1.48.0
افزوده شد (اضافه شده)
- انتخاب متنیِ برنامهای روی
TPdfView:SelectTextRangeبا page و بازهٔ نویسهای، وSetSelectionبا بازههای صریحِ هر صفحه، متن را از داخل کد انتخاب میکنند، برای نمونه برای خواندن و highlight کردن یک گذرگاه؛ هر دو در صورت تغییر selection بازترسیم انجام میدهند وOnSelectionChangeرا اجرا میکنند.SelectionRangesselection جاری را بهصورت بازههای نویسهایِ هر صفحه میخواند وSelectionRectanglesمستطیلهای آن را در مختصات صفحه برای highlight سفارشی یا scroll-to برمیگرداند
Version 1.47.0
افزوده شد (اضافه شده)
- ناوبری فیلد فرم برای تکمیل فرم با هدایت صوتی، هم در
TPdfو هم درTPdfView:FormFieldTabOrder،FocusedFormFieldIndex،FocusFormField،FocusNextFormField،FocusPreviousFormField،ClearFormFieldFocusوFocusedFormFieldText. اینها یک نشانگر منطقی فیلد را روی فیلدهای ویجت صفحه در ترتیب Tab حرکت میدهند و در دو سر فهرست دور میزنند، تا خواننده کمکی بتواند فرم را طی کند، هر فیلد را از طریقFormFieldInfo[Index].AlternateName(tooltip /TU) اعلام کند و از طریقFormField[Index]آن را پر کند - رویداد
TPdfView.OnFormFieldFocusChangeکه هرگاه نشانگر field جابهجا شود اجرا میشود و index جدید field را حمل میکند، یا اگر focus پاک شده باشد مقدار -1 را میدهد
Version 1.46.0
افزوده شد (اضافه شده)
- جریان محتوای listen-reading کمکی:
TPdf.ReadableContent،TPdf.ReadablePageContent،TPdf.DocumentReadableContentوTPdfView.ReadableContentیک فهرست مرتب از itemهای معناییِTPdfContentFragmentبرمیگردانند که هرکدام متن قابلگفتن را، یعنی glyphهای واقعی یاActualText/Alt برای figureها، همراه با نوع fragment، مانند heading همراه با level، paragraph، figure، list item، table cell، link یا plain، و نیز زبان، صفحهٔ 1-based، مستطیلهای highlight در سطح block و در سطح هر خط حمل میکند. PDFهای tagged از روی structure tree به ترتیب منطقیِ خواندن خطیسازی میشوند، و صفحههای بدون tag به render order برمیگردند تا هر سندی قابلخواندن با صدا باشد - هایلایت همگام خواندن در
TPdfView:SetReadingHighlight،ClearReadingHighlightوReadingHighlightColorمنتشرشده بلوکی را که اکنون خوانده میشود، بالای لایههای جستجو و انتخاب برجسته میکنند - typeهای عمومیِ جدید
TPdfContentFragment،TPdfContentFragments،TPdfReadableContent،TPdfContentFragmentKindوTPdfReadingOrderSourceاضافه شدند، همراه با helper جدیدClassifyStructType
Version 1.45.0
افزوده شد (اضافه شده)
ValidatePdfUaاکنون علاوه بر این، live tagged structure tree را نیز پیمایش میکند و سه تخلف محتواییِ با اطمینان بالا را گزارش میدهد که با اسکن در سطح byte قابلتشخیص نیستند: یک element از نوعFigureکه نه entryِ Alt دارد و نه ActualText، مطابق ISO 14289-1, 7.3، یک element از نوعFormulaکه attributeِ Alt ندارد، مطابق 7.7، و یک element از نوعNoteکه شناسهٔ یکتایی ندارد، مطابق 7.9. سه مقدار جدید ازTPdfUaValidationIssueاین موارد را surface میکنند:pvuaiFigureMissingAlt،pvuaiFormulaMissingAltوpvuaiNoteMissingId. این tree walk برای سندهای بدون tag انجام نمیشود- helper عمومیِ جدید
ValidatePdfUaStructureElementsهمین قواعد structure-tree را روی یک فهرست flat از elementها، مانند خروجیTPdf.StructureElements، اعمال میکند تا این بررسیها بدون بارگذاری کامل یک سند هم قابلاجرا یا unit-test باشند
Version 1.44.5
رفع شد (رفع شده)
- The
ValidatePdfAfont-embedding check (pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) now also detects non-embedded simple fonts that carry no/FontDescriptor, most importantly the 14 standard نوع 1 fonts (Helvetica, Times, Courier, and so on) which PDF/A requires to be embedded with no exemption. Previously such a font went unnoticed; the check now also counts simple-font dictionaries (/Type1,/TrueType,/MMType1) against the embedded font programs, mirroring the PDF/UA fix in 1.44.3
Version 1.44.4
رفع شد (رفع شده)
ValidatePdfVTاکنون treeهای DPart معیوبِ ISO 16612-2 §6.5 را رد میکند، یعنی جاهایی که/DPartsبهجای arrayِ موردنیاز از arrayها، یک array تخت از referenceها باشد، یا جایی که یک leaf DPart صفحهٔ/Startخود را بهعنوان/Endتکرار کند، با اینکه بازه فقط یک صفحه را در بر داردValidatePdfVTاکنون نامهای/NodeNameListرا بعد از بسط escapeهای#xxدر نام PDF، بهعنوان مقدارهای XML NMTOKEN اعتبارسنجی میکند، بنابراین نامهای نامعتبرِ سطح سلسلهمراتب از طریقpvviMissingDPartRootگزارش میشوند، نه اینکه بهعنوان ساختار DPart قابلاستفاده پذیرفته شوند
Version 1.44.3
رفع شد (رفع شده)
- The
ValidatePdfUafont-embedding check (pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) now also detects non-embedded simple fonts that carry no/FontDescriptor, most importantly the 14 standard نوع 1 fonts (Helvetica, Times, Courier, and so on) for which PDF/UA grants no embedding exemption. Previously such a font went unnoticed and a document that used it could be reported as compliant; the check now also counts simple-font dictionaries (/Type1,/TrueType,/MMType1) against the embedded font programs
Version 1.44.2
رفع شد (رفع شده)
ValidatePdfVTاکنون marker موجود اما ناشناختهٔpdfvtid:GTS_PDFVTVersionرا بهصورتpvcUnknownنگه میدارد و آن را بهpvcNoneتنزل نمیدهد. این کار باعث میشود رشتههای نامعتبر در سطح فایل، مانندPDF/VT-2s، از سندهایی که اصلاً markerِ PDF/VT ندارند قابلتمایز بمانند؛ PDF/VT-2s از headerِ streamِ MIME در ISO 16612-2 Annex A شناخته میشود، نه از markerِ XMP داخل فایل PDF- بررسی
/DPartRootاکنون معناشناسی tree در ISO 16612-2 §6.5 را سختگیرانهتر اعتبارسنجی میکند:/DPartRootNodeو/NodeNameListباید عمق واقعیِ DPart را توصیف کنند، پیوندهای parent در DPart باید یک tree بسازند،/Startو/DPartsبا هم ناسازگار و mutually exclusive هستند، و/DPartهر صفحه باید به leaf DPart پوشانندهٔ همان صفحه، با همان ترتیب depth-first در page tree، اشاره کند
Version 1.44.1
رفع شد (رفع شده)
SaveAsPdfVTاکنون وقتی PDF مبدأ یک/DPartRootقابلاستفاده ندارد، یک Document Part Hierarchy حداقلی مطابق ISO 16612-2 §6.5 مینویسد. tree تولیدشده همهٔ صفحهها را از طریق/DPartبه هم پیوند میدهد، یک hierarchy معتبرِ از پیش موجود را حفظ میکند، و metadata غنیترِ recipient/DPM را به workflow فراخواننده واگذار میکندValidatePdfVTاکنون ساختار DPart قابلاستفاده را اعتبارسنجی میکند، مقدارهای XMP مربوط به PDF/VT را هم از RDF attributeها و هم از متن element میخواند، و pairing دقیقِ پایهٔ PDF/VT به PDF/X را enforce میکند: PDF/VT-1 به PDF/X-4 نیاز دارد، در حالی که PDF/VT-2 به PDF/X-4p، PDF/X-5g یا PDF/X-5pg نیازمند استTPdfVTSaveOptions.Conformance = pvc2دیگر markerهای نامعتبرِ PDF/VT-2 تکفایلی نمینویسد. نویسندهٔ تکفایل خروجی را به PDF/VT-1 نرمالسازی میکند، زیرا PDF/VT-2 به semantics مبتنی بر file-set نیاز دارد
Version 1.44.0
افزوده شد (اضافه شده)
ValidatePdfUaاکنون علاوه بر markerهای قالب فایل، تخلفهای PDF/UA در سطح محتوا را که در سطح byte قابلبررسی هستند نیز گزارش میکند: یک برنامهٔ font که embed نشده باشد، مطابق ISO 14289-1, 7.21.4، یک font که وقتی هیچ simple-font encoding معاف وجود ندارد فاقد CMap از نوع/ToUnicodeباشد، مطابق 7.21.7، و سندی که annotation دارد اما هیچ ترتیب tab از نوع/Tabs /Sبرای صفحه اعلام نمیکند، مطابق 7.18.3- سه مقدار جدید از
TPdfUaValidationIssue، یعنیpvuaiFontNotEmbedded،pvuaiFontMissingToUnicodeوpvuaiMissingTabsOrder، توسطValidatePdfUaو در گزارش preflight surface میشوند. اینها heuristicهای درشتدانهای هستند که بهجای یک اعتبارسنجی کاملِ ISO 14289-1، بهعنوان hint برای preflight طراحی شدهاند
Version 1.43.1
رفع شد (رفع شده)
SaveAsPdfUaاکنون entryهای اجباریِ catalog را بر پایهٔ ISO 14289-1, 7.1 enforce میکند، یعنی/ViewerPreferencesبا/DisplayDocTitle trueو/MarkInfoبا/Marked trueو/Suspects false، حتی وقتی سند مبدأ همین dictionaryها را با مقدارهای مفقود یا متناقض از قبل داشته باشد. پیشتر این markerها فقط زمانی تزریق میشدند که dictionaryها کاملاً غایب بودند، بنابراین سندی که مثلاً/ViewerPreferencesبدونDisplayDocTitleیا/MarkInfoبا/Marked falseداشت، پس از round-trip به فایلی غیرمنطبق تبدیل میشد- کلیدهای موجود در یک dictionary از پیش موجودِ
/ViewerPreferencesیا/MarkInfoحفظ میشوند، و dictionaryای که بهصورت indirect reference داده شده باشد پیش از اعمال کلیدهای اجباری resolve میشود
Version 1.43.0
افزوده شد (اضافه شده)
ValidatePdfAاکنون قواعد PDF/A-2 و PDF/A-3 را برای فایلهای embedشده و associated و نیز برای متنِ Level U اعمال میکند. فایلهای embedشده همچنان برای PDF/A-1 رد میشوند؛ در PDF/A-3، یک فایل embedشده که کلید اجباریِ/AFRelationshipرا نداشته باشد، مطابق ISO 19005-3 Annex E، flag میشود، در حالی که attachmentهای PDF/A-2 مجاز هستند و conformance خودشان بهصورت بازگشتی بررسی نمیشود. issue جدیدpvaiUnicodeMappingMissingسند PDF/A-2u یا PDF/A-3uای را گزارش میکند که fontهایش هیچ نگاشت/ToUnicodeندارند، مطابق ISO 19005-2 6.2.11.7. transparency و optional content فقط برای PDF/A-1 همچنان flag میشوند
Version 1.42.0
افزوده شد (اضافه شده)
- اکنون PDF/A-2، مطابق ISO 19005-2، و PDF/A-3، مطابق ISO 19005-3، در هر سه سطح conformance، یعنی a، b و u، توسط
SaveAsPdfA،ValidatePdfAو ویژگیPdfAConformanceپشتیبانی میشوند. enumerationِTPdfAConformanceاکنونpac2a،pac2u،pac3aوpac3uرا نیز دارد، و PDF/A-1 سطح u ندارد. ذخیرهسازی مقدارهای متناظرِpdfaid:part، یعنی 2 یا 3، وpdfaid:conformance، یعنی A یا B یا U، را مینویسد و subtype مربوط به OutputIntent یعنیGTS_PDFA1را که ISO 19005-2 برای سازگاری نگه داشته حفظ میکند. درخواست Level A همچنان وقتی سند tagged structure موردنیاز آن سطح را نداشته باشد، برای هر part، به Level B متناظر تنزل داده میشود
Version 1.41.0
افزوده شد (اضافه شده)
ValidatePdfAاکنون علاوه بر markerهای ساختاری که پیشتر گزارش میکرد، تخلفهای PDF/A در سطح content را که marker injection نمیتواند ترمیم کند نیز تشخیص میدهد: JavaScript و سایر actionهای ممنوع، additional-actions (/AA)، embedded fileها،LZWDecode، transparency (soft maskها و transparency groupها)، optional content (/OCProperties)، annotation subtypeهای ممنوع (FileAttachment، Sound، Movie، 3D، Screen)،/NeedAppearances trueو/XFAدر AcroForm، fontهایی که descriptor آنها program font embedded ندارد، و ادعای Level A بدون ساختار taggedِ لازم طبق ISO 19005-1 6.8. بررسیهای transparency، optional-content و embedded-file فقط برای PDF/A-1 اعمال میشوند (این قابلیتها در PDF/A-2 و PDF/A-3 مجازند). مقدارهای جدیدTPdfAValidationIssueهر مورد را جداگانه نمایان میکنند؛ مقدارهای موجود بدون تغییر ماندهاند
Version 1.40.3
رفع شد (رفع شده)
SaveAsPdfAاکنون پیش از تولید خروجی PDF/A هرگونه رمزگذاریِ سند مبدأ را حذف میکند. ISO 19005-1 6.1.3 کلید/Encryptدر trailer را ممنوع میکند، اما مسیر ذخیرهسازی قبلاً security handler سند مبدأ را حفظ میکرد، بنابراین ذخیره کردن یک سند رمزگذاریشده بهصورت PDF/A فایلی رمزگذاریشده و غیرمنطبق تولید میکرد. ذخیرهسازی PDF/A اکنون ابتدا سند را رمزگشایی میکند و سندهای بدون رمزگذاری تحت تأثیر قرار نمیگیرند
Version 1.40.2
رفع شد (رفع شده)
- از این پس
SaveAsPdfAادعای نادرستِ conformance در سطح PDF/A Level A منتشر نمیکند. وقتی Level A، یعنیpac1a، درخواست شود اما سند مبدأ markerهای tagged-structure لازم در ISO 19005-1 6.8 را نداشته باشد، یعنی/StructTreeRootدر catalog و dictionaryِ/MarkInfoبا/Marked true، فایل ذخیرهشده اکنون بهجای ادعای Level A، بهعنوان Level B متناظر باpdfaid:conformanceبرابرBشناخته میشود. خروجی صرفاً بصریِ PDF/A-1b تغییری نمیکند
Version 1.40.1
رفع شد (رفع شده)
- اعتبارسنجیِ انطباق نسخهٔ PDF سختگیرانهتر شد تا actionِ
SetOCGState، یعنی set-optional-content-group-state، بهدرستی بهعنوان یک قابلیت PDF 1.5 شناخته شود. ذخیرهسازی به هدف PDF 1.2 یا 1.3 یا 1.4 که actionی از نوعSetOCGStateداشته باشد اکنون برای انطباق با ISO 32000-1، Table 198، رد میشود؛ پیشتر چنین actionی میتوانست به خروجیِ نسخههای پایینتر راه پیدا کند. action متمایز و منسوخِ PDF 1.2 با نامSetStateهمچنان از PDF 1.2 به بعد پذیرفته میشود
Version 1.40.0
افزوده شد (اضافه شده)
- API بالادستیِ
FPDFPageObj_AddExistingMark()bind شد؛ این API یک content mark موجود را به یک page object متصل میکند. وقتی page objectهای پیاپی همان mark را به اشتراک بگذارند، PDF ذخیرهشده آنها را به یک mark واحد که همهٔ آنها را در بر میگیرد collapse میکند؛ objectهای غیرپیاپی copyهای جداگانه دریافت میکنند - API بالادستیِ
FPDFTextObj_SetFontSize()نیز برای تغییر point size یک text object موجود bind شد و binding موجود برایFPDFTextObj_GetFontSize()را کامل میکند
تغییر کرد (تغییر یافته)
- نسخههای bundled DLL زمان اجرای PDFium (Win32 و Win64، buildهای standard و V8) را به snapshot upstream 2026-06-02 بهروزرسانی کرد
Version 1.39.53
تغییر کرد (تغییر یافته)
- تغییر کرد (تغییر یافته) the Delphi
PDFViewer,SplitView, andMultiPageViewerdemos to open documents inZoom to Pagemode by default - رندر اولیه اکنون کل صفحه را پیش از آنکه کاربر یک سطح بزرگنمایی دستی انتخاب کند، در سطح viewer جا میدهد
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.53 را گزارش میکنند
Version 1.39.52
تغییر کرد (تغییر یافته)
- نمونهٔ
Demo\Lazarus\CreatePDFبهبود یافت تا نمونهٔ آغازین اکنون یک PDF دوصفحهای با مسیرهای برداری، محتوای جدول، یک تصویر embedشده، یک annotation متنی، متن چرخیده و یک walkthrough روشنتر برای ساخت سند تولید کند - افزوده شد (اضافه شده) polished
README.htmlpages for every Delphi, C++Builder, and Lazarus demo folder, replacing the remaining text-only demo README with a browser-readable guide - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.52 را گزارش میکنند
Version 1.39.51
- خلاصههای batch در
Demo\Delphi\PreflightReportCliبهبود یافتند تا مجموع وضعیتهای استاندارد برای Pass، Action required و Review را در سراسر استانداردهای انتخابشده نشان دهند - ردیفهای هر فایل اکنون شمار action-required و review را در خلاصههای TXT / HTML / JSON / CSV در بر میگیرند و بررسی artifactهای CI را بدون باز کردن تکتک گزارشهای تولیدشده آسانتر میکنند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.51 را گزارش میکنند
Version 1.39.50
- حالت directory batch در
Demo\Delphi\PreflightReportCliبهبود یافت تاbatchdir=folderمسیرهای PDF کشفشده را جمعآوری کند، آنها را مرتب سازد و سپس گزارشها را با ترتیبی پایدار تولید کند - اسکنهای بازگشتی دایرکتوری اکنون ترتیب بازتولیدپذیر برای گزارشها و ردیفهای خلاصه تولید میکنند، در حالی که پردازش صریح
batch=list.txtهمچنان ترتیب فایل فهرست را حفظ میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.50 را گزارش میکنند
Version 1.39.49
- خلاصههای batch در
Demo\Delphi\PreflightReportCliبهبود یافتند تا تنظیمات اجرا را ثبت کنند: نوع منبع، مسیر منبع، وضعیت بازگشتی، دایرکتوری خروجی، قالب گزارش، استانداردهای انتخابشده و حالتfailon= - خلاصههای JSON اکنون یک object با نام
runدارند، خلاصههای TXT و HTML یک بخش تنظیمات اجرا نشان میدهند، و ردیفهای CSV همان ستونهای audit را برای spreadsheetها و pipelineهای CI تکرار میکنند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.49 را گزارش میکنند
Version 1.39.48
- نامگذاری خروجی batch در
Demo\Delphi\PreflightReportCliبهبود یافت تا نامهای فایل ورودیِ تکراری که یکoutdir=مشترک دارند دیگر گزارشهای تولیدشدهٔ یکدیگر را overwrite نکنند - اجرای batch اکنون وقتی یک مسیر گزارشِ تولیدشده از قبل در همان اجرا اختصاص داده شده باشد، پسوندهای
-2،-3و پسوندهای بعدی را اضافه میکند، و خلاصهها مسیر نهاییِ امن در برابر collision را ثبت میکنند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.48 را گزارش میکنند
Version 1.39.47
- خلاصههای batch در
Demo\Delphi\PreflightReportCliبهبود یافتند تا خروجیهای TXT و JSON اکنون مجموعهای تجمیعی برای total files، processed files، failed files، issueها و تطابقهایfailon=را در بر بگیرند - خلاصههای CSV برای مصرفکنندههای فعلی همچنان یک جدول ردیفیِ خالص باقی میمانند، در حالی که خلاصههای HTML همان معیارهای تجمیعی را در header داشبورد نشان میدهند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.47 را گزارش میکنند
Version 1.39.46
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازsummary=batch.html/.htmافزوده شد تا اجراهای batch بتوانند در کنار manifestهای TXT / CSV / JSON یک داشبوردِ قابلخواندن در مرورگر تولید کنند - خلاصههای HTML معیارهای total، processed، failed، issue و تطابق
failon=را نشان میدهند و سپس هر ورودی را همراه با پیوندهای گزارش، status، شمارها و متن خطا فهرست میکنند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.46 را گزارش میکنند
Version 1.39.45
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازbatchdir=folderوrecursiveافزوده شد تا scriptها بتوانند پوشههای PDF را مستقیماً اسکن کنند، بدون آنکه ابتدا یک فایل فهرست بنویسند - حالت directory batch رفتار
outdir=،summary=،standards=وfailon=را از حالت batch مبتنی بر فهرست دوباره استفاده میکند، در حالی که اسکن غیر بازگشتی فقط پوشهٔ انتخابشده را میپیماید وrecursiveزیردایرکتوریها را هم در بر میگیرد - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.45 را گزارش میکنند
Version 1.39.44
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازsummary=batch.csv|json|txtافزوده شد تا اجراهای batch بتوانند در کنار گزارشهای هر فایل یک manifest ماشینخوان تولید کنند - خلاصههای batch مسیر هر ورودی، مسیر گزارش، status، شمار استانداردها، شمار passed، شمار issueها، وضعیت تطابق
failon=و متن خطا را برای jobهای CI و scriptهای بیرونی در بر میگیرند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.44 را گزارش میکنند
Version 1.39.43
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازbatch=list.txtوoutdir=reportsافزوده شد تا scriptها بتوانند برای یک فهرست از فایلهای PDF در یک اجرا گزارشهای preflight تولید کنند - حالت batch از روی خطهای خالی و خطهای توضیحیِ
#عبور میکند، نام هر گزارش.preflight.<ext>را از PDF ورودی مشتق میکند، پس از خطاهای هر فایل ادامه میدهد و پیش از بازگشت فایلهای پردازششده و ناموفق را خلاصه میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.43 را گزارش میکنند
Version 1.39.42
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازfailon=none|issues|action|reviewافزوده شد تا jobهای CI بتوانند نتیجههای preflight تولیدشده را به exit codeهای قطعی تبدیل کنند - CLI اکنون وقتی پس از تولید فایل گزارش و PDFِ اختیاریِ attached-report یک قاعدهٔ انتخابشده از
failon=تطبیق پیدا کند، exit code 2 برمیگرداند، در حالی که خطاهای زمان اجرا همچنان exit code 1 برمیگردانند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.42 را گزارش میکنند
Version 1.39.41
- به
Demo\Delphi\PreflightReportCliپشتیبانی ازattach=output.pdfافزوده شد تا یک گزارش preflight تولیدشده بتواند بهعنوان attachment در سطح سند داخل یک copy جدید از PDF embed شود - CLI فایل گزارش تولیدشده در قالبهای TXT / HTML / Markdown / JSON / CSV را روی disk نگه میدارد و از attach کردن دوباره به مسیر PDF ورودیِ اصلی خودداری میکند تا خطر overwrite تصادفی کاهش یابد
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.41 را گزارش میکنند
Version 1.39.40
- افزوده شد (اضافه شده)
Demo\Delphi\PreflightReportCli, a Delphi console companion for scriptableFPdfPreflightReportgeneration without opening a viewer - CLI از ساخت نمونه بدون آرگومان، بهعلاوه آرگومانهای input / output، گذرواژهٔ اختیاری، قالبهای خروجی
text/html/md/json/csvو فیلترstandards=برای PDF/A، PDF/UA، PDF/E، PDF/X، PDF/R و PDF/VT پشتیبانی میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.40 را گزارش میکنند
Version 1.39.39
FPdfPreflightReportباTPdfPreflightReport.ToMarkdownوSaveMarkdownToFileبهبود یافت تا گزارشهای preflight بتوانند بهصورت Markdown سازگار با issue tracker صادر شوند- نمونههای
PreflightReportدر Delphi، C++Builder و Lazarus با جابهجایی پیشنمایش Markdown و actionهای Save MD در کنار workflow موجودِ TXT / HTML / JSON / CSV بهروزرسانی شدند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.39 را گزارش میکنند
Version 1.39.38
- نمونههای
SecurityAuditدر Delphi، C++Builder و Lazarus با خروجی گرفتن گزارش audit بهصورت JSON در کنار workflow موجودِ ذخیره / کپی TXT بهبود یافتند - گزارش JSON شامل
format،generatedAt،summary،findingCountو ردیفهای ساختیافتهٔfindingsبا fieldهای severity، area و detail است - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.38 را گزارش میکنند
Version 1.39.37
FPdfPreflightReportباTPdfPreflightReport.ToCsvوSaveCsvToFileبهبود یافت تا گزارشهای preflight بتوانند بهصورت CSV سازگار با spreadsheet صادر شوند- نمونههای
PreflightReportدر Delphi، C++Builder و Lazarus با جابهجایی پیشنمایش CSV و actionهای Save CSV در کنار workflow موجودِ TXT / HTML / JSON بهروزرسانی شدند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.37 را گزارش میکنند
Version 1.39.36
FPdfPreflightReportباTPdfPreflightReport.IssueCategoryCountsو typeهای قابلاستفادهٔ دوبارهٔTPdfPreflightIssueCategoryCountوTPdfPreflightIssueCategoryCountsبرای تجمیع issueهای marker-level بر پایهٔ category بهبود یافتTPdfPreflightReport.ToText،ToHtmlوToJsonبهروزرسانی شدند تا خروجی تولیدشدهٔ PreflightReport در کنار ردیفهای هر استاندارد و توصیههای تفصیلیِ issue، خلاصههای شمارشِ categoryهای issue را نیز در بر بگیرد- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.36 را گزارش میکنند
Version 1.39.35
- نمونهٔ گسترشیافتهٔ
PrintDialogدر Delphi، C++Builder و Lazarus بهPrintPreferencesتغییر نام داد تا نام demo اکنون با workflow مربوط به ترجیحهای چاپِ نویسندهٔ PDF، چاپ N-up، فیلتر فرد / زوج، grayscale، border سلول و duplex mapping آن همخوان باشد - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.35 را گزارش میکنند
Version 1.39.34
Demo\Delphi\PrintPDFبا بارگذاری PDF از طریق drag-and-drop بهبود یافت و workflow موجودِDemo\CBuilder\PrintPDFنیز در کنار نمونههای PrintPDF برای Delphi و Lazarus مستندسازی شد- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.34 را گزارش میکنند
Version 1.39.33
- افزوده شد (اضافه شده)
Demo\CBuilder\SplitView, completing the SplitView sample matrix across Delphi, C++Builder, and Lazarus - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.33 را گزارش میکنند
Version 1.39.32
- افزوده شد (اضافه شده)
Demo\Lazarus\SplitView, bringing side-by-side PDF comparison to Lazarus with two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets, and rotation - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.32 را گزارش میکنند
Version 1.39.31
- افزوده شد (اضافه شده)
Demo\Lazarus\PrintPDF, bringing the standard PDF print workflow to Lazarus with preview navigation, page ranges, copies, collate mode, progress, and cancellation - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.31 را گزارش میکنند
Version 1.39.30
- افزوده شد (اضافه شده)
Demo\Lazarus\FontProperties, completing the FontProperties sample matrix across Delphi, C++Builder, and Lazarus - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.30 را گزارش میکنند
Version 1.39.29
- افزوده شد (اضافه شده)
Demo\CBuilder\FontProperties, bringing indexed character and font metadata inspection to C++Builder alongside the Delphi sample - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.29 را گزارش میکنند
Version 1.39.28
- افزوده شد (اضافه شده)
Demo\Delphi\ExtractTextPages, completing the per-page text extraction sample matrix across Delphi, C++Builder, and Lazarus - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.28 را گزارش میکنند
Version 1.39.27
- افزوده شد (اضافه شده)
Demo\Lazarus\PrintDialog, completing the PrintDialog sample matrix across Delphi, C++Builder, and Lazarus - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.27 را گزارش میکنند
Version 1.39.26
- افزوده شد (اضافه شده)
Demo\CBuilder\PrintDialog, bringing the N-up printing and PDF author print preferences workflow to C++Builder alongside the Delphi sample - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.26 را گزارش میکنند
Version 1.39.25
- افزوده شد (اضافه شده)
Demo\CBuilder\ViewerInteractionLab، که مجموعه نمونههای ViewerInteractionLab را در Delphi، C++Builder و Lazarus کامل میکند - workflow ساخت کتابخانه و خروجیهای بستهٔ Win64 برای C++Builder بهروزرسانی شدند تا متدهای viewer interaction در
TPdfViewدر demoهای Win64 بهدرستی link شوند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.25 را گزارش میکنند
Version 1.39.24
- افزوده شد (اضافه شده)
Demo\Lazarus\ViewerInteractionLab، که گردشکار تعاملی متمرکز نمایشگر را در کنار نمونه Delphi به Lazarus میآورد - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.24 را گزارش میکنند
Version 1.39.23
- افزوده شد (اضافه شده)
Demo\Lazarus\SearchAndSelect, completing the SearchAndSelect sample matrix across Delphi, C++Builder, and Lazarus - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.23 را گزارش میکنند
Version 1.39.22
- افزوده شد (اضافه شده)
Demo\CBuilder\ContentExtractionLabandDemo\Lazarus\ContentExtractionLab, bringing the multi-category content extraction workflow to all supported demo IDEs - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.22 را گزارش میکنند
Version 1.39.21
- نمونههای
Demo\Delphi\PreflightReport،Demo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportبا یک انتخابگر قالب پیشنمایش بهبود یافتند تا کاربران پیش از ذخیرهٔ گزارشها بتوانند خروجی text یا JSON را بررسی کنند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.21 را گزارش میکنند
Version 1.39.20
- افزوده شد (اضافه شده) JSON export to
FPdfPreflightReportthroughTPdfPreflightReport.ToJsonandSaveJsonToFile, producing machine-readable summaries, per-standard status / priority, next actions, and issue details - نمونههای
Demo\Delphi\PreflightReport،Demo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportبا actionهای Save JSON در کنار export به TXT / HTML بهروزرسانی شدند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.20 را گزارش میکنند
Version 1.39.19
FPdfPreflightReportباTPdfPreflightStatus، categoryهای issue، اولویت در سطح هر استاندارد و راهنمای next-action در گزارشهای TXT / HTML بهبود یافت- نمونههای
Demo\Delphi\PreflightReport،Demo\Lazarus\PreflightReportوDemo\CBuilder\PreflightReportبهروزرسانی شدند تا status، priority، شمار issueها و next action را در grid خلاصه نشان دهند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.19 را گزارش میکنند
Version 1.39.18
- افزوده شد (اضافه شده)
Demo\Lazarus\SecurityAudit، و matrix نمونههای Delphi، C++Builder و Lazarus را برای گردشکار audit سطحریسک PDF فقطخواندنی کامل کرد - نمونهٔ Lazarus فهرست permissions، attachmentها، actionهای JavaScript، annotationهای پیوندیِ URI / Launch، web linkها، signatureها، وضعیت XFA، در دسترس بودن helperهای V8 / XFA و callbackهای unsupported-feature را استخراج میکند و سپس فهرست findingها را بهصورت گزارش TXT ذخیره یا کپی میکند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.18 را گزارش میکنند
Version 1.39.17
- افزوده شد (اضافه شده)
Demo\CBuilder\SecurityAudit, bringing the read-only PDF risk-surface audit workflow to C++Builder alongside the existing Delphi sample - نمونهٔ C++Builder فهرست permissions، attachmentها، actionهای JavaScript، annotationهای پیوندیِ URI / Launch، web linkها، signatureها، وضعیت XFA، در دسترس بودن helperهای V8 / XFA و callbackهای unsupported-feature را استخراج میکند و سپس فهرست findingها را بهصورت گزارش TXT ذخیره یا کپی میکند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.17 را گزارش میکنند
Version 1.39.16
- افزوده شد (اضافه شده)
Demo\CBuilder\SearchAndSelect, bringing the standalone SearchAndSelect viewer workflow to C++Builder alongside the existing Delphi sample - نمونهٔ C++Builder PDFها را ایجاد یا باز میکند، تطابقهای همهٔ صفحهها را همراه با پیشنمایش page / character-index فهرست میکند، از ناوبری Previous / Next و double-click پشتیبانی میکند و تطابقهای صفحهٔ جاری را با
HighlightSearchTextبرجسته میسازد - این نمونه همچنین گزینههای
AllowUserTextSelection،SelectedText،SelectAll،CopySelectionToClipboard،ClearSelection،OnSelectionChangeوDisplayModeدر حالت spread را در معرض استفاده میگذارد؛ فرادادهٔ نسخه اکنون 1.39.16 را گزارش میکند
Version 1.39.15
- افزوده شد (اضافه شده)
Demo\CBuilder\WatermarkStamp, completing the Delphi, Lazarus, and C++Builder demo matrix for reusable Form XObject watermark and stamp workflows - نمونهٔ C++Builder PDFهای target و stamp را ایجاد میکند، صفحهٔ stamp را از طریق
CreateXObjectFromPageدوباره استفاده میکند، تبدیلهایTPdfMatrixرا اعمال میکند و watermarkهای مرکزی، stampهای گوشهای و برچسبهای شمارهٔ صفحه را ذخیره میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.15 را گزارش میکنند
Version 1.39.14
- افزوده شد (اضافه شده)
Demo\Lazarus\WatermarkStamp, bringing the reusable Form XObject watermark and stamp workflow to Lazarus - نمونهٔ Lazarus PDFهای target و stamp را ایجاد میکند، صفحهٔ stamp را از طریق
CreateXObjectFromPageدوباره استفاده میکند، تبدیلهایTPdfMatrixرا اعمال میکند و watermarkهای مرکزی، stampهای گوشهای و برچسبهای شمارهٔ صفحه را ذخیره میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.14 را گزارش میکنند
Version 1.39.13
- افزوده شد (اضافه شده)
Demo\CBuilder\PreflightReport, completing the Delphi, Lazarus, and C++Builder demo matrix for the reusableFPdfPreflightReportworkflow - نمونهٔ C++Builder از
FPdfPreflightReport.hppبرای تولید خلاصههای استاندارد، پیشنمایش گزارش TXT، فایلهای گزارش TXT / HTML و رفتار Open Last Report استفاده میکند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.13 را گزارش میکنند
Version 1.39.12
- افزوده شد (اضافه شده)
Demo\Lazarus\PreflightReport, bringing the PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, and PDF/VT preflight report workflow to Lazarus - نمونهٔ Lazarus میتواند یک PDF را باز یا ایجاد کند، استانداردهای هدف را انتخاب کند، ردیفهای خلاصه و خروجی گزارش TXT را پیشنمایش دهد، گزارشهای TXT / HTML را ذخیره کند و آخرین گزارش ذخیرهشده را باز کند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.12 را گزارش میکنند
Version 1.39.11
Demo\Delphi\SearchAndSelectبا یک فهرست نتایج جستوجو برای همهٔ صفحهها بهبود یافت که شمارهٔ صفحه، index نویسه و متن پیشنمایش را ثبت میکند- افزوده شد (اضافه شده) Previous / Next match navigation and double-click result jumping while preserving current-page
HighlightSearchTextbehavior - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.11 را گزارش میکنند
Version 1.39.10
Demo\Delphi\SecurityAuditبا actionهای Save Report و Copy Report بهبود یافت که خلاصهٔ جاری و ردیفهای finding را بهصورت یک گزارش audit با قالب TXT صادر میکنند- این demo اکنون هنگام reset شدن پنل audit وضعیت export گزارش را پاک میکند تا گزارشهای کپی یا ذخیرهشده با findingهای قابلمشاهده همراستا بمانند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.10 را گزارش میکنند
Version 1.39.9
Demo\Delphi\ContentExtractionLabبا ذخیرهٔ source-PDF، کپی گزارش به clipboard و actionهای انتخاب category بهصورت all / none بهبود یافت- این demo اکنون وقتی انتخاب categoryها تغییر کند، گزارش جاری را نامعتبر میکند تا exportهای TXT / JSON دامنهٔ extractionِ قابلمشاهده را بازتاب دهند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.9 را گزارش میکنند
Version 1.39.8
- افزوده شد (اضافه شده)
Demo\Delphi\ContentExtractionLab, a unified content extraction workflow sample for document metadata, page text, page objects, images, attachments, links, annotations, bookmarks, and font / character metrics - این نمونه میتواند یک PDF موجود را باز کند یا یک PDF مصنوعی با محتوای text، image، attachment و annotation بسازد و سپس ردیفهای خلاصه و گزارشهای تفصیلی TXT / JSON تولید کند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.8 را گزارش میکنند
Version 1.39.7
- افزوده شد (اضافه شده)
Lib\FPdfPreflightReport.pas, a reusable report helper that wrapsValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, andValidatePdfVTinto oneTPdfPreflightReportobject - افزوده شد (اضافه شده)
Demo\Delphi\PreflightReport, a workflow sample that opens or creates a PDF, selects target standards, previews summary rows and issue recommendations, and saves TXT or HTML reports - گزارشهای تولیدشده مرزِ اعتبارسنجیِ built-in در سطح marker را بهصراحت توضیح میدهند تا برنامهها در صورت نیاز بتوانند آنها را با ابزارهای preflight اختصاصیِ سطح محتوا جفت کنند
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus، فهرستهای project package و فرادادهٔ نسخهٔ installer اکنون 1.39.7 را گزارش میکنند
Version 1.39.6
- افزوده شد (اضافه شده)
Demo\Delphi\SearchAndSelect, a focused viewer workflow sample for search highlighting, text selection, selected-text preview, copy, clear, and spread display modes - این نمونه
HighlightSearchText، گزینههای جستوجوی match-case / whole-word،AllowUserTextSelection،SelectedText،SelectAll،CopySelectionToClipboardوClearSelectionرا بدون افزودن API جدید به کتابخانه نمایش میدهد - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.6 را گزارش میکنند
Version 1.39.5
Demo\Delphi\ViewerInteractionLabبه یک نمونه UX نمایشگر به سبک SearchAndSelect گسترش یافت، باHighlightSearchText، گزینههای match-case / whole-word، پیشنمایش متن انتخابشده و کنترلهای موجود انتخاب / clipboardDemo\Delphi\PrintDialogگسترش یافت تا ترجیحهای چاپِ نویسندهٔ PDF را بررسی کند:PrintCopies،PrintPageRanges،PrintScaling،PrintPaperHandlingو duplex mappingِ قابلمشاهدهٔSetPdfPrintPaperHandlingDevMode- افزوده شد (اضافه شده)
Demo\Delphi\SecurityAudit, a read-only risk-surface sample that lists permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state, and V8 / XFA helper availability - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.5 را گزارش میکنند
Version 1.39.4
- افزوده شد (اضافه شده)
Demo\CBuilder\ImageToPDFandDemo\Lazarus\ImageToPDF, completing the ImageToPDF sample matrix across Delphi, C++Builder, and Lazarus - نمونههای جدید انتخاب چندتصویری، پیشنمایش تصویر انتخابشده، یک صفحهٔ PDF برای هر تصویر، اندازهگذاری صفحهٔ A4 در حالت portrait / landscape، مقیاسدهیِ متمرکزِ تصویر، پیشرفت برای هر تصویر و باز کردن PDF تولیدشده پس از ذخیره را نشان میدهند
- نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.4 را گزارش میکنند
Version 1.39.3
- افزوده شد (اضافه شده)
Demo\CBuilder\BatchExport، و گردشکار export چندفایلی PDF به JPG را در C++Builder در کنار نمونههای موجود Delphi و Lazarus نیز فراهم کرد - این نمونه
LoadCustomDocument،IPdfCancellationTokenSource، ورودیِ streaming باTFileStream، پیشرفت در سطح هر فایل و هر صفحه، رسیدگی به cancel، ورودیهای DPI / quality / password و باز کردن پوشهٔ خروجی پس از completion را نشان میدهد - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.3 را گزارش میکنند
Version 1.39.2
- افزوده شد (اضافه شده)
Demo\Delphi\WatermarkStamp, a runnable Form XObject workflow sample that creates a target PDF and reusable stamp PDF, then applies centered watermarks, top-right stamps, and page-number labels across every page - این نمونه
CreateXObjectFromPage،InsertFormObjectFromXObject،TPdfMatrixوFPDFPageObj_SetMatrixرا بدون افزودن API جدید به کتابخانه نمایش میدهد - بهروزرسانی شد
Docs\en-us\Examples.htmlتا هنگام ارسال ماتریسها بهFPDFPageObj_SetMatrixاز الگوی فعلیTPdfMatrix.Handleاستفاده کند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.2 را گزارش میکنند
Version 1.39.1
- افزوده شد (اضافه شده)
Demo\Delphi\ViewerInteractionLab، یک نمونه متمرکزTPdfViewبرای حالتهای نمایش، حالتهای fit، رنگهای صفحه، چرخش، انتخاب متن توسط کاربر، عملیات clipboard و بازخورد مختصاتDeviceToPage - افزوده شد (اضافه شده)
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabso Lazarus users can run the PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, and PDF/VT validation and marker-output workflow - unitهای مربوط به استانداردها در
Lib\37.0\PDFiumPas.dprojوLib\FPC\PDFiumLaz.lpkفهرست شدند و build نمونهٔ DelphiSplitViewبا حذف import تکراریِWinapi.ShellAPIاصلاح شد - رفع شد (رفع شده) Delphi demo batch-build blockers in
BatchExport,PDFViewer,MultiPageViewer, andSplitViewwithout changing their runtime behavior - رفع شد (رفع شده) C++Builder demo batch-build compatibility in
PDFViewerandMultiPageViewerby replacingnullptrwithNULLfor the current project mode - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.1 را گزارش میکنند
Version 1.39.0
- افزوده شد (اضافه شده)
Demo\Delphi\StandardsLab, a runnable standards workflow sample that loads or creates a PDF, runsValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR, andValidatePdfVT, and displays detected conformance, pass/fail status, and issue counts in one grid - دکمههای ذخیره در StandardsLab،
SaveAsPdfA،SaveAsPdfUa،SaveAsPdfE،SaveAsPdfX،SaveAsPdfRوSaveAsPdfVTرا فراخوانی میکنند و خروجی markerهای استانداردهای PDF را بدون نوشتن یک harness سفارشی قابلمشاهده میسازند - نسخهٔ
TPdf.AboutInfo، فرادادهٔ بستهٔ Lazarus و فرادادهٔ نسخهٔ installer اکنون 1.39.0 را گزارش میکنند
Version 1.38.0
- overlayهای جستوجو و انتخاب متن در
TPdfViewاکنون بهجای رسم با logical mask از alpha blending واقعی استفاده میکنند و محتوای صفحه را زیر highlightها حفظ میکنند - افزوده شد (اضافه شده)
SetPdfPrintPaperHandlingDevModeto mapTPrintPaperHandlinginto WindowsDEVMODE.dmDuplexvalues:DMDUP_SIMPLEX,DMDUP_HORIZONTAL, andDMDUP_VERTICAL TPdfView.SmoothScrollاکنون فرمانهای scrollbar در سطح line/page را در segmentهای مبتنی بر timer animate میکند؛ ردگیری thumb همچنان فوری باقی میماند- نسخهٔ
TPdf.AboutInfoو فرادادهٔ نسخهٔ installer اکنون 1.38.0 را گزارش میکنند
Version 1.37.0
TPdfاکنون یک render lock در سطح هر instance دارد که مسیرهایRenderPage،RenderTile،RenderPageProgressive، reload صفحه و unload سند را بهصورت ترتیبی اجرا میکند. رندر هدایتشده با worker از طریق یک component مشترک اکنون عملی است، هرچند برنامهها همچنان mutation و lifetime سند را هماهنگ میکنند- رفع شد (رفع شده) the zero-copy bitmap wrapper to reject bottom-up
TBitmapDIB layouts and fall back to a PDFium-owned buffer before copying out, eliminating stride-corruption / access-violation failures in VCL render tests - رفتار selection در
TPdfViewسختگیرانهتر شد:AllowUserTextSelectionفقط ورودی کاربر را gate میکند، APIهای selection در سطح کد همچنان رسم میکنند، وSelectAllاز spread واقعاً قابلمشاهده پیروی میکند تا صفحهٔ cover دیگر صفحهٔ 2 را انتخاب نکند. آزمونهای Delphi، Lazarus و C++Builder نیز متناسب با آن گسترش یافتند - نسخهٔ
TPdf.AboutInfoو فرادادهٔ نسخهٔ installer اکنون 1.37.0 را گزارش میکنند
Version 1.36.0
- انتخاب متن برای کاربر نهایی در
TPdfViewفعال شد — ویژگیAllowUserTextSelectionکه از v1.17.0 رزرو شده بود، اکنون یک فرایند کامل انتخاب با کشیدن را هدایت میکند. کلیک چپ روی یک نویسهٔ متنی حالت انتخاب را فعال میکند (hit-test auto)؛ کلیک چپ روی یک ناحیهٔ خالی مانند قبل به جابهجایی ادامه میدهد. ویجت form-fill اولویت را حفظ میکند، بنابراین کلیک روی یک form field همچنان همان فیلد را متمرکز میکند و انتخاب را آغاز نمیکند - با دوبار کلیک، کلمه انتخاب میشود، با سهبار کلیک، خط انتخاب میشود،
Ctrl+Aصفحهٔ فعلی را انتخاب میکند (هر دو صفحه در حالتهای نمایش spread) وCtrl+Cانتخاب را بهصورتCF_UNICODETEXTدر clipboard ویندوز کپی میکند Shift+Left/Shift+Rightانتخاب را هر بار یک نویسه گسترش میدهد (و در حالت spread به صفحهٔ مجاور هم میرسد)؛Shift+Home/Shift+Endبا استفاده از ارتفاع کادر نویسهٔ آغازین بهعنوان تلورانس خوشهبندی خط، انتخاب را تا لبهٔ بصری خط گسترش میدهد تا خطوط با اندازهٔ قلمهای متفاوت درست خوشهبندی شوند- وقتی روی متن میروید، نشانگر به
crIBeamتغییر میکند؛ وقتی از متن خارج میشوید، نشانگر پیشفرض برمیگردد. هنگام کشیدن برای انتخاب متن، کشیدن به یک ناحیهٔ مردهٔ 20 پیکسلی در هر لبهٔ viewer صفحه را بهطور خودکار پیمایش میکند (50 ms tick، 16 px / tick، با همان محدودههایی که مسیر pan استفاده میکند) تا انتخاب بتواند پیش از رها کردن ماوس از نمای فعلی فراتر برود - انتخاب میانصفحهای در حالتهای نمایش spread (
dmTwoPageContinuous,dmTwoPageContinuousWithCover) کار میکند: اگر انتخاب با کشیدن از صفحهٔ چپ آغاز شود و روی صفحهٔ راست پایان یابد، یک بازهٔ پیوسته را که هر دو صفحه را در بر میگیرد انتخاب میکند.SelectedTextبرشهای هر صفحه را با CR/LF به هم وصل میکند تا متن بازگرداندهشده مانند محتوای چندخطی عادی خوانده شود - ویژگی منتشرشدهٔ جدید
SelectionColor(پیشفرضclHighlight، رنگ انتخاب سیستم Windows) مستقل ازHighlightColorاست که نتایج جستوجو را زرد میکند. هایلایتهای جستوجو و یک انتخاب زندهٔ کشیدنی میتوانند همزمان روی صفحه دیده شوند بدون اینکه رنگها با هم تداخل پیدا کنند - رویداد منتشرشدهٔ جدید
OnSelectionChangeهر زمان که بازههای تحققیافتهٔ انتخاب واقعاً تغییر کنند اجرا میشود — هرگز هنگام اعمال دوبارهٔ یکسان، بنابراین برنامههای میزبان میتوانند آن را مستقیم به متن نوار وضعیت یا وضعیت فعال بودن دکمهها وصل کنند، بدون نیاز به debounce - API عمومی جدید در
TPdfView:HasSelection،SelectionCharCount،SelectedText،ClearSelection،SelectAll،CopySelectionToClipboard. اینها نقاط ورود در سطح کد هستند و صرفنظر ازAllowUserTextSelectionهمیشه کار میکنند — این پرچم فقط ورودی کاربر (ماوس، Ctrl+C، Ctrl+A، Shift+arrows) را محدود میکند، بنابراین میزبانهای kiosk میتوانند انتخاب مبتنی بر کاربر را غیرفعال کنند و در عین حال دکمههای نوارابزار "Select All / Copy" بسازند که همان API را فراخوانی میکنند - یک منوی پیشفرض کلیکراست
Copy/复制بهطور خودکار اضافه میشود وقتی میزبانPopupMenuخودش را تنظیم نکرده باشد — الگوی استاندارد «متن را انتخاب کن، راستکلیک کن، کپی کن» بیدرنگ کار میکند. عنوان میان انگلیسی و چینی باSysLocale.PriLangIDانتخاب میشود؛ میزبانهایی که بومیسازی کاملتر یا منوی غنیتری میخواهند، کافی استPopupMenuخودشان را اختصاص دهند تا منوی پیشفرض غیرفعال شود - انتخاب هنگام گذارهای
SetPdf،SetPageNumber،SetActive(False)وDisplayModeبهطور خودکار پاک میشود وOnSelectionChangeدقیقاً یکبار اجرا میشود وقتی انتخاب قبلی خالی نبوده است. زیرسامانهٔ form-fill اولویت را حفظ میکند — وقتی یک form field در حال ویرایش است، همهٔ میانبرهای صفحهکلید انتخاب کنار میروند تا آن فیلدCtrl+C/Ctrl+A/Shift+arrowsرا برای انتخاب خودش دریافت کند - مجموعههای بازآزمایی Delphi و Lazarus به 202 مورد برای هرکدام، و مجموعهٔ C++Builder به 159 مورد گسترش یافتند، با پوشش مقادیر پیشفرض، round-trip، رفتار API عمومی، پاکسازیهای تغییر وضعیت، drag ماوس (hit-text / hit-blank)، click در برابر drag، جابهجایی نشانگر IBeam، کلمه با double-click، خط با triple-click، میانبرهای صفحهکلید، اتصال / تعویق / عنوان popup پیشفرض، و انتخاب میانصفحهای در spread — از جمله یک بررسی round-trip برای clipboard CR/LF
Version 1.35.0
- افزوده شد (اضافه شده) پشتیبانی از تزریق markerهای 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 نیز منطبق باشد — بنابراین injector مجموعهٔ کامل markerهای PDF/X-4 را مینویسد (pdfxid:GTS_PDFXVersion = "PDF/X-4"در XMP،/GTS_PDFXVersion (PDF/X-4)و/Trappedدر Info، و/OutputIntentsدر catalog که به یک OutputIntent dictionary با ICC profile embedded ارجاع میدهد) همراه با propertyهای ویژهٔ PDF/VT - تزریقِ ویژهٔ PDF/VT شامل XMPهای
pdfvtid:GTS_PDFVTVersion، یعنی "PDF/VT-1" یا "PDF/VT-2" مطابق §6.3 Table 2، وpdfvtid:GTS_PDFVTModDateاست که مطابق §6.3 NOTE 1 باxmp:ModifyDateهمگام نگه داشته میشود، بهعلاوهٔ توضیحی از نوع pdfaExtension:schemas که هر دو namespaceِ pdfxid و pdfvtid را اعلام میکند، با NPES URIهایhttp://www.npes.org/pdfx/ns/id/وhttp://www.npes.org/pdfvt/ns/id/. trailer نیز یک array از/IDرا حمل میکند - افزوده شد (اضافه شده) TPdf.SaveAsPdfVTToStream for in-memory PDF/VT output, and a default-options shorthand
TPdf.SaveAsPdfVT(FileName)که PDF/VT-1 را با OutputIntent داخلی sRGB IEC61966-2.1 (3144 bytes، همان profile مورد استفادهٔ SaveAsPdfA / SaveAsPdfX) تولید میکند و/Trapped /False - افزوده شد (اضافه شده) TPdf.ValidatePdfVT: checks an open PDF for PDF/VT compliance markers (XMP
pdfvtid:GTS_PDFVTVersionandGTS_PDFVTModDatepresence, equality betweenpdfvtid:GTS_PDFVTModDateandxmp:ModifyDate, presence of the underlyingpdfxid:GTS_PDFXVersionidentifier, catalog/DPartRootpresence per §6.5,/OutputIntentswith/DestOutputProfile, trailer /ID, encryption status,xmp:CreateDate/ModifyDateوجود) و TPdfVTValidationResult را همراه با سطح انطباق شناساییشده و مجموعهٔ issueهای یافتشده برمیگرداند - افزوده شد (اضافه شده) ویژگی TPdf.PdfVTConformance: سطح انطباق سند بازِ فعلی را (pvc1، pvc2، pvcNone یا pvcUnknown) بدون نیاز به فراخوانی صریح ValidatePdfVT برمیگرداند
- typeهای جدید در unit تازهٔ FPdfPdfvt صادر شدند: TPdfVTConformance با مقدارهای pvcUnknown/None/1/2، TPdfVTTrappedState با مقدارهای ptvUnspecified/True/False/Unknown، و نیز TPdfVTValidationResult، TPdfVTValidationIssue و TPdfVTSaveOptions
- Document Part Hierarchy، یعنی tree مبتنی بر
DPartRoot/DPartمطابق §6.5، یک ساختار در سطح application است که به نگاشت recipient / page-range در workflow چاپ variable-data وابسته است. SaveAsPdfVT tree مربوط به DPart را سنتز نمیکند و ValidatePdfVT نبودِ/DPartRootرا بهصورتpvviMissingDPartRootsurface میکند تا فراخوانندهها بتوانند فایلهای PDF/VT را از یک گام جداگانه برای ساخت DPart عبور دهند. الزامهای PDF/X-4 در سطح محتوا، مانند font embedding، transparency، ICC managed color و ممنوعیتهای OPI / JavaScript / Reference XObject، همچنان بر عهدهٔ نویسندهٔ سند و pipeline رندر PDFium باقی میمانند - رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.34.0
- افزوده شد (اضافه شده) پشتیبانی از تزریق markerهای PDF/R-1 (ISO 23504-1:2020):
TPdf.SaveAsPdfRسند جاری را به یک فایل منطبق با PDF/R-1 ارتقا میدهد (زیرمجموعهٔ انتقال raster-image در PDF برای سندهای اسکنشده). این تزریق requirements سطح file-format را که میتوانند با post-processing اضافه شوند پوشش میدهد — comment یکتای%PDF-raster-1.0برای شناسایی نسخه که بین trailer dictionary و keywordstartxrefنوشته میشود (§5)، catalog dictionary که به white list بخش §6.3 تقلیل داده شده است (فقط Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata باقی میمانند)، Document Information Dictionary که به white list بخش §6.4.3 تقلیل داده شده است (فقط Creator / Producer / CreationDate / ModDate)، یک stream/Metadataدر catalog که چهار entry جدول 1 در §6.4.4 را حمل میکند (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate)، و یک آرایهٔ trailer/ID - افزوده شد (اضافه شده) TPdf.SaveAsPdfRToStream for in-memory PDF/R output, and a default-options shorthand
TPdf.SaveAsPdfR(FileName)for the common case - افزوده شد (اضافه شده) TPdf.ValidatePdfR: یک PDF باز را برای markerهای انطباق PDF/R-1 بررسی میکند (
%PDF-raster-x.yfooter comment, header version, /نوع /ObjStm absence, catalog white-list compliance, Info dictionary white-list compliance, XMP metadata stream presence, trailer /ID) and returns TPdfRValidationResult with the detected conformance level and the set of issues found - افزوده شد (اضافه شده) ویژگی TPdf.PdfRConformance: سطح انطباق سند بازِ فعلی را (prc1، prcNone یا prcUnknown) بدون نیاز به فراخوانی صریح ValidatePdfR برمیگرداند
- typeهای جدید در unit تازهٔ FPdfPdfr صادر شدند: TPdfRConformance، TPdfRValidationResult، TPdfRValidationIssue و TPdfRSaveOptions. مقدار پیشفرض
TPdfRSaveOptions.Defaultگزینههای StripInfoOptionalEntries و StripCatalogOptionalEntries را روی True میگذارد، بنابراین injector بهطور پیشفرض یک catalog و Info dictionary منطبق با §6.3 / §6.4.3 تولید میکند؛ فراخوانندهها میتوانند برای حفظ entryهای مبدأ این مقدارها را False بگذارند، هرچند در آن صورت خروجی دیگر آن clauseهای PDF/R را برآورده نمیکند ولی markerهای دیگر همچنان متصل میمانند - الزامهای سطح محتوا همچنان بر عهدهٔ PDF مبدأ باقی میمانند: ساختار Contents در سطح هر صفحه طبق §6.5.1، فرم MediaBox
[0 0 w h]طبق §6.5.3، محدودیتهای filter طبق §6.2.2 که فقط FlateDecode، CCITTFaxDecode bitonal و DCTDecode برای gray/RGB هشتبیتی را میپذیرند، نبودِ object streamها طبق §6.2.4 و چیدمان strip مطابق §6.6. این موارد با post-processing قابلاعمال نیستند، زیرا PDF/R از نظر ساختاری زیرمجموعهای بسیار سختگیرانهتر از دیگر استانداردهای PDF/x است و نیاز دارد byteهای مبدأ از ابتدا درست تولید شوند. ValidatePdfR issueهای قالب فایل را که این unit میتواند تشخیص دهد surface میکند؛ برای بررسی کاملِ سطح محتوا آن را با یک validator از TWAIN Working Group برای PDF/R جفت کنید - رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.33.0
- افزوده شد (اضافه شده) پشتیبانی از تزریق markerهای PDF/X (ISO 15930 family):
TPdf.SaveAsPdfXسند جاری را با post-processing و یک incremental update به فایل منطبق با PDF/X-1a:2001، PDF/X-3:2002 یا PDF/X-4 ارتقا میدهد. این تزریق requirements سطح file-format را که میتوانند با post-processing اضافه شوند پوشش میدهد — stream metadata XMP حاویpdfxid:GTS_PDFXVersion(وpdfxid:GTS_PDFXConformanceبرای PDF/X-1a / PDF/X-3) بههمراه description متناظرpdfaExtension:schemas، Document Information Dictionary بازنویسیشده با entryهای/GTS_PDFXVersion،/GTS_PDFXConformanceو/Trapped، catalog بهروزشده با/OutputIntents [N 0 R]که به یک OutputIntent dictionary با/S /GTS_PDFXو ICC profile embedded ارجاع میدهد، و یک آرایهٔ trailer/ID - افزوده شد (اضافه شده) TPdf.SaveAsPdfXToStream for in-memory PDF/X output, and a default-options shorthand
TPdf.SaveAsPdfX(FileName)که PDF/X-4 را با OutputIntent داخلی sRGB IEC61966-2.1 (3144 bytes، همان profile مورد استفاده توسط SaveAsPdfA) تولید میکند - افزوده شد (اضافه شده) TPdf.ValidatePdfX: یک PDF باز را برای markerهای انطباق PDF/X بررسی میکند (شناسهٔ XMP pdfxid و برابر بودن آن با مقدار Info-dictionary، توضیح extension schema در pdfxid، آرایهٔ /OutputIntents با /DestOutputProfile، وجود Title، trailer /ID، وضعیت encryption، و وجود xmp:CreateDate / xmp:ModifyDate) و TPdfXValidationResult را همراه با سطح شناساییشده و مجموعهٔ issueهای یافتشده برمیگرداند
- افزوده شد (اضافه شده) ویژگی TPdf.PdfXConformance: سطح انطباق سند بازِ فعلی را (pxc1a، pxc3، pxc4، pxcNone یا pxcUnknown) بدون نیاز به فراخوانی صریح ValidatePdfX برمیگرداند. رشتهٔ نسخهٔ XMP برای رفع ابهام میان سه سطح انطباق parse میشود
- typeهای جدید در unit تازهٔ FPdfPdfx صادر شدند: TPdfXConformance با مقدارهای pxcUnknown/None/1a/3/4، TPdfXTrappedState با مقدارهای ptUnspecified/True/False/Unknown، و نیز TPdfXValidationResult، TPdfXValidationIssue و TPdfXSaveOptions. مقدار پیشفرض
TPdfXSaveOptions.DefaultPDF/X-4 را با sRGB OutputIntent و/Trapped /Falseهدف میگیرد؛ فراخوانندهها میتوانندConformanceرا override کنند، برای workflowهای چاپ تجاری یک blob ازIccProfileDataبا CMYK بدهند، یاOutputCondition/OutputConditionIdentifier/RegistryNameرا طوری تغییر دهند که به یک entry مشخص از ICC characterisation registry اشاره کند، مانند FOGRA39 یا GRACoL2006_Coated1v2 - الزامهای سطح محتوا، مانند embed بودن همهٔ fontها، نداشتن JavaScript، نداشتن annotationهای قابلدید، ممنوعیت OPI و قواعد transparency برای PDF/X-1a / PDF/X-3 و موارد مشابه، همچنان بر عهدهٔ نویسندهٔ سند و pipeline رندر PDFium باقی میمانند. برای اعتبارسنجی کاملِ conformance، ValidatePdfX را با ابزار preflightی مانند callas pdfaPilot یا Ghent PDF Workgroup Output Suite جفت کنید
- رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.32.0
- افزوده شد (اضافه شده) پشتیبانی از تزریق markerهای PDF/E-1 (ISO 24517-1:2008):
TPdf.SaveAsPdfEسند جاری را با post-processing و یک incremental update به فایل منطبق با PDF/E-1 ارتقا میدهد. این تزریق requirements سطح file-format را که میتوانند با post-processing اضافه شوند پوشش میدهد — یک stream metadata XMP حاویpdfe:ISO_PDFEVersion = "PDF/E-1"بههمراه description متناظرpdfaExtension:schemas، Document Information Dictionary بازنویسیشده با entry اجباری/ISO_PDFEVersion (PDF/E-1)که در §5 لازم است، بلوکهای bridging میان Info و XMP که از ISO 19005-1 §6.7 از طریق §13.1 به ارث رسیدهاند (dc:title/dc:creator/dc:description/pdf:Producer/pdf:Keywords/xmp:CreateDate/xmp:ModifyDate/xmp:MetadataDate/xmp:CreatorTool)، و یک آرایهٔ trailer/IDکه در §6.2 لازم است - افزوده شد (اضافه شده) TPdf.SaveAsPdfEToStream for in-memory PDF/E output and a default-options shorthand
TPdf.SaveAsPdfE(FileName)for the common case - افزوده شد (اضافه شده) TPdf.ValidatePdfE: checks an open PDF for PDF/E-1 compliance markers (XMP pdfe:ISO_PDFEVersion presence and equality with the Info-dictionary value, pdfe extension schema description, Info-dictionary /ISO_PDFEVersion entry, trailer /ID, xmp:CreateDate / xmp:ModifyDate presence) and returns a structured result with the detected conformance level and the set of issues found
- افزوده شد (اضافه شده) ویژگی TPdf.PdfEConformance: سطح انطباق سند بازِ فعلی را (pec1، pecNone یا pecUnknown) بدون نیاز به فراخوانی صریح ValidatePdfE برمیگرداند
- typeهای جدید در unit تازهٔ FPdfPdfe صادر شدند: TPdfEConformance، TPdfEValidationResult، TPdfEValidationIssue و TPdfESaveOptions
- بازنویسی Info-dictionary برای مسیر PDF/x post-processing در PDFiumPas یک گام نخستین است؛ این مسیر object موجودِ Info را با همان object number بازنویسی میکند تا xref subsection و trailer و ارجاع /Info معتبر بمانند و هرگاه trailer مبدأ هیچ entryای برای /Info نداشته باشد یک Info dictionary تازه سنتز میکند. خود PDFium در هر خروجی SaveAs یک Info dictionary تولید میکند، بنابراین حالت رایج همان مسیر بازنویسی است
- الزامهای سطح محتوا، مانند font embedding، وجود ToUnicode CMapها و ممنوعیت XObjectها یا کلیدهای ExtGState یا formهای XFA و موارد مشابه، همچنان بر عهدهٔ نویسندهٔ سند باقی میمانند؛ SaveAsPdfE فقط markerهای قالب فایل را متصل میکند و محتوای صفحه را تغییر نمیدهد یا قابلیتهای ممنوع را حذف نمیکند
- رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.31.0
- افزوده شد (اضافه شده) پشتیبانی از تزریق markerهای PDF/UA-1 (ISO 14289-1:2014):
TPdf.SaveAsPdfUaسند جاری را با post-processing و یک incremental update به فایل منطبق با PDF/UA-1 ارتقا میدهد. این تزریق requirements سطح file-format را که میتوانند با post-processing اعمال شوند پوشش میدهد — یک stream metadata XMP حاویpdfuaid:part = 1بههمراه description متناظرpdfaExtension:schemas،dc:titleاجباری،/MarkInfo << /Marked true /Suspects false >>و/ViewerPreferences << /DisplayDocTitle true >>در catalog (فقط وقتی source هیچکدام را ندارد)،/Langدر catalog (وقتی caller یک BCP 47 tag بدهد)، و یک آرایهٔ trailer/ID - افزوده شد (اضافه شده) TPdf.SaveAsPdfUaToStream for in-memory PDF/UA output, and a default-options shorthand
TPdf.SaveAsPdfUa(FileName)for the common case - افزوده شد (اضافه شده) TPdf.ValidatePdfUa: checks an open PDF for PDF/UA-1 compliance markers (StructTreeRoot existence, /Lang, /MarkInfo /Marked true with /Suspects = false, /ViewerPreferences /DisplayDocTitle true, XMP pdfuaid:part identifier, dc:title presence, trailer /ID, encryption status) and returns a structured result with the detected conformance level and the set of issues found
- افزوده شد (اضافه شده) ویژگی TPdf.PdfUaConformance: سطح انطباق سند بازِ فعلی را (puc1، pucNone یا pucUnknown) بدون نیاز به فراخوانی صریح ValidatePdfUa برمیگرداند
- typeهای جدید در unit تازهٔ FPdfPdfua صادر شدند: TPdfUaConformance، TPdfUaValidationResult، TPdfUaValidationIssue و TPdfUaSaveOptions
- fieldهای Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language که در TPdfUaSaveOptions خالی گذاشته شوند، بهطور خودکار از FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage پر میشوند، بنابراین فراخوانندههای موجود میتوانند با یک خط ذخیره کنند
- الزامهای سطح محتوا، مانند کاملبودن tagging در StructTreeRoot، متن Alt برای Figure، وجود ToUnicode CMapها، font embedding و مانند آن، همچنان بر عهدهٔ نویسندهٔ سند باقی میمانند؛ SaveAsPdfUa markerهای قالب فایل را متصل میکند اما محتوای صفحه را تغییر نمیدهد و tag جدیدی هم اختراع نمیکند. ValidatePdfUa نبودِ StructTreeRoot را بهصورت
pvuaiMissingStructTreeRootsurface میکند تا فراخوانندهها بتوانند سندهای بدون tag را از یک pipeline جداگانه برای tagging عبور دهند - رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.30.0
- خروجی PDF/A-1b اکنون الزامهای ISO 19005-1، همراه با Cor.1:2007، را برای همارزی Document Information Dictionary و XMP برآورده میکند: هر entry از Info dictionary که PDFium در PDF پایه مینویسد در packetِ 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 اکنون همیشه یک array از /ID را در بر دارد، که یک الزام صریح در ISO 19005-1 6.1.3 است. وقتی TPdf.SaveAsPdfA سندی را پردازش میکند که مبدأ آن از قبل file identifier دارد، همان IDهای دائمی و متغیرِ 16-byte دوباره استفاده میشوند؛ در غیر این صورت یک ID جایگزینِ 16-byte و deterministic از byteهای مبدأ مشتق میشود
- XMP تزریقشده اکنون توضیحِ extension schema مربوط به pdfaid را که در ISO 19005-1 6.7.8، و سپس Cor.1، لازم شمرده شده در خود embed میکند؛ pdfaid نسبت به XMP Specification 2004 بهعنوان یک extension schema در نظر گرفته میشود، بنابراین همهٔ فایلهای conformant باید نام propertyها، نوع مقدارها و categoryهای آن را در containerِ pdfaExtension:schemas اعلام کنند
- TPdfASaveOptions پنج field اختیاریِ تازه بهدست آورد: Producer، CreationDate، ModDate، یعنی رشتههای تاریخ PDF در قالب “D:YYYYMMDDHHmmSSOHH'mm'”، و نیز DocumentId و InstanceId، یعنی رشتههای بایتیِ 16-byte برای arrayِ /ID در trailer. TPdf.SaveAsPdfA و SaveAsPdfAToStream fieldهای مفقود را بهطور خودکار از FPDF_GetMetaText و FPDF_GetFileIdentifier پر میکنند، بنابراین فراخوانندههای موجود بدون تغییر به کار خود ادامه میدهند
- TPdf.ValidatePdfA و TPdf.PdfAConformance اکنون سه issue اضافی را گزارش میکنند: pvaiMissingTrailerId، یعنی نبود /ID در trailer، pvaiMissingXmpDates، یعنی نبود xmp:CreateDate یا xmp:ModifyDate، و pvaiMissingExtensionSchema، یعنی نبودِ توضیح extension schema برای pdfaid
- نویسههای non-ASCII در Title، Author، Subject، Keywords، Creator و Producer اکنون در packetِ XMP بهصورت UTF-8 کدگذاری میشوند، چون XMP Specification به UTF-8 نیاز دارد، و این کار round-trip فرادادهٔ چندزبانه را از مسیر SaveAsPdfA حفظ میکند
- رشتهٔ TPdf.AboutInfo بهروزرسانی شد تا نسخهٔ فعلی محصول را گزارش کند
Version 1.29.0
- DLLهای همراهِ PDFium، برای Win32 و Win64 و هر دو ساخت استاندارد و V8، به snapshot بالادستیِ 2026-05-22 بهروزرسانی شدند و اصلاحهای بالادستی برای مسیرهای crash در FPDFText_SetText / FPDFText_SetCharcodes و همچنین چندین سختسازی داخلی از پروژهٔ PDFium را جذب کردند
- save flag جدیدِ PDFium با نام FPDF_SUBSET_NEW_FONTS در FPdfPageOps.pas در دسترس قرار گرفت تا فراخوانندههای FPDF_SaveAsCopy بتوانند برای text objectهای تازهافزودهشده درخواست subset شدن خودکارِ فایلهای font embedشده را بدهند. ثابتهای موجودِ FPDF_INCREMENTAL، FPDF_NO_INCREMENTAL و FPDF_REMOVE_SECURITY اکنون با فرم bit-shift بالادستی تعریف شدهاند و مقدار عددیِ قدیمیِ 3 برای سازگاری باینری با نام FPDF_REMOVE_SECURITY_DEPRECATED حفظ شده است
- افزوده شد (اضافه شده) enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) و فیلد متناظر m_FontLibraryنوع در FPDF_LIBRARY_CONFIG داخل FPdfView.pas، تا برنامههایی که PDFium را با rendererِ Skia مقداردهی اولیه میکنند بتوانند از آغاز font backend را انتخاب کنند
- signature مربوط به TFPDFPage_InsertObject برای انطباق با نسخهٔ بالادستی بهروزرسانی شد: تابع C اکنون بهجای void مقدار FPDF_BOOL برمیگرداند، یعنی TRUE در صورت موفقیت و FALSE وقتی page_object تهی باشد یا انتقال مالکیت شکست بخورد. فراخوانندههای موجود در PDFiumPas همچنان بدون تغییر compile میشوند، چون Delphi / FPC نادیده گرفتن return value یک تابع را مجاز میدانند
- رشتهٔ TPdf.AboutInfo اصلاح شد تا نسخهٔ فعلی محصول را گزارش کند؛ این رشته از زمان انتشارِ صرفاً مستنداتیِ v1.28.0 روی v1.27.0 مانده بود
Version 1.28.0
- مستندات درونصفحهای در سراسر مرجع API بهطور چشمگیری گسترش یافت: هر مدخل ویژگی، متد، رویداد و تابع سراسری اکنون یک توضیحات سهپاراگرافی، یک فهرست نکات، یک نمونه Delphi چندخطی و یک بلوک richer همچنین ببینید دارد — بیش از 200 صفحهای را که پیشتر کوتاه بودند پوشش میدهد، از جمله همه شمارندههای TPdf، خوانندههای فراداده، دسترسیهای فونت و نویسه، ویژگیهای سطح صفحه، recordهای اندکسدار، متدهای سطح سند و کل سطح state / display / event در TPdfView
- چیدمان راهنما با خط مبنای بصری losLab که در مرجع HotXLS استفاده میشود، تنظیم شد: اندازههای h1/h2 هماهنگ شدند، استایلهای شبکه ناوبری API در StyleSheet مشترک ادغام شدند و بازنویسیهای CSS درونصفحهای برای هر صفحه از Navigation.html حذف شدند
- مستندات اکنون همراه با یک اسکریپت کمکی (Docs\Build-Expand-Entries.ps1) ارائه میشود که غنیسازی صفحههای entry را از یک جدول داده واحد برای نگهداری تکرارپذیر بازتولید میکند
Version 1.27.0
- افزوده شد (اضافه شده) پشتیبانی از ایجاد PDF/A-1b:
TPdf.SaveAsPdfAهر سند باز را با post-processing و یک incremental update که یک stream metadata XMP، یک sRGB ICC OutputIntent و یک document catalog بهروز را inject میکند به یک فایل منطبق با PDF/A-1b تبدیل میکند — همه بدون نیاز به APIهای اضافهٔ DLL. روی هر platformی که PDFiumPas پشتیبانی میکند کار میکند - افزوده شد (اضافه شده) TPdf.SaveAsPdfAToStream for in-memory PDF/A output
- افزوده شد (اضافه شده) TPdf.ValidatePdfA: یک PDF باز را برای انطباق PDF/A بررسی میکند (markerهای XMP pdfaid، OutputIntent با ICC profile تعبیهشده، encryption) و یک نتیجهٔ ساختیافته همراه با سطح انطباق شناساییشده و مجموعهای از issueهای مشخصِ یافتشده برمیگرداند
- افزوده شد (اضافه شده) ویژگی TPdf.PdfAConformance: سطح انطباق سند بازِ فعلی را (pac1b، pac1a، pac2b، pac3b، pacNone یا pacUnknown) بدون نیاز به فراخوانی صریح ValidatePdfA برمیگرداند
- typeهای جدید صادر شدند: TPdfAConformance، TPdfAValidationResult، TPdfAValidationIssue و TPdfASaveOptions در unit جدید FPdfPdfa.pas
- SaveAsPdfA از یک ICC profile سفارشی از طریق TPdfASaveOptions.IccProfileData پشتیبانی میکند؛ اگر این مقدار خالی بماند، profile داخلیِ sRGB IEC61966-2.1 از HP/Microsoft با اندازهٔ 3144 bytes بهصورت خودکار استفاده میشود
- Replaced the monolithic HTML reference with a restructured web help system: 302 individual API entry pages (one per property, method, event, and global function) covering TPdf and TPdfView, each with a full description, parameter table, Delphi code example, and همچنین ببینید links
- افزوده شد (اضافه شده) Navigation.html: یک فهرست جامع ناوبری API در یک صفحه که در شش بخش سازماندهی شده است (ویژگیها/متدها/رویدادهای TPdf، ویژگیها/متدها/رویدادهای TPdfView، توابع سراسری) با یک شبکه flex پنجستونه برای مرور سریع
- TPdf.html و TPdfView.html دوباره بهصورت صفحههای نمای کلی فشردهٔ مؤلفه بازسازی شدند و بخشهای مرجع نوعها (انواع, Constants, Global Variables) را حفظ کردند و برای همه اعضا به صفحههای entry جداگانه پیوند میدهند
- افزوده شد (اضافه شده) جستجوی تماممتن با قدرت Search.js و تطبیق افزایشی سمت کاربر در سراسر همه 312 صفحهٔ فهرستشده
- همه نوارهای ناوبری در کل سایت به Navigation.html بهروزرسانی شدند
Version 1.26.0
- افزوده شد (اضافه شده) Demo/Lazarus/BatchExport, the LCL port of the v1.14.0 Delphi BatchExport demo. Same feature set: multi-file PDF -> JPG export with per-file overall progress, per-page current progress, DPI / quality / password inputs, and a cooperatively-cancellable batch backed by IPdfCancellationToken. The output folder is opened in the platform file manager when extraction finishes successfully
Version 1.25.0
- افزوده شد (اضافه شده) استفادهٔ مجدد از Form XObject page در TPdf، که گردشکارهای watermark، template overlay و “stamp one page onto many” را ممکن میکند:
CreateXObjectFromPageیک handle قابل استفادهٔ مجدد از هر صفحهٔ یک سند دیگر میسازد؛InsertFormObjectFromXObjectیک copy از صفحهٔ wrapped را داخل صفحهٔ جاری insert میکند.FPDF_PAGEOBJECTدرجشده را برمیگرداند تا caller بتواند آن را باFPDFPageObj_SetMatrixو helperهایTPdfMatrixv1.9.0 position / scale / rotate کند - class جدیدِ Pascal با نام TPdfXObject handle مربوط به FPDF_XOBJECT در PDFium را wrap میکند و آن را در destructor خود بهطور خودکار میبندد، بنابراین مراسم دستیِ FPDF_CloseXObject حذف میشود
- مجموعههای بازآزمایی Delphi و Lazarus به 147 مورد برای هرکدام، و مجموعهٔ C++Builder به 123 مورد گسترش یافتند و این موارد را پوشش میدهند: handle creation and page-object insertion contracts
Version 1.24.0
- افزوده شد (اضافه شده) TPdf.RenderPageProgressive — a cancellable variant of RenderPage that drives PDFium’s progressive rendering loop and polls a v1.7.0 IPdfCancellationToken between iterations, so long high-DPI renders can abort mid-page instead of blocking the caller until completion
- برمیگرداند a TPdfProgressiveStatus value: prsDone, prsCancelled, or prsFailed. Pass AToken = nil to render to completion without ever pausing (no possibility of prsCancelled)
- همان مسیر سریعِ zero-copy معرفیشده در v1.21.0 را به کار میگیرد؛ PDFium مستقیماً داخل DIB مربوط به TBitmap مقصد رندر میکند و اگر DIB قابل wrap شدن نباشد همان fallback قدیمی اعمال میشود
- مجموعههای بازآزمایی Delphi و Lazarus به 145 مورد برای هرکدام، و مجموعهٔ C++Builder به 121 مورد گسترش یافتند و این موارد را پوشش میدهند: nil-token (completes), pre-cancelled token (prsCancelled), and pixel-equivalence with sync RenderPage on a live token
Version 1.23.0
- افزوده شد (اضافه شده) six new TPdfView methods that expose PDFium’s form-widget text selection and Undo/Redo to applications: GetSelectedFormText returns the currently selected text inside the focused form widget; SelectAllFormText selects every character; FormUndo / FormRedo / FormCanUndo / FormCanRedo drive the focused widget’s edit history. The underlying PDFium APIs were already bound but had no high-level entry point. All six short-circuit safely when the view is inactive or the document has no AcroForm widget focused
- مجموعههای بازآزمایی Delphi و Lazarus به 142 مورد برای هرکدام، و مجموعهٔ C++Builder به 119 مورد گسترش یافتند و این موارد را پوشش میدهند: the no-form-no-focus contract for every new method
Version 1.22.0
- افزوده شد (اضافه شده) page composition wrappers to TPdf: ImportPagesByIndex takes a zero-based index array to copy specific pages from a source document; ImportNPagesToOne returns a brand-new TPdf whose pages are N-up composites of this document; MovePages reorders pages in place. The underlying PDFium APIs were already bound but had no Pascal-friendly entry point
- ImportPagesByIndex یک array خالی را میپذیرد تا همهٔ صفحههای مبدأ را import کند، که معادل پاس دادن nil در سطح C ABI است
- مجموعههای بازآزمایی Delphi و Lazarus به 136 مورد برای هرکدام، و مجموعهٔ C++Builder به 115 مورد گسترش یافتند و این موارد را پوشش میدهند: subset import, whole-document import, page reorder, and N-up composite
Version 1.21.0
- کارایی رندر با انتقال TPdf.RenderPage / TPdf.RenderTile و helperهای متناظر در TPdfView به یک مسیر خروجیِ zero-copy بهتر شد. PDFium اکنون بهجای نوشتن در یک buffer داخلی و سپس کپی سطربهسطر، مستقیماً در buffer مربوط به DIB در TBitmap مقصد مینویسد و در هر رندر یک کپی حافظه به اندازهٔ width x height x 4 bytes را حذف میکند. این بهبود در DPIهای بالا، مانند panelهای thumbnail، export با کیفیت چاپ و exportهای batch، بیشترین اثر را دارد
- مسیر قدیمیِ per-scanline بهعنوان fallback ایمنی برای حالت بعیدی که DIB مقصد قابل wrap شدن نباشد حفظ شده است، مانند ابعاد افراطی، stride نامعمول یا OOM. رفتار بین این دو مسیر از نظر byte کاملاً یکسان است و فقط fallback کندتر عمل میکند
- مجموعههای بازآزمایی Delphi و Lazarus به 132 مورد برای هرکدام، و مجموعهٔ C++Builder به 112 مورد گسترش یافتند و این موارد را پوشش میدهند: caller-bitmap pf32bit upgrade, dimensions round-trip, and a large-bitmap stride sanity test
Version 1.20.0
- افزوده شد (اضافه شده) هایلایت نتیجهٔ جستجو در TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) صفحهٔ جاری نما را اسکن میکند و تعداد matchهای یافتشده را برمیگرداند و در هر redraw یک mask از نوع HighlightColor روی هر match میکشد. ClearHighlight هایلایتها را حذف میکند؛ با رفتن نما به صفحهای دیگر، این ها بهطور خودکار پاک میشوند چون matchها به هر صفحه وابستهاند
- HighlightColor بهصورت پیشفرض clYellow است و منتشر شده تا برنامهها بتوانند رنگ highlight را با پالت UI خود هماهنگ کنند
- مجموعههای بازآزمایی Delphi و Lazarus به 129 مورد برای هرکدام، و مجموعهٔ C++Builder به 109 مورد گسترش یافتند و این موارد را پوشش میدهند: default color, color round-trip, “real fixture word matches” against the samplepdf string, and the “missing word returns zero matches” contract
Version 1.19.0
- افزوده شد (اضافه شده) ویژگی FitMode در TPdfView با چهار مقدار: pfmNone (zoom دستی)، pfmActualSize (100%)، pfmFitPage (کل صفحه در viewport جا میشود) و pfmFitWidth (عرض صفحه با عرض viewport برابر میشود). fit mode فعال بهطور خودکار در Resize و هنگام تغییر صفحهٔ جاری دوباره اعمال میشود، بنابراین سندهای بلند با اندازهٔ صفحهٔ mixed در قاب درست باقی میمانند
- تنظیم مستقیم Zoom حالت fit فعال را لغو میکند، یعنی FitMode به pfmNone برمیگردد، و این رفتار با قرارداد رایج viewerهای PDF همخوان است که وارد کردن یک مقدار zoom باعث خروج از Fit Page / Fit Width میشود
- مقدار پیشفرض pfmNone است، بنابراین برنامههای موجود رفتار zoom صریح خود را حفظ میکنند
- مجموعههای بازآزمایی Delphi و Lazarus به 124 مورد برای هرکدام، و مجموعهٔ C++Builder به 106 مورد گسترش یافتند و این موارد را پوشش میدهند: default value, mode round-trip, fit-page producing a real zoom on a loaded document, and manual-zoom-cancels-fit-mode
Version 1.18.0
- افزوده شد (اضافه شده) property
PageColorدر TPdfView، که پسزمینهٔ PDF page رندرشده را ازColorcontrol اطراف جدا میکند. مقدار پیشفرضclWhiteاست، بنابراین PDF pageها اکنون صرفنظر از theme برنامهٔ میزبان به رنگ paper-white رندر میشوند. viewerهای dark-mode اکنون میتوانند ناحیهٔ scroll را تیره نگه دارند و در عین حال خود PDF page را سفید (یا هر رنگی که برنامه انتخاب میکند) بگذارند - تغییر رفتاری: برنامههایی که قبلاً برای تغییر رنگ صفحهٔ PDF از TPdfView.Color استفاده میکردند باید از PageColor استفاده کنند. تجربهٔ پیشفرض برای حالت رایج، یعنی صفحههای سفید روی پسزمینهٔ themeشدهٔ control، بدون هیچ تغییر کدی بهتر میشود
- مجموعههای بازآزمایی Delphi و Lazarus به 120 مورد برای هرکدام، و مجموعهٔ C++Builder به 103 مورد گسترش یافتند و این موارد را پوشش میدهند: default value and color round-trip
Version 1.17.0
- افزوده شد (اضافه شده) user-input lock-down toggles to TPdfView so applications embedding the viewer in kiosks, preview panes, or read-only contexts can disable navigation gestures without subclassing: AllowUserPageChange controls the new PgUp / PgDn / Ctrl+خانه / Ctrl+End keyboard shortcuts; ChangePageOnMouseScrolling controls the new wheel-up / wheel-down page jumps; AllowUserTextSelection is reserved for the future mouse-drag text-selection path. All three default to True so existing applications upgrade with no behavioral change
- ناوبری صفحه با mouse wheel از Ctrl+wheel عبور میکند تا برنامهها بتوانند Ctrl+wheel را برای zoom رزرو نگه دارند
- مجموعههای بازآزمایی Delphi و Lazarus به 118 مورد برای هرکدام، و مجموعهٔ C++Builder به 101 مورد گسترش یافتند و این موارد را پوشش میدهند: default values and toggle round-trip
Version 1.16.2
- پوشش بازآزمایی TPdfView برای کلیک روی annotation link وقتی صفحهٔ viewer با صفحهٔ TPdf مرتبط متفاوت است گسترش یافت و از یک مسیر واقعیِ کلیک ماوس در حالت headless در Delphi، Lazarus و C++Builder استفاده شد
- مجموعههای Delphi و Lazarus اکنون هرکدام 114 مورد اجرا میکنند و C++Builder اکنون 99 مورد اجرا میکند
Version 1.16.1
- رفع شد (رفع شده) رسیدگی به link-click در TPdfView طوری اصلاح شد که actionهای خودکار annotation و web-link از صفحهای که اکنون توسط viewer نمایش داده میشود استفاده کنند، حتی وقتی component مربوط به TPdf روی صفحهای دیگر قرار دارد
- TPdfThumbnailView در برابر ارجاعهای Pdf معلق هنگام نابود شدن componentِ پیوندخوردهٔ TPdf مقاومتر شد
- افزوده شد (اضافه شده) thumbnail-reference lifetime regression coverage; the Delphi and Lazarus suites now run 113 cases each, and C++Builder now runs 98 cases
- README، مستندات آزمون، محتوای جستوجو و index در HTML Help و خروجیهای تولیدشدهٔ بستهٔ C++ با بهروزرسانیهای یکپارچهسازی از v1.7.0 تا v1.16.0 همگام شدند
Version 1.16.0
- افزوده شد (اضافه شده) a new Delphi PrintDialog demo (Demo/Delphi/PrintDialog) that focuses on N-up printing (1 / 2 / 4 / 9 pages per sheet) with odd / even page filtering, grayscale rendering, and optional 1-pixel cell borders. It is a deliberate small companion to the existing PrintPDF demo, which already covers preview, recent files, zoom, and scaling
Version 1.15.0
- افزوده شد (اضافه شده) یک component جدید TPdfThumbnailView (واحد FPdfThumbnail) که برای هر ردیف یک thumbnail از صفحه را در یک side panel قابل scroll با hover و highlight انتخاب، بههمراه navigation با click-to-go، رندر میکند. برای قرار گرفتن کنار TPdfView طراحی شده تا کاربران نهایی بتوانند یک سند بلند را صفحهبهصفحه مرور کنند
- این component در برگهٔ palette مربوط به losLab در کنار TPdf و TPdfView ثبت میشود؛ propertyهای کلیدی آن عبارتاند از Pdf، CurrentPageIndex، ThumbnailWidth، ThumbnailHeight، TextColor، HoverColor، SelectionColor، BorderColor و رویداد OnPageClick
- مجموعههای بازآزمایی Delphi و Lazarus به 112 مورد برای هرکدام، و مجموعهٔ C++Builder به 97 مورد گسترش یافتند و این موارد را پوشش میدهند: defaults, thumbnail-size round-trip, extreme-value clamping, color round-trip, and event handler assignment
Version 1.14.0
- افزوده شد (اضافه شده) a new Delphi BatchExport demo (Demo/Delphi/BatchExport) showing how to convert many PDF files to JPG in one pass using TPdf.LoadCustomDocument for streaming load, IPdfCancellationToken for cooperative cancellation, and per-file overall + per-page progress bars. The demo uses one TPdf instance per file (PDFium itself is not thread safe) and opens the output folder in Explorer when extraction finishes successfully
Version 1.13.0
- افزوده شد (اضافه شده) an async-rendering UI overlay to TPdfView through three new properties: Asyncرندر, LoadingText, and LoadingColor. When Asyncرندر is True the single-page paint path draws a small “Loading...” indicator over the rendered page so applications using their own worker for long renders share a consistent visual affordance
- مقادیر پیشفرض رفتار موجود را حفظ میکنند: Asyncرندر برابر False است، بنابراین برنامههایی که opt in نمیکنند هیچ تغییر بصری نمیبینند
- مستندات روشن میکنند که خود PDFium thread safe نیست؛ سپردن واقعیِ رندر به یک worker مستلزم آن است که فراخواننده برای هر worker یک TPdf جدا نگه دارد، و demo آتیِ batch-export این الگو را نشان میدهد
- مجموعههای بازآزمایی Delphi و Lazarus به 106 مورد برای هرکدام، و مجموعهٔ C++Builder به 93 مورد گسترش یافتند و این موارد را پوشش میدهند: default values and the three-property round-trip
Version 1.12.0
- افزوده شد (اضافه شده) click-driven link handling to TPdfView. The new LinkOptions property controls automatic behavior for the four PDF link action types: goto (page jump), URI (ShellExecute), launch (ShellExecute), and embedded GotoR (reserved). Defaults enable loAutoGoto and loAutoOpenURI; loAutoLaunch and loAutoEmbeddedGoto stay off so a stray click cannot run an arbitrary program
- افزوده شد (اضافه شده) OnAnnotationLinkClick and OnWebLinkClick events that fire before any automatic action and let applications inspect the link, mark it Handled, or redirect it (for example, to a security prompt)
- تشخیص کلیک روی link فقط زمانی اجرا میشود که gesture یک click باشد نه drag، و از یک anchor تازه برای MouseDown استفاده میکند تا gestureهای panning همچنان بدون تغییر از مسیر فعلیِ scroll عبور کنند
- مجموعههای بازآزمایی Delphi و Lazarus به 102 مورد برای هرکدام، و مجموعهٔ C++Builder به 91 مورد گسترش یافتند و این موارد را پوشش میدهند: default LinkOptions, set round-trip, and event-handler assignment
Version 1.11.0
- افزوده شد (اضافه شده) visual polish to TPdfView: PageShadowSize, PageShadowColor, and PageBorderColor properties paint an optional drop shadow under the page rectangle and a one-pixel border around it. Defaults preserve the previous flat look (PageShadowSize = 0; border is drawn in the default clBlack but blends into the default white background until callers change the colors)
- افزوده شد (اضافه شده) ویژگی SmoothScroll بهعنوان یک flag اختیاری برای animation افزایشی scroll در آینده؛ این ویژگی امروز round-trip میشود و طوری wire شده که برنامهها بتوانند این preference را persist کنند، در حالی که سمت رندر هنوز از رفتار فوری scroll موجود استفاده میکند
- مجموعههای بازآزمایی Delphi و Lazarus به 98 مورد برای هرکدام، و مجموعهٔ C++Builder به 89 مورد گسترش یافتند و این موارد را پوشش میدهند: default values, property round-trip, and the negative-shadow-size clamp
Version 1.10.0
- افزوده شد (اضافه شده) درج مستقیم image از طریق overloadهای جدید TPdf.AddImage و TPdfView.AddImage که بهجای TPicture موجود، یا مسیر فایل یا TBitmap میگیرند. AddImage(FileName) هر فرمتی را که در واحدهای graphics مربوط به VCL یا LCL ثبت شده باشد (BMP، PNG از طریق واحد PngImage، JPG و غیره) تشخیص میدهد و از همان pipeline AddPicture عبور میکند تا رفتار یکسان بماند
- AddImage(TBitmap) واسطهٔ TPicture را دور میزند و کار فراخوانندههایی را که از قبل یک TBitmap از مسیر رندر یا تولید batch در اختیار دارند سادهتر میکند
- مجموعههای بازآزمایی Delphi و Lazarus به 92 مورد برای هرکدام، و مجموعهٔ C++Builder به 84 مورد گسترش یافتند و این موارد را پوشش میدهند: bitmap insertion, page-object bounds, nil bitmap rejection, and BMP file loading
Version 1.9.0
- افزوده شد (اضافه شده) پشتیبانی سطحبالا از transformation matrix از طریق class جدید
TPdfMatrixدر unitFPdfMatrix.TPdfMatrix،FS_MATRIXدر PDFium را با یک API شیءگرا برای Translate، Scale، Rotate، HorizontalFlip، VerticalFlip، CentralFlip، Skew و Multiply wrap میکند و برای ترکیب transformها پیش از سپردن آنها بهFPDFPageObj_SetMatrixو APIهای مشابه PDFium مناسب است - TPdfMatrix.Multiply اکنون پیش از محاسبهٔ مقدارهای سطر جدید، هر شش عنصر matrix را بهدرستی snapshot میگیرد و یک issue نهفته را برطرف میکند که در آن پیادهسازیهای جایگزینِ Pascal در همان فراخوانی elementهای قبلی را overwrite میکردند و برای هر composition فراتر از translation خالص نتیجهٔ نادرست میدادند
- مجموعههای بازآزمایی Delphi و Lazarus به 88 مورد برای هرکدام، و مجموعهٔ C++Builder به 81 مورد گسترش یافتند و این موارد را پوشش میدهند: identity, reset, translate / scale / flip, post-multiplicative composition order, and the Multiply regression case
Version 1.8.0
- افزوده شد (اضافه شده) بارگذاری on-demand stream از طریق method جدید
TPdf.LoadCustomDocument(AStream, AOwnsStream)و class کمکیTPdfStreamAdapter، با پشتیبانیFPDF_LoadCustomDocumentدر PDFium. PDFium اکنون blockها را فقط وقتی نیاز باشد ازTStreamدادهشده میخواند، بنابراین PDFهای بسیار بزرگ یا remote دیگر به یک copy اولیه در حافظه نیاز ندارند - افزوده شد (اضافه شده) optional stream ownership: passing AOwnsStream = True hands the TStream’s lifetime to TPdf, which frees it when UnloadDocument runs
- مجموعههای بازآزمایی Delphi و Lazarus به 79 مورد برای هرکدام، و مجموعهٔ C++Builder به 75 مورد گسترش یافتند و این موارد را پوشش میدهند: streaming load via TFileStream, owned-stream cleanup, and the externally-owned-stream survives-unload contract
Version 1.7.0
- افزوده شد (اضافه شده) cooperative async cancellation primitives in the new FPdfAsync unit, exposing IPdfCancellationToken / IPdfCancellationTokenSource and a reusable PdfNoCancellationToken singleton so long-running rendering and export workflows can support clean cancel-from-UI semantics
- افزوده شد (اضافه شده) a lightweight TPdfFuture<T> helper that runs a worker on a background thread and posts the TPdfFutureResult<T> envelope back to the main thread, distinguishing success, cancellation, and failure cases
- مجموعههای بازآزمایی Delphi و Lazarus به 76 مورد برای هرکدام، و مجموعهٔ C++Builder به 73 مورد گسترش یافتند و پوشش مشترکِ وضعیت cancellation، cancel از نوع idempotent، fan-out در callback و registration پس از cancel را افزودند
Version 1.6.10
- افزوده شد (اضافه شده) high-level TPdf.PrintPageRanges access to the PDF viewer preference print page range, returning one-based page ranges for application code
- افزوده شد (اضافه شده) TPdf.SetFormFieldFlags / SetFormFieldFlagsAt and matching TPdfView helpers so applications can update AcroForm field flags through the public API, including password and multi-select flag coverage
- پوشش ABI در bindingهای PDFium برای FPDF_DWORD با اندازهٔ Windows، callbackهای FPDF_FILEACCESS و fieldهای slot در V8 embedder سختگیرانهتر و مقاومتر شد
Version 1.6.9
- افزوده شد (اضافه شده) bindingهای پایینسطح رندر Skia برای APIهای تازه exportشدهٔ FPDF_RenderPageSkia و FPDF_FFLDrawSkia در DLLهای bundled استاندارد و V8 PDFium
- بررسیهای پوشش binding عمومی گسترش یافتند تا بارگذاری DLLهای استاندارد و V8 اکنون entry pointهای رندر Skia را نیز در کنار probeهای موجود برای قابلیتهای V8/XFA اعتبارسنجی کند
Version 1.6.8
- افزوده شد (اضافه شده) TPdf.SetTextPositions and TPdfSingleArray to set per-character positions on existing text objects through the newly exported FPDFText_SetPositions API
- FPDFText_SetPositions برای DLLهای همراهِ فعلیِ PDFium به یک binding اجباری ارتقا یافت، و همزمان تأیید شد که entry pointهای رندر Skia همچنان در دسترس نیستند زیرا DLLها هنوز آنها را export نمیکنند
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 65 مورد برای هرکدام گسترش یافتند و پوشش این موارد را افزودند: text-position coverage
Version 1.6.7
- افزوده شد (اضافه شده) high-level TPdf access to document JavaScript name-tree actions, returning action names and scripts through JavaScriptAction and JavaScriptActions
- افزوده شد (اضافه شده) TPdf.FileIdentifier to read permanent and changing trailer IDs as binary TBytes without the PDFium terminator byte
- افزوده شد (اضافه شده) TPdf.PageBox، GetPageBox و SetPageBox برای MediaBox، CropBox، BleedBox، TrimBox و ArtBox در صفحهٔ جاری
- تأیید شد که DLLهای همراهِ فعلیِ PDFium در زمان اجرا فقط entry pointهای رندر Skia را در دسترس نمیگذارند، چون آن exportها اصلاً وجود ندارند
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 64 مورد برای هرکدام گسترش یافتند و پوشش این موارد را افزودند: document JavaScript, trailer ID, and page-box coverage
Version 1.6.6
- افزوده شد (اضافه شده) پشتیبانی runtime برای DLL bundled و دارای V8ِ PDFium. تنظیم EnableV8Engine پیش از بارگذاری اکنون pdfium.v8.dll را از tree DLLs\Win32 یا DLLs\Win64 انتخاب میکند و وقتی DLL بارگذاریشده آنها را فراهم کند bindingهای فقط V8/XFA را در دسترس میگذارد
- افزوده شد (اضافه شده) V8FeaturesAvailable، XfaBStrHelpersAvailable، GetRecommendedV8Flags و bindingهای اختیاری پایینسطح برای FPDF_BStr_*، FPDF_GetRecommendedV8Flags و FPDF_GetArrayBufferAllocatorSharedInstance
- FPDFText_SetPositions اختیاری شد تا PDFiumPas بتواند با DLLهای PDFiumای که آن setter آزمایشیِ موقعیت متن را export نمیکنند همچنان بارگذاری شود
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 61 مورد برای هرکدام گسترش یافتند و پوشش این موارد را افزودند: standard-DLL and V8-DLL capability coverage
Version 1.6.5
- افزوده شد (اضافه شده) tagged PDF structure-tree inspection through TPdf.StructureElements and TPdfView.StructureElements, including element type, title, alternate text, actual text, expansion text, language, marked-content IDs, child counts, and attribute counts
- افزوده شد (اضافه شده) Windows PDFium print mode selection through TPdfPrintMode and SetPdfPrintMode, covering EMF, text-only, PostScript, pass-through, image-mask, and نوع 42 print modes
- افزوده شد (اضافه شده) low-level bindings for the remaining standard-DLL PDFium public exports covering JavaScript actions, annotation form flags/font color, page-object active state, indexed insertion, content-mark float values, image ICC profile data, form-object removal, and text positions
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 59 مورد برای هرکدام گسترش یافتند و پوشش این موارد را افزودند: tagged PDF structure-tree, print mode, and public export binding coverage
Version 1.6.4
- demoهای Delphi، C++Builder و Lazarus بهروزرسانی شدند تا PDFهای تولیدشده، متنها و تصویرهای exportشده و پوشههای خروجیِ batch را پس از ایجاد موفق بهطور خودکار باز کنند
Version 1.6.3
- مجموعههای بازآزمایی همترازِ Delphi، C++Builder و Lazarus به 56 مورد برای هرکدام گسترش یافتند و پوشش این موارد را افزودند: TPdfView GUI coverage for fit-zoom helpers, device/page coordinate round-trips, character hit-testing, and mouse panning through hidden-window viewer controls
- fixtureهای TPdfView اکنون از یک اندازهٔ صریح برای viewer و subclassهایی مخصوصِ test استفاده میکنند که handlerهای محافظتشدهٔ mouse را تمرین میدهند و در عین حال مجموعهها را کاملاً headless نگه میدارند
Version 1.6.2
- رفع شد (رفع شده) TPdf.AddPage(0, ...) so the inserted first page becomes the active page immediately. Existing sample code keeps working, while PageNumber now reports a valid one-based page after insertion
- نسخهٔ بستهٔ Lazarus همگام شد و مجموعههای بازآزماییِ همترازِ Delphi، C++Builder و Lazarus به 52 مورد برای هرکدام گسترش یافتند
Version 1.6.1
- رفع شد (رفع شده) an incorrect minimum-version requirement in the v1.6.0 PDF version compliance validator: the SetState action was reclassified from PDF 1.5 down to PDF 1.2, matching PDF 1.2 Reference 6.9.9. PDF 1.3 / 1.4 SaveAs targets that contain SetState actions now save correctly rather than being rejected
- افزوده شد (اضافه شده) بررسیهای واژگانی PDF 1.2 مطابق همان بخش spec: actionهای Sound، Movie و NOP بههمراه Separation color space اکنون وقتی نسخهٔ هدف انتخابشده قدیمیتر از PDF 1.2 باشد مسدود میشوند
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus با افزودن یک آزمون پذیرشِ مثبت برای PDF 1.4 SetState که مرز اصلاحشده را تثبیت میکند، به 50 مورد برای هرکدام گسترش یافتند
Version 1.6.0
- Hardened explicit PDF 1.0 through PDF 1.7 SaveAs targets with a full version-feature validator that covers the entire PDF 1.1 through ISO 32000-1 feature timeline. The validator now blocks saves that contain dictionary entries, filter names, annotation subtypes, action types, fonts, color spaces, or encryption parameters introduced after the chosen target version. نمونهها: 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 annotations, AES and AES-256 encryption (CFM AESV2 / AESV3), Perms / Legal / Requirements / Needsرندر catalog entries, and version-gated actions such as JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView are all rejected when the target PDF version cannot represent them
Version 1.5.13
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 49 مورد برای هرکدام گسترش یافتند و پوشش مستقیمِ رد شدنِ فضاهای رنگیِ ICCBased، MarkInfo در Tagged PDF، annotationهای Polygon، رمزگذاری AES از نوع V2 و annotationهای Redact را بهترتیب در برابر هدفهای PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 افزودند
Version 1.5.12
- رفع شد (رفع شده) SaveAs post-processing for incremental catalog rewrites. PDFiumPas now validates the latest repeated indirect object, so existing catalog /Version overrides are replaced correctly when saving to an explicit older PDF target version
- مجموعههای بازآزمایی Delphi، C++Builder و Lazarus به 44 مورد برای هرکدام گسترش یافتند و پوشش مستقیمِ جایگزینیِ catalog /Version کهنه، نرمالسازیِ نسخهٔ catalog در PDF 1.4 و رد شدنِ ویژگیهای transparency و portable-collection را وقتی نسخهٔ هدفِ PDF نمیتواند آنها را نمایش دهد افزودند
Version 1.5.11
- خروجی versionedِ SaveAs برای هدفهای صریحِ PDF 1.3، 1.4، 1.5، 1.6 و 1.7 سختگیرانهتر و مقاومتر شد. PDFiumPas اکنون markerهای نسخهٔ catalog را نرمالسازی میکند، OpenAction پیشفرضِ Fit Height را از نظر نسخه ایمن نگه میدارد و وقتی نسخهٔ هدفِ انتخابشده قادر به نمایش قابلیتهای جدیدترِ PDF نیست آنها را رد میکند
- افزوده شد (اضافه شده) Delphi, C++Builder, and Lazarus regression coverage that saves and reloads explicit PDF 1.3 through PDF 1.7 files, verifying the final header, the default Fit Height OpenAction, and the reported PDF version
Version 1.5.10
- با افزودن smoke testهای TPdfView در هر سه مجموعهٔ IDE با نام Tests.PdfView از option B در spec به option C رفتیم. هر مجموعه یک TForm والدِ پنهان میسازد، در سمت Pascal از TForm.CreateNew و در سمت C++Builder از
new TForm(NULL, 0)، سپس TPdfView را دوباره parent میکند، Active := True را تنظیم میکند و بعد سطح round-trip مربوط به PageCount، مقدار پیشفرض PageNumber، Zoom، Rotation، DisplayMode و همخوانیِ View.Text با TPdf.Text زیربنایی را اعتبارسنجی میکند. هر مجموعهٔ IDE اکنون 39 مورد اجرا میکند
Version 1.5.9
- با افزودن render smoke testها در هر سه مجموعهٔ IDE از option A در spec به option B رفتیم. هر مجموعهٔ Tests.Render، TPdf.RenderPage را روی sample.pdf فراخوانی میکند و بهجای checksumهای byte-by-byte سه signal مقاوم را بررسی میکند: bitmap بازگشتی دقیقاً با اندازهٔ pixelِ درخواستی برابر باشد، اندازههای درخواستیِ متفاوت، مانند 200x100 و 64x256، bitmapهای منطبق تولید کنند، و صفحهٔ رندرشده دستکم 95% پسزمینهٔ سفید و حداقل 50 pixelِ غیرسفید، و در Lazarus حداقل 20 pixelِ غیرسفید، برای متنِ antialiased داشته باشد. هر مجموعهٔ IDE اکنون 33 مورد اجرا میکند
Version 1.5.8
- Closed out the original A(2) test plan groups by adding seven more regressions per IDE: TPdf.CreateAnnotation building an anHighlight annotation plus a SaveAs/LoadDocument round-trip, the AcroForm read path on Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (Formنوع is ftAcroForm, FormFieldCount > 0, FlattenAllPages drops the fields to zero), and quiet read-path coverage for Bookmarks, LinkAnnotationCount, and WebLinkCount on a document that has none of those features. Each IDE suite now runs 30 cases
Version 1.5.7
- مجموعههای Delphi با DUnitX، Lazarus با FPCUnit و C++Builder با GoogleTest با هفت regression تازه برای هر IDE گسترش یافتند: PdfVersion، PageRotation، جستوجوی زیررشتهای با TPdf.FindFirst / FindNext، همخوانیِ CharacterOrigin / CharacterRectangle با مبدأ AddText، ثبت CreateAttachment همراه با یک round-trip از SaveAs/LoadDocument، و یک round-trip برای AddTextِ دارای accent که بررسی میکند مسیر embedding مربوط به European TrueType در v1.3.0 code pointهای تکمیلیِ Latin-1 را دستنخورده نگه میدارد
Version 1.5.6
- PDFهای ذخیرهشده اکنون وقتی هیچ OpenAction موجودی حاضر نباشد، بهطور پیشفرض یک open action از نوع Fit Height برای صفحهٔ اول دریافت میکنند تا readerهای PDF در آغاز سندهای تولیدشده را با zoom در ارتفاع صفحه نمایش دهند
- افزوده شد (اضافه شده) پوشش regression در Delphi، Lazarus و C++Builder برای OpenAction تولیدشده و تنظیم Fit Height
Version 1.5.5
- افزوده شد (اضافه شده) regression tests across the Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest) suites for the indexed character and font inspection API surface (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). The Lazarus suite intentionally skips FontData, which currently access-violates inside FPDFFont_GetFontData under FPC
Version 1.5.4
- افزوده شد (اضافه شده) a C++Builder Attachment demo ported from the Delphi sample, covering creating PDFs, adding, listing, extracting, deleting, and saving embedded file attachments with MIME subtype display
Version 1.5.3
- محاسبهٔ spread-page که پشتوانهٔ حالتهای دوصفحهایِ TPdfView است بهصورت helper در سطح unit با نام ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo) در دسترس قرار گرفت. رفتار تغییری نکرده است و این helper قاعدهٔ cover-aware را بدون instantiate کردن یک viewer بهطور مستقل قابلآزمون میکند
- افزوده شد (اضافه شده) five regression tests across the Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest) suites covering empty documents, the standard two-page pairing, the cover page standing alone in dmTwoPageContinuousWithCover, post-cover pairs, and last-page / out-of-range clamping behavior
Version 1.5.2
- افزوده شد (اضافه شده) document language support through TPdf.Language, mapped to the PDF catalog /Lang entry
- افزوده شد (اضافه شده) attachment MIME subtype access with TPdf.Attachmentنوع
- افزوده شد (اضافه شده) anRedact به TPdfAnnotationSubtype و افزوده شدن helperهای حذف page-object برای TPdf و TPdfView
- demoهای viewer و attachment بهروزرسانی شدند تا هرگاه دادهها در دسترس باشند اطلاعات تازهٔ language و نوع attachment را نمایش دهند
Version 1.5.1
- افزوده شد (اضافه شده) dmTwoPageContinuousWithCover برای TPdfView تا layoutهای viewer بتوانند صفحهٔ اول را بهتنهایی نشان دهند و سپس با spreadهای دوصفحهای ادامه دهند
- demoهای MultiPageViewer در Delphi، C++Builder و Lazarus بهروزرسانی شدند تا حالت نمایش دوصفحهایِ cover-aware را در معرض استفاده قرار دهند
Version 1.5.0
- افزوده شد (اضافه شده) smoke-level automated test suites for Delphi (DUnitX), Lazarus (FPCUnit), and C++Builder (GoogleTest). The three suites share a single fixture PDF in Tests\TestData and run the same seven cases each, covering document loading, page info, text extraction, metadata, save round-trip, PDF header validation, and the Compressed property
Version 1.4.3
- Enhanced the Fontویژگیها demo to show both TPdfView and TPdf font metadata APIs, including font handles, font data size, and character metrics
- افزوده شد (اضافه شده) indexed TPdfView character and font inspection properties and updated the Fontویژگیها demo to query text-object font metadata
Version 1.4.2
- افزوده شد (اضافه شده) indexed character and font inspection properties to TPdf for text analysis without requiring a viewer. Character-indexed properties (CharacterAngle, CharacterFontSize, CharacterFontWeight) query per-character metrics from the current page’s text stream. Page-object-indexed properties (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) query font metadata for any text object on the current page
- objectهای صفحهایِ غیرمتنی برای همهٔ propertyهای Font* بهجای ایجاد خطا مقدارهای امنِ صفر یا تهی برمیگردانند و این کار پیمایشِ همهٔ objectهای صفحه و بررسیِ صرفاً objectهای متنی را ساده میکند
- FontBaseName نام پایهٔ font در PostScript را مستقیماً میخواند و بهجای fallback به نام خانوادهٔ font، شناسهای دقیقتر برای fontهای embedشده ارائه میدهد
Version 1.4.1
- افزوده شد (اضافه شده) C++Builder and Lazarus versions of the EuropeanText demo so all supported IDE families can verify accented European text generation with system TrueType fonts
- افزوده شد (اضافه شده) C++Builder and Lazarus versions of the FormFill demo, including sample form PDFs, field editing, appearance regeneration, filled saving, and flattened saving workflows
Version 1.4.0
- افزوده شد (اضافه شده) پشتیبانی Lazarus / Free Pascal: package جدید PDFiumLaz همان TPdf، TPdfView و componentهای مرتبط را زیر مجموعهٔ widgetهای LCL فراهم میکند و کتابخانه را در کنار packageهای موجود Delphi و C++Builder به IDE Lazarus و compiler Free Pascal میآورد
- افزوده شد (اضافه شده) Lazarus versions of the demos so Lazarus developers can explore every feature with runnable examples
- رفع شد (رفع شده) a Lazarus compilation issue where Free Pascal conditional defines were evaluated together with Delphi compiler-version checks, causing FPC builds to attempt resolving Delphi-specific unit names and fail
Version 1.3.1
- گردشکار flatten کردن فرم در مجموعه راهنما مستند شد: GenerateFormAppearances، FlattenPage، FlattenAllPages و ثابتهای مرتبط FLAT_* / FLATTEN_* اکنون در TPdf، TPdfView، مرجع API، ماتریس قابلیتها و نمونههای برنامهنویسی پوشش داده میشوند
- جدول معماری در صفحه نمای کلی اصلاح شد تا واحدهای binding واقعی ارسالشده در پوشه Lib را فهرست کند
Version 1.3.0
- پشتیبانی از نویسههای اروپایی هنگام ساخت PDF بهبود یافت. TPdf.AddText اکنون پیش از ساخت یک text object، font متناظرِ TrueType در سیستم را بارگذاری و cache میکند و در نتیجه نویسههای accentدارِ Czech، French، German، Spanish، Portuguese، Polish و Turkish را که fontهای استانداردِ داخلیِ PDFium نمیتوانند نمایش دهند حفظ میکند
- Applications that previously produced question marks or replacement glyphs for non-ASCII Latin text will now render correctly without any code change. افزوده شد (اضافه شده) the EuropeanText demo to illustrate the feature
Version 1.2.0
- افزوده شد (اضافه شده) AcroForm appearance refresh to TPdf: calling GenerateFormAppearances after modifying FormField[] values updates the widget appearance so filled values are visible in standard PDF readers without requiring an interactive edit session
- افزوده شد (اضافه شده) helperهای flatten کردن فرم برای TPdf (FlattenPage / FlattenAllPages) و TPdfView (FlattenPage برای صفحهٔ جاری نما). Flatten کردن مقادیر پرشدهٔ فیلدها را بهطور دائمی بهعنوان محتوای عادی صفحه embed میکند و لایهٔ فرم تعاملی را حذف میکند و در نتیجه سندی static میسازد که در همهٔ viewerها بهشکل یکنواخت رندر میشود
- افزوده شد (اضافه شده) Demo\Delphi\FormFill برای نمایش گردشکارهای fill-and-save و fill-and-flatten با یک PDF نمونهٔ AcroForm
Version 1.1.2
- افزوده شد (اضافه شده) save-time PDF stream compression. The new TPdf.Compressed property (enabled by default) rewrites uncompressed content streams as FlateDecode-compressed streams on save, significantly reducing file size for programmatically generated PDFs. Applications that require plain uncompressed output can set Compressed to False before calling SaveAs
Version 1.1.1
- buildهای بستهٔ Win64 دیگر unitهای registration مخصوص design-time را در بر نمیگیرند و این کار از failure در زمان build جلوگیری میکند وقتی بستهٔ Win64 در یک بافتِ صرفاً runtime استقرار داده میشود
- loader مربوط به DLL در PDFium اکنون ابتدا زیردایرکتوریِ Win32 یا Win64 در application را با نامهای استانداردِ pdfium.dll و pdfium.v8.dll جستوجو میکند و سپس به دایرکتوریِ flat مربوط به application و دایرکتوری سیستمیِ Windows fallback میدهد. این رفتار با چیدمان DLLهای همراهِ بستهٔ component همخوان است و نصب را ساده میکند
Version 1.1.0
- رفع شد (رفع شده) a visual clipping defect in TPdfView two-page mode: page content was bleeding across the gutter because both left and right page tiles shared a single clipping rectangle. Each tile now clips independently so content stays within its page boundary
- پیام خطای demo مربوط به Delphi وقتی DLL مربوط به PDFium پیدا نمیشود بهبود یافت و اکنون راهنمایی روشنتری با نام و محل مورد انتظارِ DLL ارائه میکند