На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Печать карть программным способом под операционной системой МСВС

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 4 5 След.
RSS
Печать карть программным способом под операционной системой МСВС
 
Здравствуйте!

В данном случае выполняется динамическая подгрузка функции вызова диалога из библиотеки libqdmapqtfrm.so.
Скорее всего вылет происходит из-за того, что ГИС Конструктор версии 11 использует при работе Qt 4 (и библиотека mapqtfrm в частности). В то время как сборка ГИС-приложения производится на основе библиотек Qt5.

Посмотреть используемую библиотекой mapqtfrm версию Qt можно с помощью команды:
Код
ldd /usr/lib/libqdmapqtfrm.so | grep -i qt
 
Цитата
Александр Савелов написал:
Посмотреть используемую библиотекой mapqtfrm версию Qt можно с помощью команды:
Здравствуйте.
Да, ldd показывает на явную зависимость от Qt 4. И эти библиотеки находит в системе. Я думал, что если так динамически подгружать библиотеку, то не важно, на какой версии она написана, учитывая, что все зависимости в системе есть.

Спасибо.
 
Попытался я сделать без указанного выше диалога, используя следующий код, частично взят из QDMapBuildEps:
Код
// Главный обработчик сообщений
long int MessageHandler(long int context, long int code,
                        long int wp, long int lp, long int typemsg = 0)  // qdmwina.cpp
{
    qDebug() << Q_FUNC_INFO;
}

.....

    SCRIPTPARAM   ScriptParam;
    DFRAME  FrameTrap;
    FRAMEPRINTPARAM frameprnpar;
    TASKPARM        taskparm;

    memset((char *)&ScriptParam, 0, sizeof(ScriptParam));

    memcpy(ScriptParam.NameInputPost, "/tmp/mapprint.eps", 17);

    // m_mapHandle - хэндлер открытой карты
    ScriptParam.Scale      = m_printScale; // знаменатель масштаба, для которого хочу напечатать карту
    ScriptParam.Resolution = 300;
    ScriptParam.Length = sizeof(ScriptParam);
    long temp = 0;
    // m_mapHandle - хэндлер открытой карты
    mapSetViewScale(m_mapHandle, &temp, &temp, ScriptParam.Scale);

    ScriptParam.CutListFlag = -5; // печать карты с разбиением на листы размером А4

    memset((char *)&frameprnpar, 0, sizeof(frameprnpar));
    memset((char *)&taskparm, 0, sizeof(taskparm));
    frameprnpar.PlaneFrame  = FrameTrap;
    frameprnpar.ExpandFrame = FrameTrap;                  // 21/01/02
    taskparm.Handle         = MessageHandler;             // 24/12/08


    FrameTrap = frameprnpar.ExpandFrame;

    HINSTANCE libinst;
    long int (WINAPI * SetupParam)(HMAP , SCRIPTPARAM* , DFRAME* );
    int ret = 0;

    SetupParam = (long int (WINAPI *)(HMAP , SCRIPTPARAM* , DFRAME* )) // 06/06/06
    mapLoadLibrary(MAPCOMMLIB, &libinst, "SetupParam");

    if (SetupParam != 0) {
        // Выполнить загрузку данных
        (*SetupParam)(m_mapHandle, &ScriptParam, &FrameTrap);
        // Выгрузка библиотеки
        if (libinst)
            mapFreeLibrary(libinst);

        char doprint[MAX_PATH];
        memset(doprint, 0, sizeof(MAX_PATH));
        sprintf(doprint, "lpr /tmp/mapprint.eps");
        system(doprint);
     }

В итоге в /tmp/mapprint.esp формируется файл, разбитый на листы, но, насколько понимаю, совсем без отступов и после печати эту карту не склеить.
Можно ли как-то программно задать эти отступы и т.п.  без вызова диалогов из libqdmapqtfrm.so?

Мог бы для примера скинуть получившийся файл, но не пойму, как его прикрепить к сообщению.

Спасибо.
Изменено: Сергей - 22.11.2019 18:17:32
 
Здравствуйте!

Получившийся файл можно прикрепить с помощью ссылки на внешний файлообменник.

Если выполнить печать с помощью использования штатного диалога печати (из состава ГИС Оператор 12 для Linux или компонента печати ГИС Конструктор), результат получится подходящий для Вас с точки зрения полей листов?
 
Цитата
Александр Савелов написал:
Если выполнить печать с помощью использования штатного диалога печати (из состава ГИС Оператор 12 для Linux или компонента печати ГИС Конструктор), результат получится подходящий для Вас с точки зрения полей листов?
Добрый день!

Сейчас сложно проверить с помощью визуальных компонентов. То, что пробовал на myfirst из примеров компонентов версии 12, там вообще не выбирался формат бумаги, а из 11 ГИС Конструктор у меня так и не получилось его собрать под Qt5.

Пока из имеющегося функционала, мне также непонятно, как распечатать, например, карту масштаба 1: 200 000 на листах форматом А2 и размером 1800х2000 мм. Может подскажете, в ту сторону я вообще копаю или нет?

Спасибо.
 
Цитата
Александр Савелов написал:
Если выполнить печать с помощью использования штатного диалога печати (из состава ГИС Оператор 12 для Linux
Установил сейчас на Астру 1.5 SE ГИС Оператор 12 с вашего сайта.

Вызвал диалог печати:



После нажатия на кнопку "Печать", из 2-х страниц, указанных в диалоге печати из принтера вышла одна страница и то чистая.
Аналогичная ситуация и при печати в файл(PostScript). Формируется файл с одной чистой страницей.

Поэтому проверить печать с использованием ГИС Оператор 12 не получилось, чтобы дать вам ответ.
Изменено: Сергей - 26.11.2019 12:39:23 (Прикрепил ссылку на получившийся файл)
 
Цитата
Сергей написал:
Мог бы для примера скинуть получившийся файл, но не пойму, как его прикрепить к сообщению.
Цитата
Александр Савелов написал:
Получившийся файл можно прикрепить с помощью ссылки на внешний файлообменник.
Прикрепляю получившийся eps файл для моей реализации, описанной чуть выше .
Были установлены следующие параметры: размер бумаги A4 (ScriptParam.CutListFlag = -5 ), масштаб 1 : 100 000 (ScriptParam.Scale = 100000):
 
Цитата
Александр Савелов написал:
В данном случае выполняется динамическая подгрузка функции вызова диалога из библиотеки libqdmapqtfrm.so.
В дополнение к более раннему сообщению, заметил следующее для библиотеки компонентов моей версии:
Цитата
$ ldd -r libqdmapqtfrm.so

....

undefined symbol: mapFreeEquations      (/usr/lib/libqdmapmtrex.so)
undefined symbol: mapCreateEquations    (/usr/lib/libqdmapmtrex.so)
undefined symbol: mapAddEquation        (/usr/lib/libqdmapmtrex.so)
undefined symbol: mapSolve      (/usr/lib/libqdmapmtrex.so)
undefined symbol: mapGetResult  (/usr/lib/libqdmapmtrex.so)
 
Добрый день.

Хотелось бы получить ответы на указанные выше вопросы.

Спасибо.
 
Здравствуйте!

Прошу прощения за задержку с ответом.

Отпечатал с помощью диалога из состава ГИС Оператор 12 карту Ногинска из состава инсталляции в формат pdf.
Получилось 4 листа: https://dropmefiles.com/CBWEu

Посмотрите, пожалуйста, подходит ли для Вас данный результат?
Страницы: Пред. 1 2 3 4 5 След.
Читают тему (гостей: 4)



© КБ Панорама, 1991-2021

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности