Barcode Modul

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Barcode Modul

Beitrag von Micha122 »

Ursprünglich hatte ich nur vor aus einer PB Anwendung heraus Palettenscheine zu drucken.
Also einen Barcode und ein bis zwei Textzeilen.
Nun gut, die Ansprüche stiegen, ist dann doch etwas umfangreicher geworden.

Features:
- Aktuell wird EAN8 , EAN13 und Code128 unterstützt. Weitere folgen.
- Beliebig viele Barcodes und Barcode- Typen auf eine Seite drucken.
- Beliebig viele Textzeilen auf einer Seite
- Barcode- und Textgröße frei definierbar.
- Farben und Zeichensätze frei definierbar.
- SVG-Export. Aktuell aber nur für den Code128
- Barcode Image-Export

Die Version 1.3.0 - 14/04/2018 sowie Beispiele und Dokumentation findet Ihr auf folgender Seite.
http://micha122.bplaced.net

Getestet habe ich die Barcodes mit dem Handy sowie einem echten Barcode- Scanner.

Getestet auf Windows x86 x64
Linux und macOS sollte aber auch klappen.
Zuletzt geändert von Micha122 am 14.04.2018 14:30, insgesamt 8-mal geändert.
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Barcode Modul

Beitrag von hjbremer »

:allright: :allright: :allright:

vielen Dank fürs teilen, funktioniert wunderbar, verstehe zwar wenig aber das macht nix.

9109276043214 <-- Zahlen gedruckt und gescannt
2109876543210
35689140

nur die Fehlerseite beim Download läßt sich nicht drucken. 400 kb für etwas Text ist auch merkwürdig.

EDIT: habe den Download Button oben rechts übersehen, wollte die Webseite speichern.
Zuletzt geändert von hjbremer am 20.02.2018 19:56, insgesamt 1-mal geändert.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Barcode Modul

Beitrag von mk-soft »

Lief erst nicht unter macOS ...

Musste folgendes ändern

1. Im Beispiel

Code: Alles auswählen

;IncludeFile "..\Source\Barcode_Module.pbi"
IncludeFile "../Source/Barcode_Module.pbi"
2. Include Reihenfolge geändert. Erst StartPrinting...

Code: Alles auswählen

; Drucken starten
    Init_Printer.i = StartPrinting("EAN")
    If Init_Printer.i = 0
      ProcedureReturn 15
    EndIf
    VektorID = PrinterVectorOutput(#PB_Unit_Millimeter)
    StartVectorDrawing(VektorID)
...
Noch nicht Barcodeleser getestet. Aber Tolle Arbeit :allright:

P.S. Getestet nicht Handscanner und Smartfon :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

@hjbremer
vielen Dank fürs teilen, funktioniert wunderbar,
Danke für das positive Feedback.
verstehe zwar wenig aber das macht nix.
Bin aktuell dabei den Code128 bzw. EAN128 zu implantieren. Dieser Code ist recht komplex, weshalb ich dann wohl oder über auch ein kleines Manual schreiben werde.
nur die Fehlerseite beim Download läßt sich nicht drucken. 400 kb für etwas Text ist auch merkwürdig.
Ich habe das mal auf zwei anderen Rechnern als nicht angemeldeter User ausprobiert.....kein Problem. Das rtf ist 4kb groß.
Wäre schön wenn du das noch mal testen könntest.



@mk-soft
Lief erst nicht unter macOS ...

Musste folgendes ändern
Werde versuchen das in nächster Version zu berücksichtigen. Wenn ich nicht klar komme melde ich mich noch mal.
Noch nicht Barcodeleser getestet. Aber Tolle Arbeit :allright:
Danke, du hast ja gewissermaßen mitgeholfen. :wink:

Grüße!
Barcodes for PureBasic - http://micha122.bplaced.net/
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Hallo Leute!
Ich habe mein Barcode Modul um den Code128 erweitert.
Es werden alle drei Codepages (A, B und C) unterstützt.

Leider ist der Code128 für den Benutzer nicht so einfach zu handhaben wie beispielsweise der EAN8 oder EAN13.
Das heißt: Man kann nicht einfach irgendwas eintippen und hoffen das klappt schon. Man muss die Steuercodes kennen.

Hier ein kurzes Beispiel welches "Hallo PB-GEMEINDE 2018" ausgibt:

Code: Alles auswählen

IncludeFile "C:\Users\Micha\Desktop\Barcode_Module\Source\Barcode_Module.pbi"

EnableExplicit
UseModule Common
UseModule Barcode

Define Checksum = Generate_Code128_Checksum("<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018")
If Checksum > 99
  Debug "Fehler: " + Checksum
  End
EndIf

Define Code128.s, Code128_Sequence.s, Checksum.i, Result.i

Code128_Sequence.s = Generate_Code128_Sequence("<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018;<P>" + Str(Checksum) + ";<STOP>")
If Code128_Sequence.s = "26" Or Code128_Sequence.s = "27" Or Code128_Sequence.s = "28" Or Code128_Sequence.s = "29" Or Code128_Sequence.s = "30"
  Debug "Fehler: " + Code128_Sequence.s
  End
EndIf

NewList Barcode.Barcode_Parameter() ;Alle Barcodes die gedruckt werden sollen
NewList Text.Text_Line()            ;Alle Textzeilen gedruckt werden sollen
Define Printer.Print_Parameter      ;Druckparameter

;Papiergrösse/Druckparameter. Alle Größenangaben in Millimeter!
Printer\Page_width = 210            ;A4
Printer\Page_height = 297           ;A4
Printer\Left_edge = 20              ;20mm Rand
Printer\Right_edge = 20             ;20mm Rand
Printer\Top_edge = 20               ;20mm Rand
Printer\Upper_edge = 20             ;20mm Rand
Printer\Pages = 1                   ;Anzahl zu druckender Seiten
Printer\Print_Requester = #True     ;#False für Standarddrucker, #True für Drucker Auswahl

;Einen Code128 hinzufügen. Alle Größenangaben in Millimeter!
AddElement(Barcode())
Barcode()\Type = "CODE128"                    ;Aktuell wird "EAN8", "EAN13" und "Code128" unterstützt
Barcode()\Barcode = "Hallo PB-GEMEINDE 2018"  ;Die Barcodeziffern inkl. Prüfziffer
Barcode()\Font = "Arial"                      ;Zeichensatz für Ziffern. Leer lassen wenn keine Ziffern erzeugt werden sollen
Barcode()\Sequence = Code128_Sequence.s       ;Wurde von <Generate_Code128_Sequence()> erzeugt
Barcode()\Width = 70                          ;Die Barcode Breite
Barcode()\Height = 20                         ;Die Barcode Höhe
Barcode()\PosX = 90                           ;Position
Barcode()\PosY = 50                           ;Position
Barcode()\Color0_RGB = "255,255,255"          ;Linienfarbe1 als RGB getrennt durch Komma
Barcode()\Color1_RGB = "0,0,0"                ;Linienfarbe1 als RGB getrennt durch Komma
Barcode()\ColorDigits_RGB = "0,0,0"           ;Farbe der Ziffern als RGB getrennt durch Komma


Result.i = Print_Barcode(Barcode(), Printer, Text())
If Result.i <> 1
  Debug "Fehler :" + Result.i
EndIf
Dieses Beispiel benutzt alle drei Codepages.

"<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018;<P>" + Str(Checksum) + ";<STOP>"

Dieser Code startet mit Codepage B. Für "Hallo" wird also Codepage B benutzt.
Dann wird auf Code A umgeschaltet und für "PB-GEMEINDE" benutzt.
Als nächstes wird für "2018" auf Code C umgeschaltet.
Nun folgt ein <P> für Prüfziffer gefolgt von der vorher errechneten Prüfziffer.
Als letztes folgt der Stop-Code.

Wie Ihr vielleicht schon gesehen habt, sind die einzelnen Codebereiche durch ein Semikolon zu trennen.

Hier die Schreibweise der Code- Funktionen:

Codepage A:

Code: Alles auswählen

"<NUL>","<SOH>","<STX>","<ETX>","<EOT>","<ENQ>","<ACK>","<BEL>","<BS>","<HT>","<LF>","<VT>","<FF>","<CR>","<SO>","<SI>","<DLE>",
"<DC1>","<DC2>","<DC3>","<DC4>","<NAK>","<SYN>","<ETB>","<CAN>","<EM>","<SUB>","<ESC>","<FS>","<GS>","<RS>","<US>","<FNC 3>","<FNC 2>","<SHIFT>","<CODE C>",
 "<CODE B>","<FNC 4>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Codepage B:

Code: Alles auswählen

"<DEL>","<FNC 3>","<FNC 2>","<SHIFT>","<CODE C>","<FNC 4>","<CODE A>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Codepage C:

Code: Alles auswählen

<CODE B>","<CODE A>","<FNC 1>","<START A>","<START B>","<START C>","<STOP>"
Auf dieser Seite http://www.adams1.com/128table.html ist sehr schön zu sehen, welche Codepage welche Zeichen darstellen kann.

Ich weis, ist nicht so einfach, beantworte aber gerne Fragen. :wink:

Noch eine Info zum Drucken und Scannen:
Der Code128 hat eine recht hohe Informationsdichte.
Damit möchte ich sagen, je kleiner gedruckt werden soll, desto besser müssen Drucker und Barcodeleser sein.

Grüße
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Barcode Modul

Beitrag von mk-soft »

Vielen Dank fürs teilen :wink:

Kann ich bestimmt mal gut gebrauchen :allright:

P.S.
Lesen von Code128 ist auch blöd... Vor allem wenn man Groß- Kleinschreibung hat, oder Sonderzeichen verwendet.
Die einfachen Scanner liefern die Steuerzeichen wie '<Shift>' oder '<Sonderzeichen>' und wandeln den Text nicht selber um.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Danke für das Feedback mk-soft. :D
Lesen von Code128 ist auch blöd... Vor allem wenn man Groß- Kleinschreibung hat, oder Sonderzeichen verwendet.
Die einfachen Scanner liefern die Steuerzeichen wie '<Shift>' oder '<Sonderzeichen>' und wandeln den Text nicht selber um.
Also ich verwende ausschließlich Scanner unter 100€. Ich konnte dieses Problem mit einer richtigen Scanner- Konfiguration lösen.

Was ich generell mal vergessen habe zu schreiben, ist, das man die mitgelieferte Druckroutine nicht unbedingt benutzen muss.
Mit den erzeugten Sequenzen ist es ein Kinderspiel den Barcode selber zu zeichnen.

Die Code128 Sequenz für "Hallo PB-GEMEINDE 2018" (<START B>Hallo;<CODE A> PB-GEMEINDE ;<CODE C>2018;<P>" + Str(Checksum) + ";<STOP>) sieht zum Beispiel so aus:

Code: Alles auswählen

11010010000110001010001001011000011001010000110010100001000111101011101 01111011011001100111011101101000101100010011011100110100010001000110100010111 011000100011010001100010001010111000110101100010001000110100011011001100101110 111101100100111011001110010100011010001100011101011
(ohne Leerzeichen) - RSBasic

Die 1 steht für eine dunkle Linie, die 0 für eine helle Linie.

Grüße, Micha

__________________________________________________
Leerzeichen hinzugefügt
23.03.2018
RSBasic
Barcodes for PureBasic - http://micha122.bplaced.net/
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Wünsche zunächst mal allen schöne Ostertage. Wetter spielt ja einigermaßen mit, zumindest bei uns. :D

Da für die Zukunft noch einiges geplant ist, habe ich das vorhandene erst einmal dokumentiert.

Source Code, Beispiele und Dokumentation sind nun zentral an einem Ort zu finden.
http://micha122.bplaced.net

Ich denke das ist auch für Euch einfacher. :D

Zwar nur Free-hoster, aber zumindest ohne Werbung.

Grüße, Michael
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Barcode Modul

Beitrag von mk-soft »

Vielen Dank für das Modul.

Die Web-Seite sieht doch sehr gut aus :allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Barcode Modul

Beitrag von ccode_new »

Hallo Suther Michael ,
Linux: Leider bisher noch keine Rückmeldung. Tester gesucht!
Also unter Linux Mint 18.3 funktioniert es.

Ich bekomme lediglich bei den Beispielen 3 und 4 einen Fehlercode 19 geliefert.

19 = Ein Text geht über den rechten Druckrand hinaus

Anbei: Bei:
Mehrere Bracodes, Textzeilen und Styles auf einer Seite.
ist ein kleiner Buchstabendreher versteckt.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten