среда, 14 марта 2012 г.

Qt Widget просмотра PDF файлов

Я уже писал о том как читать и писать файлы в pdf с помощью библиотеки podofo. Осталось научиться их отображать. Начал анализировать вопрос и попался топик на сайте prog.org.ru.
Приведу это решение здесь.



Выкладываю своё первое решение.
Какое-то время назад мне пришлось столкнуться с задачей создания просмотрщика PDF-файлов. Казалось бы что проще - использовать ActiveX от Adobe Reader'а? Но есть ситуации, когда его невозможно использовать - когда на клиентской машине его нет, а чтобы установить требуются права администратора, которых у обычных пользователей нет в обычной конторе. Пришлось заморачиваться, долго гуглить на тему бесплатных и открытых решений, в итоге решение было найдено - библиотека Ghostscript. Это, конечно же, не её прямое предназначение, но не всё же в этом мире используется по его прямому назначению Подмигивающий



В общем, публикую исходники виджета, в связи с частыми вопросами мне в ПМ о том как мне удалось завести это всё дело.
Писал быстро и "на коленке" но работает, правда памяти отъедает немало из-за немалой коллекции пиксмапов, но это оптимизируемо множеством способов, так что, допиливайте по своему желанию как хотите Улыбающийся
Это только для OS Windows. *nix-оиды могут использовать библиотеку Poppler - с ней меньше изврата

По поводу параметров инстанцирования GS можете почитать тут.
Задаются в этом фрагменте кода в файле gswidget.cpp
Код
C++ (Qt)
char *gsargv[10]; gsargv[0] = "-o"; gsargv[1] = "-sDEVICE=pngmono"; gsargv[2] = "-r110"; gsargv[3] = "-sOutputFile=img%d.png"; gsargv[4] = "-dSAFER"; gsargv[5] = "-dBATCH"; gsargv[6] = "-dNOPAUSE";

Для использования вам будет необходимо ещё подключить к линковщику gsdll32.lib, а деплоить с gsdll32.dll соответственно

Прикрепить не могу из-за большого размера бинарника Ghostscript'а, поэтому заливаю на файлошару (заранее пардоньте).
http://www.mediafire.com/?8bdmgb01y4xzwal

1 комментарий:

  1. Я сделал просмотрщик для Win на основе poppler-qt4.
    Много гемора было с компиляцией либы, но после всё работает почти отлично (не работает подстановка кириллических строк в формы).

    ОтветитьУдалить