Артефакты возникают из-за недостаточного внутреннего буфера формирования изображения. Его можно увеличить с помощью функции mapSetMaxScreenImageSize (mapapi.h):
Код
// Установить предельные размеры буфера изображения (не влияет на расчет разрешения экрана)
// Функция должна вызываться до открытия данных
// Чтобы оставить ширину или высоту без изменения соответствующий параметр
// должен быть равен 0
// Если экран компьютера, на котором выполняется программа, имеет большие
// размеры, то установленные значения будут автоматически увеличены до
// размеров экрана
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapSetMaxScreenImageSize(long int width, long int height);
Данную функцию необходимо вызвать до первого открытия карты. Например:
Сергей написал: Александр, спасибо за пример, но пока с полями все равно проблема, они появились, но все еще обрезаются.
Если проанализировать pdf, то там объекты не обрезаются. Поэтому можно сделать вывод, что просто у физического принтера поля больше. Можно увеличить поля при формировании pdf настройкой класса QPrinter (https://doc.qt.io/archives/qt-4.8/qprinter.html).
Александр Савелов написал: long oldViewType = mapSetViewType(hMap, VT_PRINTRST); // Установим белый цвет фона COLORREF oldback = mapGetBackColor(hMap); mapSetBackColor(hMap, 0x0FFFFFF);
// Отобразим фрагмент карты в памяти mapPaintToXImage(hMap, &Ximagedesc, 0, 0, &RectDraw);
Сергей написал: Александр, спасибо за пример, но пока с полями все равно проблема, они появились, но все еще обрезаются.
Если проанализировать pdf, то там объекты не обрезаются. Поэтому можно сделать вывод, что просто у физического принтера поля больше. Можно увеличить поля при формировании pdf настройкой класса QPrinter ( https://doc.qt.io/archives/qt-4.8/qprinter.html ).
Сергей написал: Цитата Александр Савелов написал:_MAPIMP long int _MAPAPI mapSetMaxScreenImageSize(long int width, long int height);Данная функция, к сожалению, отсутствует в моей версии MAPAPI.
В данной версии ГИС Конструктор можно использовать функцию mapSetScreenImageSize (mapapi.h):
Код
// Установить предельные размеры буфера изображения
// Функция должна вызываться до открытия данных
// Чтобы оставить ширину или высоту без изменения соответствующий параметр
// должен быть равен 0
// Если экран компьютера, на котором выполняется программа, имеет большие
// размеры, то установленные значения будут автоматически увеличены до
// размеров экрана
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapSetScreenImageSize(long int width, long int height);
Цитата
Сергей написал: Еще, насколько я заметил в том примере, что вы дали, осуществляется попытка печати в принтерно-растровом виде.Но, судя по вашим словам в одной из веток форума, в 11 версии отсутствует возможность отображать карту в принтерно-растровом виде.
Да, в данной версии ГИС Конструктор отсутствовал принтерно-растровый вид - данный вызов отрабатывает "вхолостую" и отображение происходит в экранном виде. Можно закомментировать данный вызов.
Значения CutListFlag и FormatPage структуры SCRIPTPARAM в процессе непосредственной печати карты участия не принимают (используются в служебных целях при работе с диалогом). Формат печати необходимо указывать непосредственно в классе QPrinter. Например:
Код
printer->setPaperSize(QPrinter::A5);
Прикрепляю модифицированный пример с учетом данных правок: