Bild an Drucker senden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Bild an Drucker senden

Beitragvon cool_zero » Mittwoch 14. Juni 2006, 14:36

Hey @all,

ich bin noch sehr neu in Python und wollte mal Fragen wie ich es bewerkstelligen kann ein BMP oder GIF Bild über die Konsole zu einem Drucker zu senden.

Kann mir diesbezüglich bitte jemand helfen

Vielen dank im Voraus

Lg cool_zero
BlackJack

Beitragvon BlackJack » Mittwoch 14. Juni 2006, 15:29

Die Antwort ist auf jeden Fall abhängig vom Betriebssystem. Welches verwendest Du denn?
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Mittwoch 14. Juni 2006, 15:46

Hallo,

ich verwende Linux und sonstige Unix-like systems

Lg
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 14. Juni 2006, 16:10

Also wenn du einfach nur aus der Kommandozeile drucken willst und ImageMagick installliert hast (ist meistens schon da), tut's ein einfaches Shell-Script. Ungetestet und ausbaufaehig:

Code: Alles auswählen

#!/bin/sh

convert $1 /tmp/blablabla.eps
lpr /tmp/blablabla.eps
rm /tmp/blablabla.eps


Das nimmt eine Bilddatei als Argument.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Mittwoch 14. Juni 2006, 16:15

Naja so einfach ist es leider nicht, ich muss dies mit Python erledigen und habe diesbezüglich nur die Dokumentation vom Druck und die enthaltenen Steuercodes. Aber da ich mit sowas noch nie was zu tun gehabt habe stehe ich momentan absolut am Schlauch :-(

Ich muss das Bild quasi per Python und den Druckersteuercodes ausdrucken, nur weiß ich eben nicht wie. Also Bilder können BMP und GIF Dateien gewählt werden. Soll aber nicht heißen das es später nicht auch für anderen Dateitypen gehen soll. Nur denke ich mal das diese 2 am einfachsten für den Anfang sind.

Der Drucker ist ein Thermodrucker und hängt an USB.

Lg
BlackJack

Beitragvon BlackJack » Mittwoch 14. Juni 2006, 22:20

Glaub mir, das willst Du nicht selbst erledigen. Du müsstest einen Dekoder für die Bildformate und einen Druckertreiber für Deinen Drucker in Python programmieren wenn Du keine zusätzliche Software benutzen willst.

ImageMagick's ``convert`` ist schon eine gute Wahl. Man könnte sicher auch etwas mit den NetPBM Tools basteln, das ist aber auf jeden Fall aufwändiger.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Donnerstag 15. Juni 2006, 01:53

Ja, aber die Frage ob "ich" das will stellt sich hier nicht. Ich habe hier mit dieser Spezifikation eine Abgabe in ein paar Tagen, und so wird es eben verlangt. Deswegen hätte ich hier gerne unterstützende Hände, die mir helfen das Problem zu lösen.

Lg
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 15. Juni 2006, 09:47

Hi cool_zero!

http://www.imagemagick.org/script/api.php#python
http://www.reportlab.org/
http://wiki.wxpython.org/index.cgi/Printing
http://wiki.wxpython.org/index.cgi/More ... OnPrinting

Du hast uns so gut wie keine Informationen gegeben. :evil: Wir wissen nicht einmal ob es ein Drucker ist, der nur Drucken kann oder ob er Sonderfunktionen hat, die extra angesteuert werden müssen. Z.B. Kassenladen öffnen oder Ticket abschneiden oder RFID-Chip auslesen,...

Was für ein Drucker? Gibt es eine Anleitung oder ein Programmbeispiel in einer anderen Programmiersprache? Gibt es so eine Art Linux-Treiber für das Ding? Alles Fragen, die offen blieben.

Um einfach nur ein Bild auf dem Drucker auszudrucken ist Rebecca's Beispiel ideal. Und dass es unbedingt eine Python-Lösung sein muss ist gequirlte Scheiße, wenn es nur darum geht, ein Bild auszudrucken. Wenn es denn sein muss, dann führe doch die Befehle mit "os.system()" aus.

Wenn aber auch noch Text dazu kommen soll, wird es schon schwieriger. Wenn dann auch noch mit einem Kommando an den Drucker z.B. eine Kassenlade geöffnet werden soll, dann ist das für einen Anfänger in ein paar Tagen wahrscheinlich nicht schaffbar. Du musst nämlich testen, welche Art, dem Drucker Daten zu schicken, auch wirklich die Sonderkommandos weiter gibt. Ich kenne Bondrucker, die lassen sich definitiv nur unter Windows einsetzen, da die Sonderkommandos vom Windowstreiber ausgewertet werden und nicht vom Drucker.

Ansonsten, hier ein paar der Möglichkeiten, die mir auf die Schnelle eingefallen sind. Welche dieser Methoden auch spezielle Druckersteuercodes an den Drucker weitergibt, muss man ausprobieren.

- Bringe den Drucker unter Cups zum Laufen. Schaffe es, dass du
einen Text und ein Bild z.B. mit OpenOffice ausdrucken kannst.

Variante 1:
- Erstelle z.B. mit Reportlab eine PDF-Datei
- Drucke diese PDF-Datei mit "lpr" aus.

Variante 2:
- Erstelle eine HTML-Datei mit dem Bild und drucke diese mit wxPython (wx.html.HtmlEasyPrinting()) aus.

Variante 3:
- Erstelle eine HTML-Datei mit dem Bild und drucke diese mit wxPython (wx.html.HtmlPrintout() und wx.Printer()) aus.

Variante 4:
- Zeichne mit wxPython in einen wx.PrinterDC() den gewünschten Text und das gewünschte Bild und drucke es aus.

Variante 5:
- Verwende PIL und drucke mit "lpr" das erstellte Bild aus. (garantiert keine Weitergabe von Druckercodes möglich)

mfg
Gerold
:-)

