QGIS3.14资源共享符号未通过独立python脚本显示在atlas导出中

2024-04-19 23:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个独立的python脚本来导出atlas布局。除了我在资源共享插件中使用的SVG符号只是问号(假设它在定位它们时遇到问题)之外,一切都很正常。但是,如果我通过QGIS3文件夹中的startup.py运行脚本,一切都会正常工作。我确实希望避免使用这种方法,因为它会阻止您在脚本完成之前使用QGIS,这需要大约2个小时。我希望我只需要在我的.bat文件中添加一个简单的环境变量,这样它就可以找到资源共享插件。提前感谢您的帮助

.bat文件

@ECHO off

set OSGEO4W_ROOT=C:\OSGeo4W64

call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"

path %OSGEO4W_ROOT%\apps\qgis\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis

set GDAL_FILENAME_IS_UTF8=YES

set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins

SET PYCHARM="C:\Program Files\JetBrains\PyCharm 2019.2.3\bin\pycharm64.exe"

set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python37
set PYTHONPATH=%OSGEO4W_ROOT%\apps\Python37\lib\site-packages;%PYTHONPATH%

set QT_QPA_PLATFORM_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins\platforms
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis

start "PyCharm aware of QGIS" /B %PYCHARM% %*

Python脚本

from qgis.core import  QgsApplication, QgsProject, QgsLayoutExporter
import os
import sys

def export_atlas(qgs_project_path, layout_name, outputs_folder):

    # Open existing project
    project = QgsProject.instance()
    project.read(qgs_project_path)

    print(f'Project in "{project.fileName()} loaded successfully')

    # Open prepared layout that as atlas enabled and set
    layout = project.layoutManager().layoutByName(layout_name)

    # Export atlas
    exporter = QgsLayoutExporter(layout)
    settings = QgsLayoutExporter.PdfExportSettings()
    exporter.exportToPdfs(layout.atlas(), outputs_folder, settings)


def run():
    # Start a QGIS application without GUI
    QgsApplication.setPrefixPath(r"C:\\OSGeo4W64\\apps\\qgis", True)
    qgs = QgsApplication([], False)
    qgs.initQgis()
    sys.path.append(r'C:\OSGeo4W64\apps\qgis\python\plugins')

    project_path = [project_path]
    output_folder = [export_location]
    layout_name_portrait = [portrait layout name]
    layout_name_landscape = [landscape laytout name]

    export_atlas(project_path, layout_name_portrait, output_folder)
    export_atlas(project_path, layout_name_landscape, output_folder)

    # Close the QGIS application
    qgs.exitQgis()

run()

Tags: appspathnameproject脚本binfolderlayout