#python #c #wrapper #ctypes #wkhtmltopdf
#питон #c #обертка #типы ctypes #wkhtmltopdf
Вопрос:
Я хочу создать своего рода оболочку Python для wkhtmltopdf, созданную из источников C / C .
Для этого я ожидал использовать ctypes, но wkhtmltopdf использует различные структуры, которые содержат определенные типы, такие как QPrinter и многие другие.
Кто-нибудь знает, как использовать нестандартные поля ctypes с Python и модулем ctypes?
Я также ищу информацию об использовании Python-ctypes с исходным кодом c (библиотека dll), если кто-то знает об этом больше, чем я, мне будет интересно узнать об этих вещах 🙂
Большое спасибо !
Ответ №1:
Я бы рекомендовал вам использовать оболочку типа py-wkhtmltox вместо того, чтобы пытаться использовать C API для libwkhtmltox через ctypes.
Комментарии:
1. спасибо, я попытался установить его под управлением python 2.5, и он сказал мне перекомпилировать с помощью Mingw32, я постараюсь это сделать. Я сделал что-то, что работает, я называю wkhtmltopdf.exe с аргументами и методами в класс с помощью модуля «subprocess». Но я бы предпочел обертку 🙂
2. py-wkhtmltox — это оболочка; вы не смогли заставить его скомпилировать? Я бы рекомендовал вам использовать Python 2.7 и инструкции для Windows (которые я проверил).
3. Было ли это быстро во время ваших тестов? Для рендеринга PDF-файла мне требуется 6 или 7 секунд, с процессором intel i5 я создал файл .exe, который помещает интерфейс .pyd и информацию о яйце в python 2.7 (как в инструкции). Я нахожу это ненормально медленным , у вас есть идея ? Это длится 600 мс, когда я вызываю wkhtmltopdf.exe непосредственно
4. Я нашел причину, wkhtmltox работает очень медленно с градиентом css, связанным с рендерингом с высоким разрешением (как в настройках по умолчанию), я получил лучшие результаты, чем при вызовах .exe (~ 20%), просто для информации 🙂 Хорошего дня
5. И мне удалось скомпилировать .pyd для python 2.5, поэтому мне не нужно переносить свое приложение на python 2.7 только для этого модуля 🙂 мне пришлось переделать libpython25.a с определениями типов