Differenze tra le versioni di "Ottenere un file pdf dalla mappa mostrata da una MapView"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Per ottenere la stampa su un file PDF della mappa mostrata dalla ''MapView'', è possibile utilizzare le risorse della Classe "Printer". <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
Per ottenere la stampa su un file PDF della mappa mostrata dalla ''MapView'', è possibile adottare almeno un paio di modalità.
  
Mostriamo un esempio pratico:
+
===Uso delle risorse della Classe "Printer"===
 +
Mostriamo un esempio: <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
  Private MapView1 As MapView
 
  Private MapView1 As MapView
 
  Private Printer1 As Printer
 
  Private Printer1 As Printer
Riga 46: Riga 47:
 
     .Draw()
 
     .Draw()
 
   End With
 
   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"
 +
<FONT Color=gray>' ''Imposta un "Raster Tiles Server" remoto:''</font>
 +
    .Map.AddTile("opentopo", "https&#058;//a.tile.opentopomap.org/{z}/{x}/{y}.png")
 +
    .Map.Zoom = 15
 +
<FONT Color=gray>' ''Imposta il centro della mappa visualizzata specificandone preliminarmente le coordinate geografiche:''</font>
 +
    .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
 +
 
 +
<FONT Color=gray>' ''Specifica la superficie grafica da creare per disegnarvi sopra, dimensionandola in "millimetri":''</font>
 +
  pdf = New CairoPdfSurface("/tmp/file.pdf", (297.0 * Desktop.Resolution) / 25.4, (210.0 * Desktop.Resolution) / 25.4)
 +
 
 +
<FONT Color=gray>' ''Inizia il disegno sulla superficie impostata:''</font>
 +
  With Cairo
 +
    .Begin(pdf)
 +
    .Source = Cairo.ImagePattern(imago, 0, 0)
 +
    .Paint
 +
<FONT Color=gray>' ''Termina il disegno dell'immagine:''</font>
 +
    .End
 +
  End With
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 19:20, 18 dic 2021

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

 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"
 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 Mouse.Right Then Printer1.Print

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