Здравствуйте!
Подскажите пожалуйста реальный пример плагина на QGIS3, чтобы по шаблону *.qpt вывести на pdf файл
на QGIS2 есть работает, проблема перевести на QGIS3
+ нужен пример с кнопками управления картой
заранее спасибо!
Plugin QGIS3 с картой
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 26 фев 2019, 20:26
- Репутация: 0
- Откуда: Kazakhstan
-
- Активный участник
- Сообщения: 109
- Зарегистрирован: 02 май 2017, 13:22
- Репутация: 22
- Откуда: Москва
Re: Plugin QGIS3 с картой
Не совсем понятно, что подразумевается под "кнопки управления картой"
-
- Активный участник
- Сообщения: 109
- Зарегистрирован: 02 май 2017, 13:22
- Репутация: 22
- Откуда: Москва
Re: Plugin QGIS3 с картой
В общем случае это выглядит примерно так:
from qgis.core import *
....
def exportPDF(self):
project = QgsProject.instance()
layout = QgsPrintLayout(project)
layout.initializeDefaults()
layout.setUnits(QgsUnitTypes.LayoutMillimeters)
#Устанавливаем размер для страницы
page = layout.pageCollection().pages()[0]
page.setPageSize(QgsLayoutSize(210,297))
#Устанавливаем границы прямоугольника, куда будем вписывать карту
itemMap=QgsLayoutItemMap(layout)
itemMap.updateBoundingRect()
itemMap.setRect(QRectF(5, 10, 200, 220))
layout_exporter = QgsLayoutExporter(layout)
pdf_export_settings = QgsLayoutExporter.PdfExportSettings()
pdf_export_settings.dpi = 300
res = layout_exporter.exportToPdf("путь до файла",pdf_export_settings)
from qgis.core import *
....
def exportPDF(self):
project = QgsProject.instance()
layout = QgsPrintLayout(project)
layout.initializeDefaults()
layout.setUnits(QgsUnitTypes.LayoutMillimeters)
#Устанавливаем размер для страницы
page = layout.pageCollection().pages()[0]
page.setPageSize(QgsLayoutSize(210,297))
#Устанавливаем границы прямоугольника, куда будем вписывать карту
itemMap=QgsLayoutItemMap(layout)
itemMap.updateBoundingRect()
itemMap.setRect(QRectF(5, 10, 200, 220))
layout_exporter = QgsLayoutExporter(layout)
pdf_export_settings = QgsLayoutExporter.PdfExportSettings()
pdf_export_settings.dpi = 300
res = layout_exporter.exportToPdf("путь до файла",pdf_export_settings)
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 26 фев 2019, 20:26
- Репутация: 0
- Откуда: Kazakhstan
Re: Plugin QGIS3 с картой
Благодарю за ответ.
Но, у меня вот такой рабочий код на 2.18 версии:
так вот, на 3.4.5 версии QGIS не работает, с ошибками:
# name 'QDomDocument' is not defined
# name 'QgsComposition' is not defined
а идея такая: взять созданный макет (*.qpt) и заменить в нем определенные элементы на мои данные и вывести в pdf
Но, у меня вот такой рабочий код на 2.18 версии:
Спойлер
Код: Выделить всё
def make_pdf(self):
#canvas = QgsMapCanvas()
canvas=self.iface.mapCanvas()
map_canvas = QgsMapCanvas(self.dlg.map)
map_canvas.setMinimumSize(440, 340)
map_canvas.setMaximumSize(440,340)
layers = [layer for layer in self.iface.layerTreeView().selectedLayers()]
map_canvas_layer_list = [l for l in layers]
map_canvas.setLayers(map_canvas_layer_list)
map_canvas.setExtent(self.iface.mapCanvas().extent())
print(self.plugin_dir)
template_path=self.plugin_dir+'\map.qpt'
template_file = open(template_path,'r')
template_content = template_file.read()
template_file.close()
document = QDomDocument() # name 'QDomDocument' is not defined
document.setContent(template_content)
composition = QgsComposition(map_canvas.mapSettings()) # name 'QgsComposition' is not defined
map_item = composition.getComposerItemById('map')
map_item.setMapCanvas(map_canvas)
map_item.zoomToExtent(map_canvas.extent())
txt1 = composition.getComposerItemById('tt1')
txt1.setText(self.dlg.plainText.toPlainText())
txt2 = composition.getComposerItemById('txt')
txt2.setText(self.dlg.plainText.toPlainText())
# name 'QDomDocument' is not defined
# name 'QgsComposition' is not defined
а идея такая: взять созданный макет (*.qpt) и заменить в нем определенные элементы на мои данные и вывести в pdf
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 26 фев 2019, 20:26
- Репутация: 0
- Откуда: Kazakhstan
Re: Plugin QGIS3 с картой
С pdf разобрался! получился так, если кому интересно
Осталась вторая задача: пример с кнопками управления картой
как в моей форме сделать стандартные кнопки "Выбор объекта", "Обновить", и пр.?
как в картине:
Спойлер
layout = QgsLayout(QgsProject().instance())
layout.loadFromTemplate(qpt, QgsReadWriteContext())
mapItem = layout.referenceMap()
layoutExporter = QgsLayoutExporter(layout)
txt1 = layout.itemById('tt1')
txt1.setText(self.dlg.plainText.toPlainText())
txt2 = layout.itemById('txt')
txt2.setText(self.dlg.plainText.toPlainText())
layoutExporter.exportToPdf("C:\ipdf.pdf",QgsLayoutExporter.PdfExportSettings())
layout.loadFromTemplate(qpt, QgsReadWriteContext())
mapItem = layout.referenceMap()
layoutExporter = QgsLayoutExporter(layout)
txt1 = layout.itemById('tt1')
txt1.setText(self.dlg.plainText.toPlainText())
txt2 = layout.itemById('txt')
txt2.setText(self.dlg.plainText.toPlainText())
layoutExporter.exportToPdf("C:\ipdf.pdf",QgsLayoutExporter.PdfExportSettings())
как в моей форме сделать стандартные кнопки "Выбор объекта", "Обновить", и пр.?
как в картине:
- Вложения
-
- Screenshot_для кнопок2.png (44.6 КБ) 3711 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 11 гостей