PdfPixel — это библиотека под MIT лицензией для рендеринга PDF на C#. Для непосредственно рендеринга используется Skia. Помимо этого ни одной сторонней библиотеки.
Весь исходный код доступен здесь: zayg21-pixel/pdf‑pixel. Также есть песочница на WASM + WebGL: PDF Pixel.
На текущий момент она реализует весь основной функционал PDF для статических страниц, большую часть аннотаций. Но не поддерживает Widget/Form аннотации (PDF где можно заполнять кастомные формы).
Так, а что там у нас с оптимизациями?
Весь основной функционал оптимизирован векторизацией, многоуровневым кэшем и различными микро‑оптимизациями для каждого отдельного случая. Оптимизации касаются как памяти и скорости декодирования, так и специфичными оптимизациями для Skia.
И насколько этому всему можно доверять?
Я тестировал каждый отдельный файл в базе PDF.JS, которая составляет около 1500 файлов включая всевозможные сломанные PDF, с огромным количеством графики, и так далее. Это, пожалуй, была самая интенсивная фаза разработки. Также у меня есть доступ к большой базе различных финансовых отчетов крупных компаний и научных статей. На них я проверял производительность сравнивая с MuPDF и Ghostscript. Это не значит, что тут 100% нет ошибок, и тут мне нужна помощь пользователей, чем больше пользователей, чем больше баг репортов, тем более стабильной будет библиотека.
Что ещё вышло в релиз?
-
PdfPixel.Jpg — для декодирования JPEG, поддерживает декодирование части файла (ROI) и дейскейлинг.
-
PdfPixel.Jpx — декодирование JPEG 2000. Как и JPEG, поддерживает RIO и дейскейлинг (через уровни декомпозиции вейвлет). На текущий момент довольно хорошо оптимизирована, но не поддерживается часть функционала который не встречается в PDF, как, например palette. Со временем добавим.
-
PdfPixel.Color — поддержка ICC v2/v4 профилей. Вне PDF полезно для JPEG, JPEG 2000, так как они могут иметь встроенные ICC профили.
-
PdfPixel.Fonts — позволяет исследовать шрифты (PostScript Type 1, CFF, True Type), CMap, глифы, так же содержит специфичные для PDF утилиты для работы со шрифтами и 14 стандартных шрифтов которые не всегда встроены в PDF файлы
-
PdfPixel.PostScript — исполняет любую PostScript программу. В PDF используется по большей части для Type 1 шрифтов.
Ок, а что дальше по плану?
Сама по себе библиотека только для рендеринга отдельных страниц. В самое ближайшее время выйдет PdfPanel. Это уже высокоуровневая обертка над PdfPixel для отрисовки документа. На текущий я работаю над WASM модулем и WPF. Также планируется версия для MAUI и Avalonia.
Источник: habr.com