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

Фоновая печать карты.

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Фоновая печать карты., первый лист печатает, остальные не хочет
 
Здравствуйте!
Почему не печатает листы.
Задача.

Есть карты. На каждой карте есть прямоугольный объект. Нужно распечатать карту по прямоугольному объекту. Размеры этих объектов не превышают установленного размера листа.

Решение задачи.
1. Сначала нужно вызвать диалог настройки принтера. Т.к. бумагу переводить не хочется. Печатаем в Adobe PDF creator.
Итак... как мы это делаем. Есть класс в delphi TMapPrinter. Он один раз создается в конструкторе.
Код
constructor TMapPrinter.create(form: IMain);
begin
  try

    fMap := form.getMap;

    fGISFORMS := sGISPRINT;
    fHDll := LoadLibrary(PChar(fGISFORMS));  // 01/08/2012
    if fHDll<>0 then begin
      fPFuncDlg := Dll_prnMapPrintTitle(GetProcAddress(fHDll,PChar(NameFuncDlg)));
    end;

    fHPrinter := prnLoadPrinter();

    FillChar(fPrintParm, sizeof(TMAPPRINTPARMEX), 0);
    fPrintParm.Length := sizeof(TMAPPRINTPARMEX);
    fPrintParm.Copies := 1;
    fPrintParm.Regime := byte(MPR_INITPARM);
    fPrintParm.TypePrint := MPT_NORMAL;
    fPrintParm.Preview := MPV_MAP;
    fPrintParm.TypeOutput := MPO_RASTERIAL;
//    fPrintParm.Handle := form.getHandle;
    fPrintParm.Handle := form.getHandle;
    fPrintParm.FitToPage := MPF_SPLITTOPAGES;

    FillChar(taskParm, sizeof(TTASKPARM), 0);
    taskParm.Language := 2;
    taskParm.Handle := form.getHandle;
    taskParm.ApplicationName := 'Печать карты';

    isFirstPrint := True;

  except
    on e: Exception do AddLogInfo(LOG_MAIN, 'TMapPrinter.FormCreate: ' + e.Message);
  end;
end;
2. Вызывается функция фонового печати карты. Но т.к. принтер не настроен, надо сначала вывести окно настройки принтера. Для этого мы вызываем диалог печати. После того как пользователь настроил печать. Обнуляем флаг, что больше выводить диалог настройки принтера не надо и в цикле вызываем функцию печати. В теле цикла текущая карта закрывается. Открывается следующая карта, вызывается функция печати. Выглядит это как-то так.
Код
    ownerMap.MapOpen(listPath, true);

    try
     здесь находим объект рамку печати и помещаем его в структуру TMapDFrame
     
      objFrame := Obj.ObjFrame;
     
//      ownerMap.appendSite(aMapFileName);
      ownerMap.getMapView.PrintSelect.ClearAll;
      mapScale := ownerMap.getMapView.MapScale;
      mapPrinter.StartBackGroundPrintActExecute(objFrame, mapScale);
    finally
//      ownerMap.MapClose;
    end;
Теперь поговорим о вызове метода фоновой печати
Код
procedure TMapPrinter.StartBackGroundPrintActExecute(aFrame: TMAPDFRAME; aScale: Integer);
var
  ret: Integer;

begin
  try

    if (not fMap.getMapView.Active) or
      (fHDll = 0) or
      (Not Assigned (fPFuncDlg))
      then exit;


    if isFirstPrint then begin
      fPrintParm.Regime := byte(MPR_INITPARM);
      isFirstPrint := False;
      ret := fPFuncDlg(fmap.MapHandle, fhPrinter, fPrintParm, taskparm, '');
    end;

    fPrintParm.Regime := byte(MPR_PRINTONLY);

    fPrintParm.PlaneFrame.X1 := aFrame.X1;
    fPrintParm.PlaneFrame.Y1 := aFrame.Y1;
    fPrintParm.PlaneFrame.X2 := aFrame.X2;
    fPrintParm.PlaneFrame.Y2 := aFrame.Y2;
    fPrintParm.Scale := aScale;

    ret := fPFuncDlg(fmap.MapHandle, fhPrinter, fPrintParm, taskparm, '');

  except
    on e:Exception do AddLogInfo(LOG_MAIN, 'TMapPrinter.PrinterSettingsExecute: ' + e.Message);
  end;
end;
что мы тут делаем... если вызывается первый раз этот метод, то мы настраиваем печать в диалоге печати а потом его закрываем просто. Далее мы подставляем габариты объекта нашего и печатаем.
Первая карта печатается. Вторая уже нет. Когда первая карта печатается я вижу getLastError = 87, когда карта не печатается getLastError = 2. Можете мне чем-то помочь?
 
Что означает фраза - карта не печатается?
Выходит белый лист или печать не начинается?
 
Цитата
Oleg Belenkov написал:
Что означает фраза - карта не печатается?
Выходит белый лист или печать не начинается?
Не печатается. Значит ничего не происходит с принтером, драйвером. Т.е. результата нет. Ни листа, ни файла.
Настроен драйвер Adobe PDF по умолчанию следующим образом:
1. Выводить по указанному пути.
2. Заменять существующие файлы.
3. Настроен формат вывода А3.

на всякий случай все pdf файлы удалены из папки в пункте 1.

Файлы создаются по имени карты. Т.е. если карта называется лист1.sit то создается pdf файл лист1.pdf
Все карты открываются по отдельности.

После работы программы. В папке указанной в пункте 1 появляется только файл лист1.pdf, остальные файлы лист2.pdf, лист3.pdf и т.д. не создаются.
 
Цитата
Роман написал:
После работы программы. В папке указанной в пункте 1 появляется только файл лист1.pdf, остальные файлы лист2.pdf, лист3.pdf и т.д. не создаются.
В программе обнаружили ошибку.
Будем разбираться, спасибо.
 
Цитата
Елена Кузнецова написал:
Цитата
 Роман  написал:
После работы программы. В папке указанной в пункте 1 появляется только файл лист1.pdf, остальные файлы лист2.pdf, лист3.pdf и т.д. не создаются.
В программе обнаружили ошибку.
Будем разбираться, спасибо.
Если не поздно. Можно как-то учесть, может это будет сложно. Но что бы можно было несколько карт как-нибудь отправить на печать одним разом. Допустим открываю карту 1, отправляю на печать. Открываю карту 2. отправляю на печать. Открываю Карту 3. Отправляю на печать. Завершаю печать. Итогом - вывод одним файлом печати. Или одной сессией печати.
 
Цитата
Роман написал:
Если не поздно. Можно как-то учесть, может это будет сложно. Но что бы можно было несколько карт как-нибудь отправить на печать одним разом. Допустим открываю карту 1, отправляю на печать. Открываю карту 2. отправляю на печать. Открываю Карту 3. Отправляю на печать. Завершаю печать. Итогом - вывод одним файлом печати. Или одной сессией печати.
В обновленной версии добавили возможность напечатать 1 лист (на нашем сайте можно будет скачать в ближайшее время).
Функция с выборочным количеством  листов будет доработана позже.

Спасибо!
Страницы: 1
Читают тему (гостей: 1)



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

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