Попытался я сделать без указанного выше диалога, используя следующий код, частично взят из 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?
Мог бы для примера скинуть получившийся файл, но не пойму, как его прикрепить к сообщению.
Спасибо.