Seite 1 von 2

Drucken mit Linux

Verfasst: 10.03.2017 20:01
von stevie1401
Gibt es irgendeine uralt Linux-Version und eine uralt Purebasic-Version mit der man drucken kann?
Ich muss ein Programm für Linux schreiben wo gedruckt wird. Kann gerne eine ältere Version sein, solange drucken funktioniert.
Weiß da jemand was?

Re: Drucken mit Linux

Verfasst: 10.03.2017 20:50
von Sicro
Unter der aktuellen PB-Version (und sicherlich auch unter einigen älteren Versionen) kann ich ohne Probleme unter Linux drucken.

Re: Drucken mit Linux

Verfasst: 10.03.2017 22:04
von stevie1401
Wie kommst du darauf?
Siehe Linux-Bugs.
Es ist seit Jahren (?) nicht möglich richtig mit Linux und PB zu drucken.

Verrätst du mir dann bitte den Trick?
PB kann nur mit einer Auflösung von ca. 70 DpI ca. 600x800 drucken. Da geht nix!

Re: Drucken mit Linux

Verfasst: 11.03.2017 00:13
von Sicro
stevie1401 hat geschrieben:Wie kommst du darauf?
Durch einen selbst durchgeführten Test.
stevie1401 hat geschrieben:Verrätst du mir dann bitte den Trick?
VectorDrawing => PrinterVectorOutput
Das verrät dir aber auch die PB-Hilfe:
PrinterOutput()
[...]
Anmerkungen
Das Zeichnen auf dem Drucker mittels pixel-basiertem Zeichnen kann die Druckqualität verringern und für zusätzliche Komplexität sorgen, da die Drucker-Auflösung berücksichtigt werden muss. Vektor-basiertes Zeichnen mittels PrinterVectorOutput() sollte daher bevorzugt werden, da es Auflösungs-unabhängige Funktionen für hohe Druckqualität bietet.

Re: Drucken mit Linux

Verfasst: 11.03.2017 12:45
von stevie1401
Ich habe bis dato noch keinen funktionierenden Code hinbekommen, um unter Linux zu drucken.
Kannst du mir bitte ein einfaches Beispiel aufschreiben.
Die Community und ich wären dir sehr dankbar!
Ich kenne nur das Druckerbeispiel und mit dem kann ich nichts anfangen.

Re: Drucken mit Linux

Verfasst: 11.03.2017 20:01
von Sicro
Nachfolgend ein Beispiel-Code. Ich habe noch ein paar Wrapper eingebaut, die die Vector-Funktionen wie 2DDrawing-Funktionen aufrufen lassen.

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  Path_Slash$ = "\"
CompilerElse
  Path_Slash$ = "/"
CompilerEndIf

#Blue_Alpha  = -65536    ;RGBA(0, 0, 255, 255)
#Black_Alpha = -16777216 ;RGBA(0, 0, 0, 255)

Procedure Vector_DrawText(x.d, y.d, Text$, FrontColor=#Black_Alpha)
  MovePathCursor(x, y)
  AddPathText(Text$)
  VectorSourceColor(FrontColor)
  FillPath()
EndProcedure

Procedure Vector_DrawImage(x.d, y.d, ImageID, Alpha=255, NewWidth.d=-1.0, NewHeight.d=-1.0)
  MovePathCursor(x, y)
  If NewWidth > 0 And NewHeight > 0
    DrawVectorImage(ImageID, Alpha, NewWidth, NewHeight)
  Else
    DrawVectorImage(ImageID, Alpha)
  EndIf
EndProcedure

Procedure Vector_LineXY(x1.d, y1.d, x2.d, y2.d, LineWidth.d=1.0, Color=#Black_Alpha)
  MovePathCursor(x1, y1)
  AddPathLine(x2, y2)
  VectorSourceColor(Color)
  StrokePath(LineWidth)
EndProcedure

If PrintRequester() And StartPrinting("Test") And StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Pixel))
  
  ; Text zeichnen
  If LoadFont(0, "Arial", 20)
    VectorFont(FontID(0))
    Vector_DrawText(20, 20, "Das ist ein Text.", #Blue_Alpha)
  EndIf
  
  ; Zeichne eine horizontale Linie
  Vector_LineXY(20, 200, 700, 200)
  
  ; Male noch ein Bild dazu
  If LoadImage(0, #PB_Compiler_Home + "examples" + Path_Slash$ + "sources" + Path_Slash$ +
                  "Data" + Path_Slash$ + "PureBasicLogo.bmp")
    Vector_DrawImage(20, 300, ImageID(0))
  EndIf
  
  StopVectorDrawing()
  StopPrinting()
  
  Debug "Es wird gedruckt..."
Else
  Debug "Es ist ein Fehler aufgetreten!"
EndIf

Re: Drucken mit Linux

Verfasst: 12.03.2017 08:45
von stevie1401
Das sieht sehr gut aus! Vielen Dank!
Aber wie stelle ich nun eine DIN A4 Seite ein?
Ich brauche doch FESTE Maße, um drucken zu können. Also FESTE Seitenbreite und FESTE Seitenhöhe.

EDIT:

Ah,ich vermute, ich brauche nur auf "#PB_Unit_Millimeter" umstellen, gell?
Mal schauen wie es bei unterschiedlichen Auflösungen dann klappt bei Schrift und Bildern.
Erst einmal vielen Dank!
Ich habe mir einen Wolf abgesucht und wäre im Leben nicht auf VectorDrawing gekommen. Wie auch?
So lange das "normale" Drucken unter Linux defekt ist, hätte man DEIN Beispiel in die Hilfe aufnehmen sollen.

Re: Drucken mit Linux

Verfasst: 12.03.2017 10:49
von ts-soft
stevie1401 hat geschrieben:Ich habe mir einen Wolf abgesucht und wäre im Leben nicht auf VectorDrawing gekommen. Wie auch?
So lange das "normale" Drucken unter Linux defekt ist, hätte man DEIN Beispiel in die Hilfe aufnehmen sollen.
Da ist nichts defekt, es mangelt wahrscheinlich eher an API-Kenntnissen, die erforderlich sind um ein gescheites Druckbild
zu erhalten. Aber um das ganze zu vereinfachen gibt es ja jetzt die VectrorDrawing lib.

Hinweise findet man in der Hilfe: http://www.purebasic.com/german/documen ... utput.html im Abschnitt
Anmerkungen.

Re: Drucken mit Linux

Verfasst: 13.03.2017 08:33
von stevie1401
Wieso benötige ich API Kenntnisse, wenn ich unter Linux drucken möchte?
Unter Windows und OSX benötige ich keine Vectorgrafik, da geht es einfach. Unter Linux werden die Variablen PrinterWidth() und PrinterHeight() ignoriert und es wird lediglich eine Papierbreite von ca. 600 Pixel verarbeitet. Das ist ein Bug.

Re: Drucken mit Linux

Verfasst: 13.03.2017 13:16
von ts-soft
Und Windows nutzt man auch meist GDI-Drucker, während unter Linux eher professionelle Lösungen ala Postscript genutzt wird.

Unter Windows benötigt man genauso viel API wie unter Linux, für ein professionelles Druckbild!
PS: Nicht jeder Drucker kann 600 DPI und nicht jeder möchte mit 600 DPI drucken :mrgreen:

Du kannst PB mangelnde Druckerunterstützung vorwerfen, aber das gilt für alle OS und ist kein Bug.