PS: Für Windows habe ich dafür simplewinprint entwickelt. http://www.python-forum.de/topic-3155.html Damit können Sonderkommandos an z.B. Bondrucker weitergegeben werden. Mit Spezialdruckern unter Linux habe ich keine Erfahrung.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Donnerstag 15. Juni 2006, 13:10

Danke vielmals und Sorry

Also das ganze ist ein Kassadrucker, dazu kommt das das Logo von der jeweiligen Firma mit ausgedruckt werden soll. Der Drucker ist ein SRP-350.

Laut der Angabe ist es ein "NV bit image" ich habe jedoch nur die Python schnittstelle dafür zur verfügung, da die kassa minimal ausgestattet ist.

Ich weiß damit jedoch nichts anzufangen.

Trotzdem Danke
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 15. Juni 2006, 13:31

http://quad.de/ftp/index.php

Suche nach "Linux". Vielleicht ist dieser Treiber brauchbar.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 07:32

Danke,

wie gesagt habe ich bereits die Druckersteuercodes,
mir geht es nur mehr darum mit diesen Druckersteuercodes
ein Bild auszudrucken.

Lg cool_zero
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 09:25

Ich würde einfach mal versuchen, nach dem Steuercode das Bild als die entsprechende Bitfolge zu senden. Z.B.
Schwarz-Weiss-Weiss-Schwarz-Weiss-Weiss-Schwarz-Schwarz wäre 10010011b = 0x93
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 09:31

Ich hab mal ein bisschen gegooglet, und es scheint, dass mit "NV" "non-volatile" (also Speicher, der auch ohne Strom die Daten behält) gemeint ist.

Schau nochmal in der Druckerspezifikation nach, du müsstest auch einen Befehl "Store/Define NV bit image" finden. Diesen musst du aufrufen, um das Bitmap in den NV-Speicher schreiben zu können (dann als normales 1-bit bitmap)

Später brauchst du dann nur noch den Print NV bit image Befehl abzusetzen, und der Drucker druckt das gespeicherte Bild.

Mehr Infos, zum Beispiel welchen Drucker du hast, wären sicherlich von Vorteil.

(Zum Testen würde ich als Bitmapdaten einfach mal eine Folge von 01010101b = 0x55 nehmen. Auf dem Ausdruck müssten dann linien zu sehen sein; Vorteil gegenüber 11111111b = 0xff ist, dass so aus was gedruckt wird, wenn der Drucker seltsamerweise eine 1 als Weiss und 0 als Schwarz definiert hat)
Zuletzt geändert von Joghurt am Montag 19. Juni 2006, 09:35, insgesamt 1-mal geändert.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 09:32

Also ich habe es nun mal so probiert:

Code: Alles auswählen

            # Define NV bit image
            # Command = 1C 71 n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n
            cmd = ''.join(map(chr, (0x1c, 0x71, 1, 2, 0, 2, 0, 0x93)))
            prn.add(cmd)

            # Print NV bit image   
            # Command = 1C 70 n m
            # FS = 1C
            # p   = 70
            # n   = n
            # m  = m

            cmd = ''.join(map(chr, (0x1c, 0x70, 1, 0)))
            prn.add(cmd)


Jedoch mit wenig Erfolg, hierbei leuchtet nur die Error LED auf

Lg cool_zero
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 09:34

Hello,

Joghurt hat geschrieben:Ich hab mal ein bisschen gegooglet, und es scheint, dass mit "NV" "non-volatile" (also Speicher, der auch ohne Strom die Daten behält) gemeint ist.

Schau nochmal in der Druckerspezifikation nach, du müsstest auch einen Befehl "Store/Define NV bit image" finden. Diesen musst du aufrufen, um das Bitmap in den NV-Speicher schreiben zu können (dann als normales 1-bit bitmap)

Später brauchst du dann nur noch den Print NV bit image Befehl abzusetzen, und der Drucker druckt das gespeicherte Bild.

Mehr Infos, zum Beispiel welchen Drucker du hast, wären sicherlich von Vorteil.


Das habe ich schon probiert, in meinem vorherigen Post definiere ich diesen mit dem Befehl und dem Bitmuster 0x93 von Dir

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder