Seite 1 von 1

Verschiedene Drucker = verschiedene Ausgabegrößen :-(

Verfasst: 28.01.2008 10:43
von steelbasic
Hallo

Ich möchte auf verschiedenen Druckern eine annähernd gleich große Ausgabe haben.

Beim Tintenstrahler ist es OK
Beim Laser viel zu klein.

Es wird an der Druckerauflösung liegen!

Wie fange ich das in meinem Code ab?

Re: Verschiedene Drucker = verschiedene Ausgabegrößen :-(

Verfasst: 28.01.2008 10:45
von Kiffi
steelbasic hat geschrieben:Wie fange ich das in meinem Code ab?
Druckerauflösung vorher ermitteln und dann die Ausgabe dementsprechend anpassen?

Grüße ... Kiffi

Verfasst: 28.01.2008 10:53
von steelbasic
Danke für die schnelle Antwort. Hast Du mal einen Tipp wie das geht?

Sorry, aber ich habe gerade ein Brett vorm Kopf :oops:

Wäre "PrinterPageWith()" und "PrinterPageHeight()" ein Ansatz?

Auf welchem Drucker gedruckt wird, weis ich im Vorfeld nicht. Es muß irgendwie automatisch angepasst werden.

Wenn noch jemand einen Tipp oder ein Codeschnipsel hätte ???

Verfasst: 28.01.2008 10:55
von Kiffi
steelbasic hat geschrieben:Danke für die schnelle Antwort. Hast Du mal einen Tipp wie das geht?
http://www.purebasic.fr/german/viewtopi ... 886#183886

Grüße ... Kiffi

Verfasst: 28.01.2008 16:20
von steelbasic
Vielen Dank für die Antwort und die Hilfe!

Ich berechne nun einfach den Faktor den die Ausgabe am Drucker im Verhältniss zum HP895 grösser werden muss. Den Faktor multipliziere ich mit den Ausgabedaten für den HP895. Kleinere Ausgaben also einen Faktor < 1 gibt es eigentlich nicht. Beides (<0>) funktioniert einwandfrei.

Etwas Bauchschmerzen habe ich wegen der Kommastellen die der Faktor hat. Aber es scheint keine negativen Auswirkungen zu haben.

Code: Alles auswählen

If PrintRequester()
          ;.........................................................................................
          ;Ausgabegrösse beim Druck berechnen
          DPI = PrinterPageWidth()     
          AF.f = DPI/2400               ;Ausgabefaktor im Bezug auf den HP895 (2400 Pixel) berechnen
          ;.........................................................................................
 
          If StartPrinting("xxx")
  
            LoadFont(20, "Courier New", 30 * AF.f)
            LoadFont(21, "Courier New", 80 * AF.f)
  
              If StartDrawing(PrinterOutput())

                DrawingFont(FontID(21))
  
                DrawText(400 * AF.f, 400 * AF.f, "Ausgabe Flächenausnutzung")
      
                DrawingFont(FontID(20))
                  ;--------------------------------------------------
                  If Druckausgabe = 1 ;Ronden I
                    DrawText(400 * AF.f, 600 * AF.f, "Ronden I")
                    
                    Circle(600 * AF.f, 1000 * AF.f,100 * AF.f,RGB(147, 147, 147))

Verfasst: 28.01.2008 17:34
von ZeHa
Soweit ich weiß, gibt es Drucker, die vertikal eine andere Auflösung haben als horizontal. Daher brauchst Du zwei Faktoren.

Und das ganze von Deinem Drucker abhängig zu machen ist irgendwie auch unschön, warum nicht einfach so:

Code: Alles auswählen

Global ppw
Global pph
ppw = PrinterPageWidth()
pph = PrinterPageHeight()

Procedure.f cmX(value.f)
    ProcedureReturn value * (ppw / 21)
EndProcedure

Procedure.f cmY(value.f)
    ProcedureReturn value * (pph / 29.7)
EndProcedure
Jetzt hast Du zwei Funktionen, denen Du einfach Zentimeterwerte geben kannst (ein A4-Blatt ist soweit ich mich erinnern kann 29.7x21 cm groß) und Du bekommst den passenden Pixelwert zurück.

Beispiel:

Code: Alles auswählen

Box(cmX(5), cmY(5), cmX(10.3), cmY(2))

-> zeichnet einen Kasten mit 10,3 cm Breite und 2 cm Höhe an Position (5/5)