Estoy tratando de automatizar la impresión de mapas basados en clasificaciones de atributo diferentes en Python QGIS. Todo está bien salvo cuando abro la imagen impresa, las etiquetas son borrosas. Manualmente, lo puedo solucionar este problema haciendo clic en el botón "Actualizar vista" en la ventana de impresión compositor, pero no encuentro la manera correcta de actualizar automáticamente el mapa en el compositor de impresión basado en la API de QGIS. Aquí está imprimiendo parte de este código:
def printMyMap(canvas, field, itemp):
canvas.refresh()
mapRenderer = canvas.mapRenderer()
c = QgsComposition(mapRenderer)
myFile = 'C:/Users/User1/'+itemp
myTemplateFile = file(myFile, 'rt')
myTemplateContent = myTemplateFile.read()
myTemplateFile.close()
myDocument = QDomDocument()
myDocument.setContent(myTemplateContent)
c.loadFromTemplate(myDocument)
#Map
cmaps = c.composerMapItems()
cmaps[0].updateCachedImage()
cmaps[1].updateCachedImage()
#Legend Titles
#legend = c.getComposerItemById("3")
#legend.setTitle(ltitle)
#Show Composer
#iface.actionPrintComposer().trigger()
composerList=iface.activeComposers()
composerView=composerList[composerList.index(max(composerList))]
composer = composerView.composerWindow()
composer.show()
#Save out
dpi = c.printResolution()
dpmm = dpi / 25.4
width = int(dpmm * c.paperWidth())
height = int(dpmm * c.paperHeight())
image = QImage(QSize(width, height), QImage.Format_ARGB32)
image.setDotsPerMeterX(dpmm * 1000)
image.setDotsPerMeterY(dpmm * 1000)
image.fill(0)
imagePainter = QPainter(image)
sourceArea = QRectF(0, 0, c.paperWidth(), c.paperHeight())
targetArea = QRectF(0, 0, width, height)
c.render(imagePainter, targetArea, sourceArea)
imagePainter.end()
image.save("F:/Maps/"+field+".png", "png")