Native Linux Cairo renderer
HPDFHeadlessCairoDevice, bir yüklenmiş PDF sayfasını Cairo image surface'leri ve FreeType ile RGB PNG'ye render eder — display sunucusu veya PDF reader olmadan
THPDFHeadlessDocument.GetRenderAccess(PageIndex)'ten seri bir ödünç view sağlayın ve rendering dönene kadar o belgeyi yüklenmiş ve değişmemiş tutun
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
Runtime bağımlılıkları
Native Linux, libcairo.so.2'yi, libfreetype.so.6'yı ve standart-yazı-tipi provider'ının Fontconfig bağımlılığını kullanır; Helvetica, Times ve Courier substitution'ı için uygun yazı tipleri kurun
HOTPDF_CAIRO_LIBRARY ve HOTPDF_FREETYPE_LIBRARY, ilk render'dan önce açık uyumlu kütüphane path'leri seçebilir; başarılı modüller yüklü kalır — çünkü native yazı-tipi cache'leri yok etme callback'lerini tutabilir
Host, o native cache'ler HotPDF yazı-tipi-yok-etme callback'lerini tutabilecekken kendi HotPDF executable'ını, DLL'ini veya paket kodunu yüklü tutmalıdır; cache lifetime'ından bağımsız bir host modülünü kaldırmak bu profilin dışındadır
Windows, aynı köprü üzerinden uyumlu libcairo-2.dll ve libfreetype-6.dll kullanır; runtime binary'leri ve lisanslamaları uygulamaya aittir
ICCBased renkler, ayrıca liblcms2.so.2 yükler; JPEG libturbojpeg.so.0 kullanır ve JPEG 2000, OpenJPEG 2.5-uyumlu bir libopenjp2.so.7 kullanır; bu bağımlılıklar, yalnızca karşılık gelen girdiler için yüklenir
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY ve HOTPDF_OPENJPEG_LIBRARY bu path'leri geçersiz kılar; Windows default'ları lcms2.dll, turbojpeg.dll ve openjp2.dll'dir
Rendering profili
Desteklenen içerik, path kurma ve boyamayı, nonzero ve even-odd fill kurallarını, clipping'i, iç-ice graphics state'i, CTM transform'larını, satır style'ını, DeviceGray/RGB/CMYK renklerini, normal alpha'yı ve kendi kaynakları, Matrix ve BBox'ıyla tekrar Form XObject'leri içerir
Satır genişlikleri sıfır olabilir: 0 w veya ExtGState LW=0 tarafından istenen PDF hairline'ları tek-piksel device-space stroke kullanır; negatif genişlikler reddedilir
ExtGState D ve content-stream d operator'ü sınırlı dash doğrulamasını paylaşır: solid boş pattern'ler, tek-uzunluklu tekrarlar, sıfır-uzunluklu entry'ler, kesirli uzunluklar ve imzalı phase'ler desteklenir
Bir dash pattern, 1e9'a kadar en fazla 256 sonlu negatif-olmayan uzunluk kabul eder — boş-olmadığında en az bir pozitif uzunluk ve mutlak değeri en fazla 1e9 olan sonlu bir phase ile; her element operation işi tüketir ve geçici depolama working-byte kabulüne katılır
Operand array'leri, sayısal dash array'leri ve TJ metin array'leri dâhil PDF comment'leri kabul eder; bozuk lexical value'lar ve eksik kapanış köşeli parantezleri, sessizce kaybolmak yerine paylaşılan scanner tarafından tutulur ve renderer tarafından reddedilir
Yatay metin, metin matrix'leri, açık PDF genişlikleri, kanonik Helvetica/Times/Courier advance'leri, character ve kelime boşluğu, yatay ölçek ve TJ ayarlamaları için paylaşılan glyph interpreter'ı kullanır
Gömülü desteklenen yazı tipi programları, çözümlenmiş glyph ID'lerle FreeType kullanır; Unicode ToUnicode eşlemeleri belge metin API'si üzerinden kullanılabilir kalırken, standart-yazı-tipi raster şekilleri kurulu substitute'lara dayanır
Composite metin, Identity-H'yi, Identity-V'yi, açık gömülü encoding CMap stream'lerini ve built-in UniJIS, UniGB, UniCNS ve UniKS UCS2/UTF16 yatay ve dikey eşlemelerini destekler; ayrı kurulmuş CMap kaynakları gerekmez
Dikey glyph boyama, default ve açık DW2/W2 konumlandırma vektörlerini, text rise'ı, yatay ölçeği, metin ve grafik matrix'lerini ve TJ yer değiştirmesini onurlandırır; UTF-16 eşlemeleri supplementary character kodlarını kabul eder
Sekiz metin rendering modunun tümü desteklenir — ET'te clip'e biriken dikey fill/stroke/görünmez outline'lar dâhil; gömülü encoding CMap stream'leri kendi WMode'larını ve nonidentity CID eşlemelerini korur
Saydam birleşik fill-and-stroke operation'ları, fill'in stroke'a sızmasını önlemek için object knockout compositing kullanır; Type3 glyph procedure'leri kendi sınırlı kaynaklarını ve font matrix'lerini yürütür
Görseller, 1/2/4/8/16-bit örnekleri ve Decode array'lerini, stencil'i, açık, color-key ve soft mask'leri, farklı boyutlu mask'leri ve Matte recovery'yi kabul eder; eksik Interpolate, nearest-neighbor örnekleme kullanır ve true bilinear örnekleme seçer
JPX codestream'leri, karışık hassasiyeti, subsampling'i ve açık opaklığı — 26 bite kadar — imzalı veya imzasız kaynak bileşenleri olarak kabul eder ve sınırlı 8 veya 16-bit örneklere normalize eder; JPX görselleri için image dictionary BitsPerComponent'ı ve stencil-olmayan Decode entry'leri PDF image profilinin gerektirdiği gibi yok sayılır
Indexed paletler ve doğrulanmış ICCBased profile-to-sRGB transform'ları görseller ve path renkleri için desteklenir; profilsiz DeviceCMYK, basit device dönüşümünü korur
ICCBased transform'lar, Gray, RGB, CMYK, Lab ve XYZ profile signature'larını kabul eder ve bildirilen bileşen sayısını ve bileşen aralıklarını katı şekilde doğrular
Lab profile operand'ları, default aralıklarla [0 100 -128 127 -128 127] fiziksel L a b koordinatları kullanır; XYZ operand'ları, bileşen başına default imzasız 1.15 aralığı [0 65535/32768] ile fiziksel X Y Z koordinatları kullanır
XYZ profile girdileri, native bir uyumluluk uzantısıdır ve archival PDF uyumunu ima etmez; Lab ve XYZ kaynak profilleri, desteklenen bir saydamlık blending uzayı seçmez
Bir ICC stream'inin Range'i, bileşen başına iki sonlu sıralı value gerektirir ve renk operand'larını sınırlar; ham görsel Decode default'ları ve Indexed lookup value'ları o bileşen aralıklarını kullanır
CalGray, CalRGB ve Lab, path'leri, metni, görselleri ve Indexed palet bazlarını destekler; parametreler katı doğrulanır, CalRGB Matrix entry'leri PDF kolon sıralamasını izler ve Lab bileşenleri ile görsel Decode default'ları bildirilen aralıkları kullanır
CIE renkleri, Bradford kromatik adaptasyonu ve göreli sRGB output kullanır; BlackPoint metadata'ısı doğrulanırken, ek black-point kompanzasyonu ve rendering-intent state politikaları ayrı uzantılar olarak kalır
Separation ve DeviceN composite renkleri, path'ler, metin, Indexed bazları ve paketlenmiş görseller için bir ile otuz iki arasında tint bileşeni korur; device veya CIE alternatif renkleri, sınırlı örnekleme, üstel, stitching veya hesap makinesi tint function'ları kullanır
ICCBased Lab/XYZ ve CalGray/CalRGB/Lab alternatif renk kaynakları, desteklenen bir saydamlık grubuna dönüştürmeden önce fiziksel koordinatlarını tint transform'u boyunca korur
Çok boyutlu örnekleme tint function'ları, doğrusal ve kübik enterpolasyonu, Domain'i, Encode'ı, Decode'u, output Range'i ve 32 bite kadar paketlenmiş örnek derinliklerini destekler; kübik değerlendirme, mevcut scalar dört-knot konvansiyonunu tensor çarpımlarıyla genişletir — kısa boyutlar için doğrusal fallback ve sınırlı iş ve cancellation ile
Enterpolasyon konvansiyonları ve ayrı formül ve reader kanıtları için bkz. Native örnekleme renk function'ları
Sadece None renk kapsayan Separation None ve DeviceN uzayları ne renk ne knockout şekli katkıda bulunur; karışık None bileşenleri yine de alternatif tint transform'a ulaşır
Separation All, tint'ini her mevcut output renk kabına uygular — nötr RGB sayfa output'u kullanarak ve CMYK grupları içindeki her process bileşenini koruyarak
CMYK grupları, blending'den önce orijinal dört-bileşenli alternatif tint value'ları alır; spot separation plakaları, NChannel process/renk-kabı seçimi ve mixing-hint simülasyonu ayrı uzantılar olarak kalır
Terminal görsel callback'i, native JPEG, JPEG 2000, CCITT veya JBIG2 decoding'den önce belge decryption'ını ve önceki stream filter'larını korur; JBIG2, aritmetik ve Huffman metnini, MMR'i ve paylaşılan global dictionary'leri destekler
JPEG 2000, subsampled ve imzalı bileşenleri, çıkarılan renk ve örnek bildirimlerini, gömülü ICC profillerini, açık renk-uzayı override'larını ve SMaskInData üzerinden ayrı veya ilişkili opaklığı destekler; bileşen value'ları sekiz veya on altı bite normalize edilir ve görsel Decode array'i yok sayılır
Gömülü veya açık Lab/XYZ ICC profilleri fiziksel bileşen aralıkları kullanır; ilişkili opaklık, fiziksel koordinat eşlemesini uygulamadan önce normalize edilmiş saklanan örneklerden kaldırılır — Lab offset kanallarını koruyarak
Graphics-state SMask, Alpha ve Luminosity gruplarını, arka plan renklerini, Form matrix'lerini, saved-state restoration'ı ve örneklenmiş, üstel, stitching ve sınırlı hesap makinesi transfer function'larını destekler; bir görselin kendi soft mask'i, graphics-state soft mask'ini geçersiz kılar
On altı standart PDF blend modunun tümü desteklenir; Form ve sayfa grupları, isolated ve nonisolated kompozisyonu, object knockout'u ve DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB veya tek-, üç- ve dört-bileşenli ICCBased blending uzaylarını destekler
Kalibre gruplar, native bileşen value'larını bir grup sınırına kadar tutar ve device veya Lab kaynak renklerini ters kalibre transform'lar üzerinden kabul eder; Lab'in kendisi geçerli bir blending uzayı değildir
Kalibre Luminosity mask'ler grup koordinatlarını korur ve transfer function'ını uygulamadan önce CIE XYZ-Y'yi — grup opaklığı ve arka plan renkleri dâhil — değerlendirir
Knockout compositing, object'in geometrik şeklini soft-mask opaklığından ayrı tutar; stencil delikleri önceki object'leri korurken, maskeli bir path, boyanmış geometrisi boyunca onları değiştirir
İç-ice knockout grupları, children'larının geometrik şekillerinin — sıfır-opaklık object'ler dâhil — birleşimini tutar; nonisolated child gruplar, kapsayan knockout grubunun başlangıç arka planını kullanır
CMYK grupları, tamamlayıcı CMY ve siyah bileşenlerini ayrı sınırlı görsel düzlemlerde korur ve birleşik sonucu grup sınırlarında dönüştürür; ayrılamaz blend modları, seçilen mode'a göre siyahı korur veya değiştirir
Nonisolated gruplar, ek sınırlı bir opaklık geçişi render eder, başlangıç arka plan katkısını kaldırır ve gelen grup alpha'sını ve blend modunu bir kez uygular; sayfa saydamlık grupları, sayfa arka planına kompoze etmeden önce isolated bir surface kullanır
Nonisolated bir Form, kapsayan blending uzayını kalıtır; açık bir grup CS entry'si, başlangıç arka planını başka bir uzaya geçirtmez
Mevcut normal anotasyon görünümleri, dönüştürülmüş BBox'larından Rect'lerine sığdırılır; RenderAnnotations=false, her iki usage'da görünümleri atlar
Usage, hruView'e default'ludur — Hidden ve NoView anotasyonlarını ve Invisible set'li bilinmeyen anotasyon türlerini atlar; yalnızca Invisible set'liyken, desteklenen normal görünlümü ISO 32000 standart anotasyon türleri — PDF 2.0 RichMedia ve Projection dâhil — görünür kalır
RichMedia ve Projection kabulü, geçerli media asset'li veya ilişkili default 3D view'lı mevcut statik normal görünümleri kapsar; media oynatma ve interaktif 3D aktivasyon bu raster path'inin dışındadır
hruPrint, yalnızca Print set'li ve Hidden temizlenmiş anotasyonları boyar; Invisible, her iki usage'da bilinmeyen anotasyon türlerini bastırır, NoView printing'i bastırmaz ve NoZoom basılmış görünüm boyutunu değiştirmez
Normal bir görünüm eksikken, desteklenen anotasyon metadata'sı geçici bir görünümlle render edilir; geometri, Unicode FreeText, statik ikonlar ve kalan sınırlar için bkz. native anotasyon fallback
View output için, anotasyon NoZoom, UserUnit'i korurken görünüm boyutundan render ölçeğini kaldırır; NoRotate, her iki usage'da sayfa rotasyonu boyunca sığdırılmış görünümü dik tutar ve ikisi de dönüştürülmüş üst-sol Rect çapasını ve sayfa clip'ini korur
Mevcut normal görünlümü metin anotasyonları, açık flag'lerinden bağımsız olarak view output'ta NoZoom ve NoRotate davranır; print output, NoZoom'u yok sayarken NoRotate davranışlarını korur
Usage, statik raster görünürlüğünü ve anotasyon geometrisini kontrol eder; yalnızca-etkileşim flag'leri hover veya editing davranışı oluşturmaz ve mevcut extraction-izin callback'i, print izni vermeden zorunlu kalır
Statik output'ta optional content
Rendering, catalog'un default OCProperties/D yapılandırmasını tüketir, grup state'lerini BaseState'ten başlatır, ON ve OFF override'larını uygular ve görünürlüğü belirlerken eşleşen Intent value'larını kullanır
Üyelik dictionary'leri, AnyOn, AllOn, AnyOff ve AllOff destekler; özyinelemeli VE ifadeleri, VE daha basit politikaya üstünlük vermekle And, Or ve tek-operand'lı Not destekler
Null, kullanılamayan ve bayat grup referanslarının üyelik effect'i yoktur; yapılandırmanın intent'lerinin dışındaki gruplar görünürlüğü kontrol etmez ve uygulanabilir grupları olmayan bir üyelik veya ifade, içeriği görünür bırakır
İç-ice /OC marked content, görsel ve Form XObject'ler ve anotasyonlar, sonuçlanan state'e saygı duyar; gizli marked bölüm hâlâ renkleri, matrix'leri, clipping'i ve metin konumunu güncellerken, gizli bütün XObject'ler ve anotasyonlar atlanabilir
Sıradan marked-content property dictionary'leri — iç-ice inline value'lar dâhil — kullanılabilir kalır; content array'leri, marked-content state'ini bileşen stream'leri boyunca korur ve child stream'ler kendi marked-content nesting'ini tutar
Bağımsız final-form rasterization, hem view hem print mode'larında — ISO 32000-1:2008 8.11.4.5 bölümünün belirttiği gibi — interaktif AS usage önerilerini otomatik uygulamadan default yapılandırmayı kullanır; açık ViewerState, kalıcı manuel seçim ve geçici event state'iyle View, Print, Export, Zoom, Language ve User önerilerini etkinleştirir
Eksik optional-content özellikleri veya nil bir ödünç catalog, optional-content yapılarına görünürlük effect'i bırakmaz; bozuk canlı üyelikler, ifade cycle'ları ve yapılandırılmış iş, bellek veya özyineleme limitleri, PNG yayımından önce başarısız olur
Affine appearance matrix'leri ve nonzero BBox kökenleri, bu flag'ler altında normal fit'lerini korur; aşırı küçük bir render ölçeği, yine de Cairo'nun başlangıç sayfa matrix'ini sayısal olarak noninvertible yapabilir
Render edilen sayfa, MediaBox/CropBox kesişimini, kalıtılan sayfa kutularını ve çeyrek-dönüş Rotate'i ve sayfanın UserUnit'ini kullanır; ölçek 1, etkin sayfa punto'su başına bir piksel üretir ve surface boyutları yukarı yuvarlanır
sh operator'ü, iki-girdili domain'ler, shading matrix'leri, radial-circle seçimi, Extend uçları, BBox ve mevcut path clip'leriyle function-based, axial ve radial shading'leri boyar (ShadingTypes 1–3)
Desteklenen renk function'ları ve scalar function array'leri, device, kalibre, ICC Lab/XYZ ve Separation/DeviceN kaynak renkleri üzerinden dönüştürür; mevcut fill opaklığı, blend modları, graphics-state soft mask'leri ve transparency-group knockout, sonuçlanan shading'e uygulanır
Mevcut path ve renk korunur; shading Background, sh tarafından yok sayılır ve AntiAlias, piksel-merkezi renk örneklemeyle bir device ipucudur
Desteklenmeyen ExtGState entry'leri ve desteklenmeyen content operator'leri bu profilin dışında kalır
Üçgen mesh shading'leri
ShadingTypes 4 ve 5, edge yeniden kullanımı, keyfi lattice geometrisi, byte-hizalı vertex kayıtları, 32 bite kadar koordinat hassasiyeti ve 16 bite kadar bileşen hassasiyetiyle free-form ve lattice Gouraud üçgen mesh'leri boyar
Vertex bileşenleri, renk dönüşümünden önce device piksel merkezlerinde enterpole edilir; opsiyonel tek-girdili bir function veya bileşen function array'i, kalibre, ICC ve özel renk uzayları dâhil enterpole edilen parametreyi değerlendirir
Indexed kaynaklar, enterpole edilen indeksleri en yakın palet entry'sine yuvarlar; onaltılık lookup string'leri whitespace, karışık-büyük-küçük-harf digit'leri ve tek final nibble padding'iyle bir kez decode edilirken, literal lookup string'leri decoded baytlarını korur
Mevcut transform'lar, clipping, BBox, fill opaklığı, blend modu, soft mask'ler, nonmarking renk kapları ve grup knockout, tamamlanan mesh'e uygulanır; tutulan stream baytları, geçici sayfa surface'i ve iki lattice satırı, working-memory kabulüne katılır
Vertex parsing, üçgen rasterization ve function'lar, toplam operation'ları ve cancellation polling'ini paylaşır; bozuk veya kesilmiş kayıtlar ve eksiksiz lattice satırları, output yayımından önce başarısız olur
Odaklı kabul, kapalı barycentric eşitlikleri ve ayrı MuPDF ve Poppler output'u denetler; kanıt kayıtları, vertex padding'i, kullanılmayan flag bit'lerini ve mesh saydamlığını kaynak-reader başarısızlıkları olarak ayrı tutar ve nonmarking renkler ve normalize edilmiş Indexed value'lar için açık alternatif reader eşitlikleri kullanır
Coons ve tensor patch mesh'leri
ShadingTypes 6 ve 7, önceki-edge yeniden kullanımı, byte-hizalı kayıtlar, düşük-iki-bit flag semantiği ve üçgen mesh'lerle aynı koordinat ve bileşen hassasiyetleriyle kübik Coons sınırlarını ve tensor kontrol ağlarını boyar
Köşe bileşenleri, opsiyonel function'lar ve renk dönüşümünden önce patch parametrelerinde bilinear enterpole edilir; Coons sınırları, eşdeğer bir bicubic Bernstein ağına yükseltilir — onun ikinci-türev sınırları, en fazla 0.125 output-piksel geometri hatasıyla subdivisions seçer
Polinom inversions, piksel parametrelerini rafine eder; katlanmış coverage, eşit v için en büyük v parametresini ve ardından en büyük u parametresini seçerken, sonraki patch'ler, tamamlanan shading object saydamlığını almadan önce önceki renkleri değiştirir
Paylaşılan mesh compositor'ı, clipping'i, BBox'ı, shading pattern'lerini, nonmarking renk kaplarını, opaklığı, blending'i, soft mask'leri ve grup knockout'u uygular; iki subdivision satırı ve piksel-başına parametre ve sıra array'leri, aktif working-byte kabulüne katılır
Kontrol-noktası parsing'i, subdivision, rasterization ve renk function'ları, operation limitlerini ve cancellation'ı paylaşır; odaklı kabul, katlanmış patch'ler için bağımsız Coons ve tensor eşitlikleri ve kübik kökler kullanır ve kaynak-reader başarısızlıklarını sıradan RGB equation-sayfası doğrulamasından ayrı kaydeder
Kalıtılan metin state'i
Form, Type3 ve pattern child stream'leri, başlangıç graphics state'lerinden geçerli font object'ini, yazı tipi boyutunu, character boşluğunu, kelime boşluğunu, yatay ölçeği, leading'i, rendering modunu ve rise'ı kalıtır; aynı font adına sahip bir child kaynağı, yerel bir Tf onu seçene kadar kalıtılan bir yazı tipini değiştirmez
Saved graphics state, metin parametrelerini geri yükler ve TD ve çift-quote operator'leri, sonraki child stream'ler için leading ve boşluk değişikliklerini tutar; her child, kendi metin matrix'leriyle başlar
Bağımsız anotasyon görünümleri, sayfa içeriğinin nihai metin state'ini tutmadan default metin parametrelerinden başlar
Rendering modu 3'teki Type3 metni, görünür glyph grafik katkısı taşımaz; odaklı Type3 iç-ice-metin kanıtı, MuPDF'in default-parametre sapmasını, kalıtılan-state eşitliklerinden ayrı tutarken, Poppler o fixture'larda kalıtılan parametreleri izler
Tiling ve shading pattern'leri
Pattern renk uzayları, renkli ve renksiz tiling pattern'leri, TilingType 1–3, shading pattern'leri, PatternMatrix, hücre BBox, pozitif veya negatif boşluk, pattern seçimi, saved-state restoration ve fill veya stroke boyamayı destekler
Renksiz pattern'ler bileşenlerini desteklenen bir temel renk uzayından alır ve image stencil boyayabilir; renksiz bir tanım içindeki açık renk değişiklikleri, renkli görseller ve doğrudan shading'ler geçersiz PDF içeriğidir ve iç-ice Form'lar ve Type3 procedure'leri üzerinden de reddedilir
Seçili pattern'ler, tanımlarını çözümlleyen content stream'in default koordinat uzayını korur; sonraki cm operation'ları ve Form içinde kullanılan kalıtılan bir pattern o kökeni değiştirmez
Tanımlar, parent'ın başlangıç desteklenen graphics state'iyle ve default saydamlık parametreleriyle başlar; tiling tanımları, nonisolated bir non-knockout grup oluştururken, shading tanımları object knockout kullanır
Saydam ve üst üste binen tiling hücreleri, mevcut arka plana karşı değerlendirilir; gelen object alpha'sı ve blend modu, tamamlanan pattern boyanırken bir kez uygulanır — iç-ice pattern'ler, metin, stroke'lar ve görsel mask'leri dâhil
Shading-pattern ExtGState, opaklık ve soft mask'ler dâhil desteklenen shading parametrelerini zenginleştirir; Background, shading'den önce boyanır, BBox her iki katkıyı kırpır ve nonmarking None renkleri ne renk ne şekil katkıda bulunur
Pattern değerlendirmesi, iki sayfa surface'ini ve decoded hücre içeriğini kabul eder, görünen hücre numaralandırmasını mevcut clip'e sınırlar ve hücreleri render ederken ve arka plan katkısını kaldırırken cancellation poll eder
Odaklı fixture'lar, kapalı koordinat, renk ve kompozit eşitliklerini native piksellerle ve bağımsız reader output'uyla karşılaştırır; kanıt dosyaları, kalıtılan Form pattern kökenleri, shading-pattern ExtGState opaklığı ve nonmarking None renkleri için reader farklarını tutar — o case'ler için ayrı sıradan vektör eşitlik sayfalarıyla
CID-keyed CFF yazı tipleri
Gömülü CIDFontType0 yazı tipleri, gerçek CFF CID'lerini bağımsız ve OpenType container'larında çözümler — nonidentity eşlemeleri, CID 65535, gömülü Encoding CMap'leri, dikey W2 kökenleri, dönüştürülebilir outline'lar ve metin clipping'i dâhil
Bağımsız CFF yüzler, CID ile yüklenir ve SFNT-sarılmış yüzler, kompakt glyph indeksiyle yüklenir; köprü, Linux LP64 ve Windows LLP64 için doğru FreeType yüz layout'unu kullanır
Map edilmemiş bir character kodu veya olmayan istenen CID, orijinal kod için notdefchar ve notdefrange'e başvurur ve replacement yoksa zorunlu CID 0 glyph'ini kullanır; range'ler sabit CID hedeflerine sahiptir ve character entry'leri üstünlük verir — mevcut glyph'ler istenen CID'lerini korurken
Odaklı kabul, 28 geçerli kaynak için bildirilmiş poligon konturları ve köken eşitlikleri kullanır; ayrı MuPDF ve Poppler karşılaştırmaları ve sıradan RGB eşitlik sayfalarıyla
Kanıt dosyaları, CID-keyed OpenType glyph seçimi ve atlanan notdef substitution'ları için kaynak-reader farklarını tutar; atlanma alternatifi ayrı ölçülür ve zorunlu native kaynak eşitliğinin yerine geçmez
Sınırlar ve cancellation
Kesin built-in Type0 encoding'leri, 200 paketlenmiş encoding adının tümünü kapsar: Identity-H ve Identity-V, on altı UCS2 ve UTF16 eşlemesi ve düzleştirilmiş dikey character override'larla 182 ek legacy ve Unicode map'i
Karışık tek-bayttan dört-bayta operand'lar, per-byte codespace sınırları ve en-uzun-prefix geçersiz-kod recovery'si kullanır; UTF8 ve UTF32 decoding'i ve ters encoding, supplementary scalar'ları ve önemli baştaki sıfır baytları korur
Encoding ve ToUnicode stream'leri, dictionary üstünlüğüyle ve lokal character, range, Unicode-sequence ve notdef override'larıyla body usecmap'ini ve dictionary UseCMap adlarını veya stream'lerini çözümler
Her child CMap, kendi writing modunu tutar — WMode atlandığında yataya default'lu; açık dikey mod, kalıtılan eşlemeleri ve yazı tipinin dikey metriklerini seçer
CMap kalıtımı, THPDFCMapBounds layout'unu değiştirmeden thread-lokal iç-ice depth limitleri kullanır; cycle'lar, bozuk parent'lar ve aşırı depth, output yayımından önce başarısız olur ve finally block'ları, cancellation veya exception'lardan sonra limitleri geri alır
Odaklı kanıt, o built-in tabloları olmayan bağımsız bir reader'da adlandırılmış UTF8 ve UTF32 kaynak başarısızlıklarını tutar, ayrı gömülü-map eşlikçilerini doğrular ve birden çok kodun aynı CID'i seçtiğinde kaynak metin farklarını kaydeder
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh, native Linux'ta kesin encoding interval'lerini, karışık-genişlikli kaynak PDF'leri, iç-ice rendering'i, thread izolasyonunu ve cancellation recovery'sini derler ve test eder
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py, eşleşen native Windows executable'larını çalıştırır, kaynak, binary, PNG ve diagnostic hash'lerini kaydeder ve ardından sabit yakalamaları ayrı MuPDF ve Poppler denetimleri için native Linux depolamasına aktarır
Paketlenmiş map'ler, kendi kaynak hash'lerini ve eksiksiz redistribution bildirimlerini korur; CMap data lisansını kaynak ve binary dağıtımlarla birlikte saklayın
PDF ad value'larındaki ve content ad operand'larındaki onaltılık escape'ler, yazı tiplerini, renk uzaylarını, blend modlarını ve kaynakları çözümllemeden önce bir kez decode edilir; decoding'in ürettiği literal hash, semantik adın parçası kalır
Paylaşılan yazı tipi decoder'ı, bu semantiği font dictionary value'larına, adlandırılmış encoding'lere, Differences glyph adlarına ve CIDToGIDMap'e uygular — ödünç object'leri değiştirmeden veya string value'larını decode etmeden
Escape'li renderer adları, doğrusal decoding, geçici working-byte kabulü, toplam operation limitleri ve cancellation polling kullanır; odaklı kabul, eşdeğer native PNG baytlarını ve metni, bağımsız MuPDF ve Poppler output'uyla karşılaştırır
Shading raster işi ve renk function'ları, toplam operation limitlerini ve cancellation polling'ini paylaşır; geçici surface ve en fazla 8.192 dönüştürülmüş renkli kesin-koordinatlı bir cache, aktif working-byte kabulüne katılır
Odaklı shading kabulü, kapalı geometri/function/renk eşitlikleri ve ayrı vektör eşitlik sayfaları kullanır — BBox clipping'i, dejenere geometri, renk dönüşümü, özel renk-kabı adları ve knockout tessellation için kaynak-reader farklarını tutarak
Options, surface piksellerini, aktif yönetilen buffer'ları, kümülatif decoded baytları, kodlanmış PNG baytları, token ve operator işini ve özyinelemeli veya graphics-state depth'ini sınırlar
Yazı tipi decoding, muhafazakâr kabul ödeneği kullanır: 32 MiB geçici kapasite, decoded font-stream boyutunun 64 katı, özyinelemeli denetlenen array slot'larının 128 katı ve aktif toplamdaki tutulan decoder tahmininin iki katı
CID tabloları, 65.536 tutulan entry kabul eder; numaralandırma gerçek charstring'leri sınırlar ve notdef array'leri decoder deep-copy ve tutulan-byte muhasebesine katılır
CMap parsing'i ve notdef araması, thread-lokal iç-ice entry sınırlarını ve iş polling'ini paylaşır; renderer scope'ları toplam token ve operation limitlerini paylaşır ve uzun lexical taramalar, en fazla her 256 baytta bir poll eder
Interpreter ayrıca, glyph kayıtları oluşturmadan önce input operand baytlarından ve en uzun ToUnicode eşlemesinden glyph-başına Unicode dizisi kapasitesi reserve eder — böylece tekrar uzun eşlemeler working-memory kabulünü bypass edemez
Küçük bir working-memory bütçesi, eventual tahsisi sığacak olsa bile basit bir yazı tipini reddedebilir; bu denetimler, yönetilen buffer'ları ve CPU image surface'lerini kapsarken, Cairo, Fontconfig, FreeType cache'leri ve toplam process RSS muhasebenin dışındadır
Saydamlık, soft-mask, arka plan, opaklık ve object-knockout surface'leri, aktif surface bütçesine katılır; transfer function'ları toplam operation bütçesini paylaşır, ICC ve görsel codec'leri muhafazakâr kabul kullanır ve native JBIG2 decoder, bitmap/context tahsisini kümülatif sınırlar ve decoding sırasında cancellation poll eder
Tamamlayıcı CMY, siyah ve geometrik şekil traversal'ları, toplam operation, decoding ve cancellation limitlerini paylaşır; aynı çözümlenmiş stream'i kullanan profiller, tek bir doğrulanmış transform'u ve aktif kabul rezervasyonunu sayfa rendering'i bitene kadar paylaşır
Tutulan function stream'leri, function değerlendirmesi ve graphics-state kayıtları, working-byte kabulüne katılır; özyinelemeli tint function'ları, çok boyutlu enterpolasyon ve hesap makinesi instruction'ları, operation ve cancellation limitlerini paylaşır
Ödünç cancellation token'ı, sınırlı decoding, tokenization, operator'ler, glyph resolver çağrıları, görsel satırları, özyineleme, PNG encoding ve yayımdan önce poll edilir; lifetime'ı çağıranına aittir
Renderer, extraction iznini ödünç belge politikası üzerinden denetler ve kaynak object value'larını ve kaynak baytlarını korur
Output ownership
HPDFRenderHeadlessPagePNG, çağıranın-sahip olduğu bir stream'e yazmadan önce rendering'i ve PNG encoding'i private tamamlar; nihai bir stream I/O başarısızlığı, zaten kabul edilmiş baytları tutabilir
HPDFRenderHeadlessPagePNGFile, kaynak identity'sini denetler, hedef dizinde münhasıran bir staging dosyası oluşturur, onu flush eder, identity ve cancellation'ı yeniden denetler ve hedefi atomik değiştirir
Windows yayımı, en fazla sekiz atomik replacement girişimi ve 1, 2, 4, 8, 16, 16 ve 16 milisaniyelik yedi bekleme kullanır — yalnızca access-denied, sharing-violation ve lock-violation hatalarını yeniden denerken; cancellation, her girişimden önce ve her beklemenin iki yanında denetlenir
Başarısız Windows yayımı, yakalanan nihai Windows hata kodunu EHPDFHeadlessRenderError üzerinden raporlar; cancellation, renderer'ın cancellation diagnostic'ini korur ve hiçbir path, mevcut hedefi silmez veya non-atomic kopyalamaya fallback yapmaz
Rendering, bütçe, cancellation ve staging başarısızlıkları, mevcut bir hedefi korur ve owned yayımlanmamış staging dosyalarını kaldırır; kaynak-path ve hardlink alias'ları reddedilir
Kabul
Windows runtime kabulü, eşleşen native console executable'larını ve izole, SHA256-pinned portable DLL import closure'ını kullanır; ayrı bir WSL process, Windows-üretilmiş PNG dosyalarına karşı bağımsız MuPDF ve Poppler piksel, eşitlik ve geometri denetimleri çalıştırır
Windows standart-yazı-tipi substitute'ları, Unicode metin ve gerçek outline'lar için — clipping ve fill-and-stroke modları dâhil — açık Cairo GDI yüzler kullanır; gömülü yazı tipleri, FreeType glyph eşlemelerini korur
OpenJPEG çağrıları, Windows stdcall ABI'sini ve Win32 decorated export'larını kullanırken, stream ve mesaj callback'leri C callback konvansiyonunu korur
Tests/Linux/Run-HeadlessCairoAcceptance.sh, taze native ELF build'leri gerçekleştirir, DISPLAY'i ve WAYLAND_DISPLAY'i temizler, doğrudan-bağlı masaüstü kütüphaneleri reddeder ve bağımsız pypdf/MuPDF oracle'ları çalıştırır
Fixture'lar, standart yazı tiplerini, Unicode TrueType'ı, Type3'ü, tüm metin rendering ve blend modlarını, alpha ve knockout'u, RGB saydamlık gruplarını, örnek derinliklerini ve Decode'u, görsel mask'leri ve Matte'yi, Indexed ve ICC renklerini, terminal codec'leri, AES-şifreli filter zincirlerini, sayfa geometrisini, anotasyon transform'larını, bütçeleri, cancellation'ı, kaynak korumasını ve atomik output'u çalıştırır
Sayaçlar için bkz. THPDFHeadlessRenderResult; hata handling için bkz. EHPDFHeadlessRenderError