Ottenere un file pdf dalla mappa mostrata da una MapView
Vai alla navigazione
Vai alla ricerca
Per ottenere la stampa su un file PDF della mappa mostrata dalla MapView, è possibile adottare almeno un paio di modalità.
Uso delle risorse della Classe "Printer"
Mostriamo un esempio: [nota 1]
Private MapView1 As MapView
Private Printer1 As Printer
Private mp As New MapPoint(41.8902142, 12.4900422)
Public Sub Form_Open()
With Me
.W = Screen.AvailableWidth
.H = Screen.AvailableHeight
.Arrangement = Arrange.Fill
End With
With MapView1 = New MapView(Me) As "MapView1"
' Imposta un "Raster Tiles Server" remoto:
.Map.AddTile("opentopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png")
.Map.Zoom = 15
' Imposta il centro della mappa visualizzata specificandone preliminarmente le coordinate geografiche:
.Map.Center = mp
End With
End
Public Sub MapView1_MouseUp()
' Se si clicca con il tasto destro del mouse sulla mappa, si avvia la stampa su un file .pdf:
If Not Mouse.Right Then Return
With Printer1 = New Printer As "Printer1"
.Resolution = Desktop.Resolution
.Paper = .A4
.Orientation = .Landscape
' Stampa su un file .pdf (crea un file .pdf):
.OutputFile = "/tmp/file.pdf"
.Print
End With
End
Public Sub Printer1_Draw() ' Esegue la stampa su un file .pdf della mappa mostrata:
With MapView1.Map
.Width = MapView1.W
.Height = MapView1.H
.Draw()
End With
End
Uso delle risorse della Classe "Cairo"
In tal caso è necessario attivare anche il Componente "gb.cairo".
Private MapView1 As MapView
Public Sub Form_Open()
With Me
.W = (297.0 * Desktop.Resolution) / 25.4
.H = (210.0 * Desktop.Resolution) / 25.4
.Arrangement = Arrange.Fill
End With
With MapView1 = New MapView(Me) As "MapView1"
' Imposta un "Raster Tiles Server" remoto:
.Map.AddTile("opentopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png")
.Map.Zoom = 15
' Imposta il centro della mappa visualizzata specificandone preliminarmente le coordinate geografiche:
.Map.Center = New MapPoint(41.8902142, 12.4900422)
End With
End
Public Sub MapView1_MouseUp()
If Mouse.Left Then Return
Dim im As New Image(MapView1.W, MapView1.H, Color.White, Image.Standard)
With Paint
.Begin(im)
MapView1.Map.Draw()
.End
End With
CreaPDF(im)
End
Private Procedure CreaPDF(imago As Image)
Dim pdf As CairoPdfSurface
' Specifica la superficie grafica da creare per disegnarvi sopra, dimensionandola in "millimetri":
pdf = New CairoPdfSurface("/tmp/file.pdf", (297.0 * Desktop.Resolution) / 25.4, (210.0 * Desktop.Resolution) / 25.4)
' Inizia il disegno sulla superficie impostata:
With Cairo
.Begin(pdf)
.Source = Cairo.ImagePattern(imago, 0, 0)
.Paint
' Termina il disegno dell'immagine:
.End
End With
End
Note
[1] Riguardo alla creazione di un file pdf con la Classe "Printer", vedere anche: Stampare in un file .pdf