Списки відмальовування та друкарське виробництво
HotPDF компілює завантажені потоки сторінок у багаторазові екземпляри THPDFPageDisplayList із метриками THPDFDisplayListInfo та обмежувальними рамками об'єктів вмісту
Рендеринг документа кешує скомпільовані списки, тоді як викликаючий код може запитувати незалежно володілий список для повторного виконання або регіональних запитів об'єктів
Спільний виробничий інтерпретатор
Непрогресивний бітмап, direct-DC, Form і повторне відтворення списків відображення всі passerують попередньо токенізований вміст через HPDFInterpretContentTokensDevice, який володіє обходом операторів і межами скасування
THPDFPageRenderer реалізує IHPDFContentOperatorDevice, тож спільний обхід викликає його повну машину станів графіки, тексту, ресурсів, обрізання, патернів, прозорості, позначеного вмісту та зображень, не зводчи виробничий рендеринг до меншої поверхні семантичних зворотних викликів
Списки відображення кешують індекси токенів операторів, поки потоки компілюються, і повторно програють лише ці індекси, уникаючи повторних сканувань операндів; THPDFPageDisplayList.OperatorCount і THPDFDisplayListInfo.OperatorCount відкривають кількість кешованих команд
Семантичні пристрої, що реалізують лише IHPDFContentDevice, зберігають зворотні виклики з фільтрацією можливостей, тоді як повні операторні пристрої отримують по одному валідованому оператору за раз з однією точкою перевірки скасування на оператор
Обмежений і конкурентний рендеринг
THPDFRenderTileEvent отримує один тайл або горизонтальну смугу розміром, визначеним викликаючим кодом, за раз, зберігаючи пікову пам'ять растра незалежною від повного розміру сторінки
RenderLoadedPagesParallel перекриває компіляцію списку відмальовування з відтворенням, починає першу готову сторінку без очікування повного бар'єра компіляції, динамічно балансує обидва етапи між обмеженими робочими потоками та повертає THPDFBitmapArray у порядку введення
Компіляція виконується поза блокуванням кешу списків відмальовування, тоді як прийом із подвійною перевіркою та захищені лічильники використання дозволяють непов'язаним сторінкам компілюватися конкурентно без дублювання опублікованих записів або витіснення списку під час відтворення
THPDFParallelRenderPipelineInfo надає влучання кешу, компіляції, завершення, пікову конкурентність компіляції та рендерингу, сторінки, скомпільовані за першого результату, затримку першого результату та загальний минулий час
RenderLoadedPagesParallelOrdered доставляє зворотні виклики в порядку введення на викликальному потоці та звільняє кожен запозичений бітовий графік після повернення зворотного виклику, тоді як обрана викликаючим кодом глибина виводу застосовує тиск виробника та резервує один слот для наступної потрібної сторінки, тому повільна рання сторінка не може стати мертвою зоною за пізнішими результатами
Упорядковане потокове відтворення зберігає щонайбільше один список відмальовування та активний рендеринг на робочий потік плюс обмежену чергу завершених бітових графіків, а не тримає весь вивід завдання в пам'яті
Змінні рендер-бекенди споживають ті самі скомпільовані списки через неволоділе подання ресурсів документа, тому синхронні та паралельні шляхи уникають повторного аналізу вмісту сторінки, тоді як можливості бекенда визначають, чи можуть виклики перекриватися чи потребують послідовного відправлення
Загальнопроцесний планувальник пікової пам'яті тепер обмежує обидва паралельні API: найбільша оцінка сторінки зменшує початкову кількість робочих потоків, кожна заявлена сторінка резервує свій повний оцінений робочий набір, а впорядкований вивід зберігає цю резервацію через доставку зворотних викликів
Скасування планувальника будить очікувачів бюджету за скасування зворотних викликів або збої робочих потоків, тоді як телеметрія надає запитувану та ефективну кількість робочих потоків, пікову вагу резервації, затримані сторінки та сукупний час очікування
RenderLoadedPageTilesParallel і RenderLoadedPageBandsParallel доставляють позичені тайли в порядку рядків або смуги згори вниз між ізольованими робітниками, тоді як кожен робітник володіє щонайбільше одним тайлом, а наданий викликачем ліміт робочої пам'яті зменшує конкурентність до першого запиту
Контексти паралельного рендерингу копіюють незмінні послідовності токенів гліфів Type 3 і екрани півтонів з одного обмеженого LRU-кешу, зберігаючи володіння рендерера над змінним графічним станом і ресурсами GDI
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded і SaveLoadedPagesToTiffStreamBanded споживають той самий смуговий рендерер через потокові кодувальники PNG чи TIFF, тож дуже великі сторінки виводять стиснутий вивід рядок за рядком, не утримуючи повного фреймбуфера, тоді як THPDFBandImageExportInfo повідомляє відрендерені смуги, закодовані рядки, робітників, пікові байти резервування, байти виводу, вит Seconds час і скасування
Спільне декодування зображень координується окремо, тому робота над векторами сторінок залишається паралельною без пошкодження записів кешу декодованих зображень
PrefetchLoadedPages розігріває растрові записи спеціальним токеном скасування, компілюючи та рендерячи поза блокуванням кешу, а фоновий рендеринг сторінки випереджає робочий потік до початку чутливої до затримки роботи
THPDFLoadedPagePrefetchInfo повідомляє заплановану, розпочату, завершену, закешовану, відрендерену, невдалу, скасовану та випереджену на передньому плані роботу разом із останньою та піковою затримкою скасування
Керування прозорістю та друком
Сплощення прозорості спочатку перевіряє лічильник прозорості списку відмальовування та визначене викликаючим кодом обмеження пікселів, а потім замінює фарбу сторінки безвтратовим стиснутим зображенням RGB із каліброваним колірним простором
Сторінки з колорантами Separation або DeviceN залишаються векторним вмістом, а виявлені колоранти та статус збереження надаються викликаючому коду
Рендерер виконує функції передачі та словники растра Type 1, 5, 6, 10 або 16 з ExtGState, зберігаючи незалежні екрани RGB та їхні заміни передачі через q і Q
THPDFInkCoverageInfo повідомляє середнє покриття CMYK, максимальне загальне покриття площі та кількість пікселів вище обраного порога
Вивід процесорних і спеціальних пластин підтримує колоранти DeviceCMYK, Separation і DeviceN
Перезапис кольору завантаженої сторінки використовує той самий повний рендерер для перетворення складних сторінок у Gray, RGB або CMYK, зберігаючи простий вміст сторінки кольорів пристрою як вектори та застосовуючи явну політику спеціальних пластин
THPDFTrappingInfo поєднує оголошення траппінгу документа, метадані сторінки та структурну діагностику TrapNet
Процедура роботи ICC
Перетворення рендерингу може поєднувати профіль джерела PDF, колірний простір бленду, профіль пруфа, вивідний профіль і sRGB-призначення растра
Усі чотири наміри рендерингу ICC і справжню компенсацію чорної точки застосовуються узгоджено до векторних кольорів і зразків зображень у всьому конвеєрі
Повні перетворення спільно використовуються шляхами векторів, зображень, сторінок і паралельного рендерингу через потокобезпечний кеш LRU на 64 МіБ із ключем за вмістом профілів джерела, пруфа та виводу, ефективним наміром рендерингу та компенсацією чорної точки
Сплощення прозорості повторно використовує той самий конвеєр перетворення, а потім видає безшовні тайли D65 CalRGB за контрольованих викликаючим кодом бюджетів загального растра та пікселів на тайл
Основні API
- Змінні рендер-бекенди
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesіRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelіRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow