Seite 1 von 1
Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 26.09.2014 13:39
von brandelh
Hi,
ich bin neu hier und wohl wie bei jeder Sprache mal wieder begeistert von den DPI abhängigen Druckroutinen.
Ich habe das Printer Beispiel durch und das kann hier drucken, aber wer will schon für jeden Druckertyp eine neue Druckroutine schreiben
1. LoadFont(0,"Arial",30) müsste ein riesiger Font sein, wenn wie hier behauptet in Points angegeben würde.
Offensichtlich sind es halt doch Pixel und auf meinem Drucker bestenfalls 8 Point.
2. OK ich muss also in Pixeln angeben, aber wie erhalte ich die Werte für DPI (Dots per Inch / Pixel pro Zoll) ?
Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 26.09.2014 14:21
von NicTheQuick
Mit den normalen Purebasic-Druckerbefehlen kommst du da nicht weit. Leider...
Ich habe es damals so gelöst, dass ich 'PrinterPageWidth()' und 'PrinterPageHeight()' genutzt habe und dann auf DIN A4 Größe umgerechnet habe um die DPI heraus zu bekommen. Also in etwa so:
Code: Alles auswählen
#DIN_A4_WIDTH = 210
#DIN_A4_HEIGHT = 297
Procedure.d getPrinterDPI()
Protected xPxPerMm.d = PrinterPageWidth() / #DIN_A4_WIDTH
Protected yPxPerMm.d = PrinterPageHeight() / #DIN_A4_HEIGHT
Protected dpi.d = 25.4 * xPxPerMm
ProcedureReturn dpi
EndProcedure
Macro mm(pos)
(pos / 25.4)
EndMacro
If PrintRequester()
If StartPrinting("Ein Blatt")
If StartDrawing(PrinterOutput())
Define dpi.d = getPrinterDPI()
DrawingMode(#PB_2DDrawing_Transparent)
If LoadFont(0, "Arial", mm(5))
DrawingFont(FontID(0))
EndIf
DrawText(mm(5), mm(5), "Dieser Text ist 5 mm hoch und wird mit " + StrD(dpi, 2) + " gedruckt.", RGB(0, 0, 0))
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
Leider konnte ich es nicht testen, da die Druckerlibrary unter Linux seit einer Weile nicht mehr geht.

Verfasst: 26.09.2014 14:26
von CodeCommander
~ DELETE ~
Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 26.09.2014 14:33
von NicTheQuick
CodeCommander hat geschrieben:NickTheQuick hat geschrieben:Leider konnte ich es nicht testen, da die Druckerlibrary unter Linux seit einer Weile nicht mehr geht.

Im engl. Forum gemeldet?
Nicht nötig, da bekannt. Siehe auch
http://www.purebasic.fr/english/viewtopic.php?f=15&t=59335&start=2
Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 26.09.2014 14:37
von brandelh
nachdem ich meine Sucheingabe etwas geändert habe, finde ich doch tatsächlich eine API Lösung:
http://www.purebasic.fr/german/viewtopi ... ucken+font
Code: Alles auswählen
PrinterDC.L = DefaultPrinter()
If PrinterDC
Debug "Horizontale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSX)) + " DPI"
Debug "Vertikale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSY)) + " DPI"
EndIf
Da dies nicht direkt von PureBasic vorgesehen ist, z.b. über eine automatische Skalierung auf A4 in 1/10 mm
ist das ganze nicht einfach umzusetzen.
PS: ich habe gerade gesehen, dass ich schon seit 2005 angemeldet bin, aber bisher habe ich mit PureBasic nicht gearbeitet.
Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 26.09.2014 20:47
von Danilo
Mit gDrawing kannst Du die DPI abfragen, aber auch DPI-unabhängig drucken.
Zum Beispiel mit gSetUnit(#UnitMillimeter). Dann gibst Du alle Größen (Font, Koordinaten etc) in Millimeter an.
-
[Windows] 2DDrawing commands with AntiAliasing through GDI+
Beispiel zum Drucken ist dabei.
Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?
Verfasst: 28.09.2014 11:12
von brandelh
SUPER, danke !