Импорт макетов из шаблонов в проект, используя python

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
johnzet
Новоприбывший
Сообщения: 13
Зарегистрирован: 23 авг 2012, 08:39
Репутация: 1

Импорт макетов из шаблонов в проект, используя python

Сообщение johnzet » 11 авг 2015, 10:47

Пытаюсь найти информацию об импорте макетов из шаблонов, но ничего не выходит. Есть описания, как сохранить (распечатать) изображение из шаблона макета, но как создать новый макет из шаблона и сохранить его в проекте, чтобы потом этот макет открыть и редактировать - нет.
Был у кого-нибудь такой опыт?
Последний раз редактировалось johnzet 12 авг 2015, 12:56, всего редактировалось 1 раз.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Импорт макетов из шаблонов в проект, используя python

Сообщение dab » 11 авг 2015, 11:43


johnzet
Новоприбывший
Сообщения: 13
Зарегистрирован: 23 авг 2012, 08:39
Репутация: 1

Re: Импорт макетов из шаблонов в проект, используя python

Сообщение johnzet » 11 авг 2015, 12:28

Читал. Но как мне теперь создать макет и сохранить его в проекте?
Пробовал следующим образом для теста:

Код: Выделить всё

        myMapRenderer = self.iface.mapCanvas().mapRenderer()
        myComposition = QgsComposition(myMapRenderer)
        myFile = os.path.join(mydir,'template.qpt')
        myTemplateFile = file(myFile, 'rt')
        myTemplateContent = myTemplateFile.read()
        myTemplateFile.close()
        myDocument = QDomDocument()
        myDocument.setContent(myTemplateContent)
        myComposition.loadFromTemplate(myDocument)
        newcomp = self.iface.createNewComposer()
        newcomp.setComposition(myComposition)
но QGIS беспощадно зависает и предлагает завершить работу.
В конце добавлял

Код: Выделить всё

newcomp.composition().exportAsPDF("c:/exposrt.pdf")
Файл создается, но qgis опять падает.

UPD: Если setComposition() для существующего Макета и затем экспортировать его в pdf(exportAsPDF()), то пдф создается и qgis работает. Но стоит открыть этот измененный Макет, тот qgis тут же зависает :cry:

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Импорт макетов из шаблонов в проект, используя python

Сообщение dab » 11 авг 2015, 13:36

QGIS 2.10.1 x64 на Win7 x64

Просто через консоль Python работает код

Код: Выделить всё

import os
from PyQt4.QtXml import QDomDocument

myMapRenderer = qgis.utils.iface.mapCanvas().mapRenderer()
myComposition = QgsComposition(myMapRenderer)
myFile = os.path.join('C:\Users\d.biryuchkov\.qgis2\python\plugins\openLand\print\maket', 'mp-chertegh-zu-A3-albom.qpt')
myTemplateFile = file(myFile, 'rt')
myTemplateContent = myTemplateFile.read()
myTemplateFile.close()
myDocument = QDomDocument()
myDocument.setContent(myTemplateContent)
myComposition.loadFromTemplate(myDocument)
newcomp = qgis.utils.iface.createNewComposer()
newcomp.setComposition(myComposition)
Создаётся макет "Макет 1". Сохраняете проект и макет сохраняется автоматически.
После повторного открытия проекта, "Макет 1" интерактивно доступен через меню "Проекты" / "Макеты карт"

johnzet
Новоприбывший
Сообщения: 13
Зарегистрирован: 23 авг 2012, 08:39
Репутация: 1

Re: Импорт макетов из шаблонов в проект, используя python

Сообщение johnzet » 11 авг 2015, 17:18

Через консоль и у меня отработало. Но если создать таким образом второй макет, то qgis так же падает.

QGIS 2.8.2 x64 Win7 64

johnzet
Новоприбывший
Сообщения: 13
Зарегистрирован: 23 авг 2012, 08:39
Репутация: 1

Re: Импорт макетов из шаблонов в проект, используя python

Сообщение johnzet » 12 авг 2015, 11:22

Код: Выделить всё

        myFile = os.path.join('r:/Graf/_temp/Templates/', 'template.qpt')
        myTemplateFile = file(myFile, 'rt')
        myTemplateContent = myTemplateFile.read()
        myTemplateFile.close()
        myDocument = QDomDocument()
        myDocument.setContent(myTemplateContent, False)
        newcomp = self.iface.createNewComposer()
        newcomp.composition().loadFromTemplate(myDocument)
Для себя решил проблему.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя