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

Soft masks

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;

APIهای مرتبط