[Gambas-user] About Printer

Benoît Minisini gambas at ...1...
Tue Jul 19 16:48:05 CEST 2011


> On Tue, 2011-07-19 at 15:40 +0200, Benoît Minisini wrote:
> > > Benoit,
> > > 
> > > Paint.scale work good if there is not text ..; but if there is ...
> > > then text font size is increased by the scale too
> > 
> > This is normal. This it the goal of that matrix: everything is scaled. I
> > added a remark about that on the "How to print" wiki page.
> > 
> > Regards,
> 
> At "How to print" page says:
> 
> Consequently, if a 10 points font is a good size for drawing text on the
> screen, it may be too big for the paper: as the printer resolution is
> far greater than the screen resolution, you usually print things
> smaller.
> 
> We know that Desktop.Resolution uses 12 points Font, for example
> Also we know Printer.Resolution, so  X points Font should be on printer.
> 
> I made an example
> ---------
> ' Gambas class file
> 
> Public Sub Button1_Click()
> 
>     If Not Printer1.Configure() Then
>     Printer1.Count = 1
>     Printer1.FullPage = True
>     Printer1.Print
>     Endif
> 
> End
> 
> Public Sub Printer1_Draw()
> 
>   Dim X As Float
>   Dim Y As Float
>   Dim W As Float
>   Dim H As Float
>   Dim hFactor As Float
>   Dim wFactor As Float
> 
>   hFactor = Paint.Height / Printer1.PaperHeight
>   wFactor = Paint.Width / Printer1.PaperWidth
> 
>   Paint.Scale(wFactor, hFactor)
> 
>   'Set brush
>   Paint.Brush = Paint.Color(Color.RGB(255, 0, 0, 0))
>   Paint.LineWidth = 0.45
> 
>   'Set origin 0,0
>   X = 0
>   Y = 0
> 
>   'Set width, height of printing area
>   W = Printer1.PaperWidth - Paint.LineWidth
>   H = Printer1.PaperHeight - Paint.LineWidth
> 
>   'Draw printing area with red rectangle
>   Paint.Rectangle(X, Y, W, H)
>   Paint.Stroke
> 
>   'Draw font
>   Paint.MoveTo(10, 10 + Paint.TextExtents("toto").Height)
>   Paint.Font.Name = "Times New Roman"
>   Paint.Font.Size = 12 * (Desktop.Resolution / Printer1.Resolution)
>   Paint.Text("toto")
>   Paint.Fill
> 
> End
> -------------
> 
> You know allreay the code but check out the line
> Paint.Font.Size = 12 * (Desktop.Resolution / Printer1.Resolution)
> 
> i think this line prints a good 12 points font on a pdf as i see.
> Compare the result with an OpenOffice pdf. It has good success.
> 
> i attach the project.

Note that Paint.Font.Size is an absolute value in typographic points, *BUT* it 
is scaled by the Paint matrix (i.e. Paint.Scale).

-- 
Benoît Minisini




More information about the User mailing list