Seite 1 von 8

Barcode Modul

Verfasst: 18.02.2018 10:54
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.

Re: Barcode Modul

Verfasst: 20.02.2018 17:33
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.

Re: Barcode Modul

Verfasst: 20.02.2018 19:20
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:

Re: Barcode Modul

Verfasst: 20.02.2018 19:47
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!

Re: Barcode Modul

Verfasst: 22.03.2018 20:50
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

Re: Barcode Modul

Verfasst: 23.03.2018 00:34
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.

Re: Barcode Modul

Verfasst: 23.03.2018 14:20
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

Re: Barcode Modul

Verfasst: 30.03.2018 12:27
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

Re: Barcode Modul

Verfasst: 30.03.2018 14:15
von mk-soft
Vielen Dank für das Modul.

Die Web-Seite sieht doch sehr gut aus :allright:

Re: Barcode Modul

Verfasst: 30.03.2018 15:16
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.