In gambas esiste una classe statica: Printer, che ti permette di gestire il driver della stampante (comprese le dimensioni di stampa).
Riguardo agli altri oggetti (Drawing, Form, ecc.), questi hanno già una loro funzione di stampa ma, non tiene conto del device su cui vanno a stampare.
Mi spiego meglio...
Prendiamo ad esempio una DrawingArea. Questa è possibile dimensionarla a piacere entro limiti piuttosto ampi (diciamo 10000x10000 pixel); è ovvio pensare che l'area da stampare esca fuori dai margini di un singolo foglio A4, tenendo conto che la configurazione della stampante può NON corrispondere, a livello di Resolution, a quella del video (che di solito è 96px). A questo punto, se si vuole var entrare tutto in un singolo foglio, è necessario che l'immagine da stampare venga ridimensionata (o scalata) in modo congruo; in questo caso Printer non ti è di aiuto, dato che il suo scopo è quello di impostare la stampante, configurando solo ed esclusivamente le proprie configurazioni (es. orientamento, formato carta, ecc.). Come fare allora? Dipende dall'oggetto che vuoi stampare. Ogni oggetto in Gambas (ma anche in altri linguaggi), ha una serie di proprietà (sempre se l'oggetto è predisposto alla stampa...), che ti permettono di trasformare l'oggetto stesso in un'immagine bidimensionale; quest'immagine, a questo punto, può essere trasformata, indipendentemente dal target a cui la invierai (in questo caso una stampante), e quindi toccherà a te impostare i parametri di trasformazione in modo da adattare l'immagine al device di destinazione.
La Form (ad esempio, e come del resto hanno un pò tutti gli oggetti grafici), ha un metodo, che si chiama Grab, che ti crea un'immagine dell'oggetto stesso, come visualizzato al momento; questa immagine, che non è altro che un'oggetto Picture, può essere traformato usando i metodi di Picture, oppure ritrasformato in Image, e usare i metodi di quest'ultima classe per operare cambiamenti anche strutturali (es. ridimensionamento=Stretch, colore, rotazione, ecc.).
Riguardo ad immagini create in memoria (non estratte da oggetti presenti visivamente nell'applicazione), vale lo stesso discorso; per crearli è necessario un oggetto di tipo Picture o Image, su cui creare il disegno oppure tramite il caricamento di un file immagine.
La stampa, quindi, dipende da come poi configuri l'oggetto (non il device); in effetti potresti salvarlo in un file, invece di inviarlo ad una stampante, ma il concetto non cambia.
Nota: è importante sapere, anche dietro all'esperienza fatta, che il Grab (metodo) di un'oggetto presente a video, non stampa il contenuto dell'oggetto stesso, ma il contenuto dell'area che occupa. Mi spiego: se l'oggetto interessato è situato sotto un'altro oggetto, il metodo Grab crea un'immagine che è il contenuto dell'area occupata dall'oggetto interessato, più il contenuto della parte dell'oggetto che lo sovrasta. Questo, a mio avviso, è un problema, e un errore nella libreria di Gambas; per cui tocca stare attenti all'utilizzo di questa funzionalità. Lo stesso dicasi per la DrawingArea, se questa è di dimensioni ragguardevoli, ed è contenuta in una ScrollArea di dimensioni più piccole; in questo caso, Grab ritornerà un'immagine, comprensiva della parte della ScrollArea che copre la DrawingArea (es. le barre di scorrimento. Se la DrawingArea è più grande della Form stessa in cui è contenuta, l'immagine ritornata comprenderà anche la form stessa e, magari, anche parte del desktop. Attenzione, quindi, all'uso di questa funzione.