Advanced Rendering Semantics
Loaded-page rendering preserves nested Form XObject state while applying transparency groups, soft masks, Type 3 glyph procedures, and resolution-aware visible image-region decoding
خطچینهای مسیر
رندر بومی مسیر، آرایههای خطچین کامل و فازشان را حفظ میکند؛ از جمله آرایههای با طول فرد، طولهای اعشاری و خطچینهای رسمشدهٔ صفر-طول با سرهای round یا square؛ الگوی خطچین در ابتدای هر زیرمسیر از نو شروع میشود
خطکشیهای رنگ-جامد و کلیپهای خطکشی با الگوی گرادیانی از یک مسیر هندسهٔ خطچینِ محدودشدهٔ مشترک استفاده میکنند، اتصالها را درون بخشهای پیوستهٔ رسمشده نگه میدارند و بخشهای رسمشده را روی نقطهٔ شروع کانتور بسته به هم میپیوندند
طولهای خطچین مقیاس میانگینِ تبدیل جاری renderer را حفظ میکنند، در حالی که شکستن منحنی از تختسازی تطبیقی فضای دستگاه استفاده میکند؛ رسم پر و کلیپ در انتظار همچنان از مسیر اصلیِ نشکسته استفاده میکنند
Transparency groups
- مقادیر
/Matrixدر Form XObject پیش از اجرای محتوای گروه با ماتریس تبدیل جاری ترکیب میشوند - گروههای isolated از یک alpha plane جداگانه استفاده میکنند تا محتوای سیاه از پیکسلهای شفاف قابلتشخیص بماند
- گروههای knockout در نواحی رسمشدهٔ همپوشان، سهم قبلی گروه را جایگزین میکنند
- محتوای گروه با حالت ترکیب Normal شروع میشود: حالت ترکیب، آلفای ثابت و soft mask مؤثر در لحظهٔ
Doروی گروه بهصورت یکجا اعمال میشوند - گروهی که با حالت ترکیب دیگری رسم میشود رنگ و آلفای خودش را با پسزمینه ترکیب میکند؛ گروه non-isolated که graphics stateهای خودش را بهطور عادی ترکیب میکنند روی سیاه و روی سفید رسم میشود تا آلفایش بازیابی شود
- گروهها به کاشیهای محدود ۷۶۸ پیکسلی تقسیم میشوند، در حالی که رسم GDI، فاز halftone، گروههای تودرتو، soft maskها و compositing مختصات مطلق دستگاه را حفظ میکنند
- بایتهای Form پیش از اجرای کاشیها یک بار decode و tokenise میشوند و maskهای موقت محلیِ هر کاشی پیش از کاشی بعدی آزاد میشوند
- گروههای تودرتو با بازگشت محدود پشتیبانی میشوند و graphics state پس از هر فراخوانی Form کاملاً بازیابی میشود
Soft masks
- maskهای
/S /Alphaو/S /Luminosityاز روی گروه mask ارزیابی میشوند - گروه mask با ترکیب Normal رسم میشود، فارغ از اینکه graphics state تنظیمکنندهٔ mask چه حالت ترکیبی حمل میکند
- maskهای Luminosity فضای رنگی
/CSگروه شفافیت را resolve میکنند و رنگ resolveشده را همانطور که نمایشگرهای رایج انجام میدهند با تقریب DeviceGray در PDF وزندهی میکنند؛ برای اینکه فضاهای مبتنی بر CIE از CIE Y رنگسنجی استفاده کنندRenderColorimetricLuminosityMasksرا تنظیم کنید /BCبا تعداد دقیق مؤلفههای فضای blending اعتبارسنجی میشود و luminosity تبدیلشده را بیرون از محتوای رسمشدهٔ mask فراهم میکند- رنگهای Separation و DeviceN از طریق فضای جایگزین Lab یا ICCBased خود تبدیل میشوند تا مؤلفههای spot هرگز به soft mask نفوذ نکنند
- توابع انتقال
/TRاز طریق evaluator مشترک توابع، توابع sampled، exponential، stitching و PostScript calculator را پشتیبانی میکنند /SMask /Nonemask فعال را پاک میکند وqیاQحالت mask را بهطور عادی حفظ میکنند- maskهای کامپایلشده فقط وقتی دوباره استفاده میشوند که dictionary مبدأ، ماتریس تبدیل جاری و rendering intent همگی یکسان باشند
Transfer and sampled functions
/TR2 بر /TR اولویت دارد، یک تابع واحد روی هر کانال خروجی RGB اعمال میشود و آرایهٔ چهارتابعی سه ورودی اولش را مستقل اعمال میکند و ورودیهای /Identity و /Default را حفظ میکند
اعمال یک حالت انتقال جدید همهٔ کانالها را بهصورت اتمی جایگزین میکند، بنابراین ورودیهای identity نمیتوانند مقادیر lookup را از graphics state قبلی به ارث ببرند
توابع sampled از نوع Type 0 یک تا چهار بُعد ورودی و خروجی، مقادیر /BitsPerSample برابر 1، 2، 4، 8، 12، 16، 24 و 32، نگاشتهای /Encode معکوس یا مستقیم، بازههای /Decode مستقل، درونیابی چندخطی، درونیابی مکعبی چندبُعدی و splineهای مکعبی طبیعی را برای دادههای یکبُعدیِ /Order 3 پشتیبانی میکنند
بایتهای sample رمزگشاییشده، ابعاد اعتبارسنجیشده، نگاشتها و مشتقهای مکعبی یک LRU هشتورودی را به اشتراک میگذارند که به ازای هر thread رندر حداکثر 64 MiB است، و توابع بزرگتر از حد یا malformed بدون اینکه جدول lookup انتقال فعال را نیمهکاره جایگزین کنند شکست میخورند
Halftone screens
آرایههای threshold از نوع Type 6، Type 10 و Type 16 مستقیماً با طولهای دقیق رمزگشاییشده، آستانههای 16 بیتی big-endian، مقایسهٔ مؤلفههای جمعی و نوارهای متناوب فشرده اجرا میشوند که از باز کردن screenهای زاویهدار یا دومستطیلی جلوگیری میکنند
دیکشنریهای Type 5 صفحههای /Red، /Green و /Blue مستقل را همراه /Gray و fallbackهای الزامیِ /Default انتخاب میکنند و هر صفحهٔ انتخابشده میتواند تابع انتقال سراسری را بازنویسی کند
بایتهای threshold اعتبارسنجیشده و هندسهٔ نرمالشدهٔ آنها یک LRU با 64 ورودی را به اشتراک میگذارند که به ازای هر renderer حداکثر 64 MiB است، و ابعاد malformed، تخصیصهای بیش از حد، dictionaryهای Type 5 تودرتو یا ناهماهنگی طول payload باعث میشوند کل حالت screen فعال در حالت continuous-tone بماند
Type 3 glyphs
CharProcهای Type 3 با موتور کامل عملگرهای محتوا اجرا میشوند، با دامنهٔ منابع جاری dictionary فونت، پشتیبانی از Form، clipping، تصویر، pattern و بازگشت محدود
d0 و d1 متریکهای گلیف را فراهم میکنند، و رویهٔ d1 همانطور که مدل تصویرسازی PDF میخواهد رنگ انتخابشده توسط فراخواننده را نگه میدارد
CharProcهای تکراری وقتی فونت، گلیف، ماتریس خطی دستگاه و حالت رنگ یکسان باشند از display listهای decode و tokenise شده دوباره استفاده میکنند؛ translation پویا میماند، بنابراین نویسههای تکراری در موقعیتهای مختلف یک ورودی را به اشتراک میگذارند
LRU مربوط به هر renderer حداکثر 256 ورودی و 131,072 توکن نگه میدارد، هر CharProc بالای 16,384 توکن را دور میزند و رفتار خود را از طریق GetLastType3GlyphCacheStats گزارش میکند
Clipped and downscaled image regions
Image XObjectهای هممحور با محورها فقط محدودهٔ مبدأِ قابلمشاهده را درخواست میکنند و اندازهٔ پیکسل دستگاهِ قابلمشاهده را به مسیر decode میدهند
تصویری که soft mask دارد بهصورت کامل و در اندازهای که رسم میشود decode میشود و mask آن هم در همان اندازه، تا mask همراستا با تصویر بماند در حالی که clipping مشخص میکند چه چیزی رسم شود؛ maskهای JPEG از decoder کاهشاندازهٔ DCT استفاده میکنند
در زمان رندر، ناحیهٔ decodeشدهای که در هر دو بُعد دستکم دو برابر اندازهٔ رسم است پیش از رسم یا کششدن با میانگینگیری ناحیهای دقیقاً به اندازهٔ رسم کوچک میشود؛ بدین ترتیب تصویر بزرگی که کوچک رسم شده در کش decode جا میشود، گروهی که دوبار رسم شده یا صفحهٔ تکراری از آن دوباره استفاده میکند، و soft mask آن در همان اندازه پیکسلبهپیکسل اعمال میشود. maskهای تصویری stencil وضوح کامل خود را حفظ میکنند و متدهای عمومی decode ناحیه اندازههای مستندشدهٔ خود را برمیگردانند
JPEG 2000 API بومی ناحیهای decoder را با یک سطح رزولوشن تواندوی انتخابشده ترکیب میکند تا پیش از بازسازی wavelet و گسترش raster، هر دو بُعد هدف برآورده شوند
codestreamهای JPEG 2000 که tile-addressable هستند را میشود مستقیماً و برای یک tile اعتبارسنجیشده از طریق THPDFJpeg2000Decoder.LoadTileFromByteArray هم decode کرد، و فرادادههای شبکهٔ tile و سقف بایت خروجی از طریق decoder در دسترساند
وقتی یک ناحیهٔ بومی با چند tile مستقل تلاقی میکند، LoadRegionFromByteArrayParallel به هر worker یک حالت خصوصی OpenJPEG اختصاص میدهد و rasterهای کاملشده را با ترتیب قطعی row-major ترکیب میکند؛ لغو، سقف خروجی و بودجهٔ مؤثر حداکثر حافظه میتوانند زمانبندی را متوقف کنند یا fallback ترتیبی را انتخاب کنند
Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
Canvas.Draw(0, 0, Region);
finally
Region.Free;
end;