Комментарии 17
mupdf вроде самая быстрая из opensource библиотек, смотрели в ее сторону?
Можно ещё в сторону libpodofo посмотреть
http://podofo.sourceforge.net/about.html
а я в надеждах найти что-то, что еще и писать умеет
Возможно мой опыт будет полезен.
Мне для виртуального принтера надо преобразовывать PDF-ы — сливать несколько страниц в одну, масштабировать, поворачивать страницы и.т.д.
Вначале я использовал poppler как для рендеринга, так и для чтения/преобразования PDF-ов. И если с рендерингом все более-менее хорошо, то с обработкой я натерпелся. Poppler имеет 2 API. Один публичный высокоуровневый, но он очень ограничен, по сути только отрисовать страницу и все. И второй низкоуровневый и полузакрытый, на сайте про него не написано, но во всех дистрибутивах есть пакеты с нужными заголовочными файлами. Вот этот API позволяет преобразовывать PDF-ы на уровне объектов. Публичного API мне не хватало, и я решил использовать низкоуровневый, ох и натерпелся я. Этот API очень запутанный и недокументированный. А главное он нестабильный, и может внезапно поменяться в минорной версии библиотеки. Добило меня когда KDE-шники взяли и добавили аргументы в функцию вообще без изменения версии. А т.к. проект опенсорсный, то мне надо поддерживать совместимость с несколькими версиями библиотек (от винтажной в Debian Stable, до модной в ArchLinux)
Тогда я плюнул, и написал свой велосипед, который позволяет читать менять и сохранять PDF-ы. Рендерю пока через poppler. Смотрел в сторону PDFium — выглядит обещающе, но ее нет в стандартный пакетах, а для вас, для закрытого проекта можно и собрать самому.
Я пдф, через pdfium в набор QPainterPath складываю, а затем отрисовываю по мере необходимости.
Не совсем понял, отдельные страницы складываете в QPainterPath, или куски одной страницы?
Если страницы целиком, то у меня немного другой подход. У меня минимальный квант, это отдельный PDF-ный объект. Я работаю с PDF на уровне исходного текстового документа. Т.е. перенумеровываю объекты в PDF-е, меняю тип пдфной страницы на пдфный Form и дописываю потом страницу, которая включает в себя эти Form-ы. Мне кажется это быстрее.
Если куски, то это круто! Я до таких высот еще не опускался. Мне вроде как и не надо, но было бы интересно.
Если в pdf много изображений, рендеринг может подтормаживать, так что рендерить лениво — правильное решение.
А так если нужно с удобной корпоративной лицензией, то здесь стоит смотреть pdfium или apache pdfbox. Ну или покупать. Купить можно mupdf (или более старый ghostscript), но есть также коммерческие библиотеки на java.
Трагичная история знакомства с poppler