si che si può convertire.
io ho convertito un'intero programma da visualbasic.
basta conoscere le differenze fra i due linguaggi.
il problema è, che come ti ha detto perseo, per gambas c'è già una mega classe (PdfWriter) che fa di tutto e di più.
In Visualbasic per la Stampa ci si affidava a programmi esterni come Cristal report o Active Report, e dubito che avendo questi programmi già pronti si sviluppasse allo stesso tempo classi complete per la stampa.
cmq posta l'esempio che diamo un'occhiata.
Passo alcune cose delle classe e le proprietà:
Option Explicit
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
'zona non stampabile
Dim OffsetX As Single
Dim OffsetY As Single
'Sono dichiarati solo i formati più usati. E' possibile personalizzare
'la lista aggiungendo qualunque altro formato.
Enum Dimensioni_Foglio
A3 = vbPRPSA3 ' A3, 297 x 420 mm
A4 = vbPRPSA4 ' A4, 210 x 297 mm
A5 = vbPRPSA5 ' A5, 148 x 210 mm
B4 = vbPRPSB4 ' B4, 250 x 354 mm
B5 = vbPRPSB5 ' B5, 182 x 257 mm
Letter = vbPRPSLetter ' Letter 8.5 x 11 in.
Tabloid = vbPRPSTabloid ' Tabloid, 11 x 17 in.
Legal = vbPRPSLegal ' Legal, 8.5 x 14 in.
Quarto = vbPRPSQuarto ' Quarto, 215 x 275 mm
User = vbPRPSUser ' Definito dall 'utente.
End Enum
'Nota: Se si imposta la proprietà Height o Width per una stampante,
'PaperSize viene automaticamente impostata su vbPRPSUser.
Enum QualitàDiStampa
Bozza = vbPRPQDraft '-1
BassaRisoluzione = vbPRPQLow '-2
MediaRisoluzione = vbPRPQMedium '-3
AltaRisoluzione = vbPRPQHigh '-4
End Enum
'Nota: su determinate stampanti, è possibile che alcune o tutte
'le impostazioni producano lo stesso risultato.
Enum TipoStampa
Monocromatico = vbPRCMMonochrome '1
Colori = vbPRCMColor '2
End Enum
Enum OrientamentoDelFoglio
Verticale = vbPRORPortrait '1
Orizzontale = vbPRORLandscape '2
End Enum
Enum StileLinea
Continua = vbSolid '(0)
Lineetta = vbDash '(1)
punto = vbDot '(2)
LineettaPunto = vbDashDot '(3)
LineettaPuntoPunto = vbDashDotDot '(4)
'Invisibile = vbInvisible '(5)
'Continua interna = vbInsideSolid '(6)
End Enum
'Nota: se l'impostazione della proprietà DrawWidth è
'maggiore di 1, le impostazioni della proprietà DrawStyle
'da 1 a 4 produrranno sempre e solo una linea continua
Dim SpaziaturaLinee As Single 'interlinea
Const m_DefaultSpaziatura = 1 ' mm
Const PI = 3.14159265 'pi greco
' proprietà della classe '
'Imposta l'interlinea (spaziatura fra una riga e la l'altra)
'(proprietà usata solo nelle stampe "multilinea", ovvero
'con stringhe che contengono almeno un'accapo (vbCr)
Property Let SpaziaturaLinea(Spaziatura As Single)
If Spaziatura >= 0 Then
SpaziaturaLinee = Spaziatura
Else
SpaziaturaLinee = m_DefaultSpaziatura '1mm
End If
End Property
'Legge il valore dell'interlinea
Property Get SpaziaturaLinea() As Single
SpaziaturaLinea = SpaziaturaLinee
End Property
' Imposta le dimensioni del font
Public Property Let FontSize(lFontSize As Integer)
Printer.FontSize = lFontSize
End Property
'legge le dimensioni del font
Public Property Get FontSize() As Integer
FontSize = Printer.FontSize
End Property
' Imposta il nome del font da usare
Public Property Let FontName(sFontName As String)
On Error GoTo FontError
Printer.FontName = sFontName
Exit Property
FontError:
End Property
' Legge il nome del font impostato
Public Property Get FontName() As String
FontName = Printer.FontName
End Property
'Imposta la proprietà Bold per il font in uso
Public Property Let FontBold(bFontBold As Boolean)
Printer.FontBold = bFontBold
End Property
'legge la proprietà Bold del font in uso
Public Property Get FontBold() As Boolean
FontBold = Printer.FontBold
End Property
'Imposta la proprietà Italic per il font in uso
Public Property Let FontItalic(bFontItalic As Boolean)
Printer.FontItalic = bFontItalic
End Property
'legge la proprietà Italic del font in uso
Public Property Get FontItalic() As Boolean
FontItalic = Printer.FontItalic
End Property
'Imposta la proprietà Sottolinato per il font in uso
Public Property Let FontUnderline(bFontUnderline As Boolean)
Printer.FontUnderline = bFontUnderline
End Property
'legge la proprietà Sottolinato del font in uso
Public Property Get FontUnderline() As Boolean
FontUnderline = Printer.FontUnderline
End Property
'imposta il colore di primo piano
Public Property Let ForeColor(Color As Long)
On Error GoTo ColorError
Printer.ForeColor = Color
Exit Property
ColorError:
Printer.ForeColor = vbBlack
End Property
'legge il il colore di primo piano
Public Property Get ForeColor() As Long
ForeColor = Printer.ForeColor
End Property
'imposta le dimensioni del foglio
Public Property Let PaperSize(lPapersize As Dimensioni_Foglio)
Printer.PaperSize = lPapersize
End Property
'legge le dimensioni del foglio impostate
Property Get PaperSize() As Dimensioni_Foglio
PaperSize = Printer.PaperSize
End Property
'imposta il numero di copie
Public Property Let Copies(lCopies As Integer)
Printer.Copies = lCopies
End Property
'legge il numero di copie
Public Property Get Copies() As Integer
Copies = Printer.Copies
End Property
'legge la qualità di stampa impostata
Public Property Let PrintQuality(Quality As QualitàDiStampa)
Printer.PrintQuality = Quality
End Property
'imposta la modalità di stampa impostata (colore o B&W)
Public Property Let ColorMode(Output As TipoStampa)
Printer.ColorMode = Output
End Property
'imposta l'orientamento del foglio impostato (verticale o orizzontale)
Public Property Let Orientation(x As OrientamentoDelFoglio)
Printer.Orientation = x
End Property
'imposta la proprietà della linea (continua, punto, punto-linea etc.)
Public Property Let DrawStyle(Style As StileLinea)
Printer.DrawStyle = Style
End Property
'imposta lo spessore della linea impostato
Public Property Let DrawWidth(Width As Integer)
Printer.DrawWidth = Width
End Property
'Legge la posizione corrente di stampa X (orizzontale)
Property Get CurrentX() As Single
CurrentX = Printer.CurrentX - OffsetX
End Property
'Imposta la posizione di stampa X (orizzontale)
Property Let CurrentX(sCurrentX As Single)
Printer.CurrentX = sCurrentX + OffsetX
End Property
'Imposta la posizione di stampa Y (verticale)
Property Let CurrentY(sCurrentY As Single)
Printer.CurrentY = sCurrentY + OffsetY
End Property
'Legge la posizione corrente di stampa Y (verticale)
Property Get CurrentY() As Single
CurrentY = Printer.CurrentY - OffsetY
End Property
'Legge il numero di font disponibili per la stampante
Public Property Get FontCount() As Integer
FontCount = Printer.FontCount
End Property
'legge, tra i font disponibili, il nome del font in base all'indice
Public Property Get Fonts(iFont As Integer) As String
Fonts = Printer.Fonts(iFont)
End Property
'legge le dimensioni (disponibili per la stampa) verticali della pagina
Property Get PageHeight() As Single
PageHeight = Printer.ScaleHeight - (OffsetY * 2)
End Property
'legge le dimensioni (disponibili per la stampa) orizzontali della pagina
Property Get PageWidth() As Single
PageWidth = Printer.ScaleWidth - (OffsetX * 2)
End Property
'legge il numero di pagina corrente
Property Get Page() As Integer
Page = Printer.Page
End Property