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:

Re: Barcode Modul

Beitrag von Micha122 »

ccode_new hat geschrieben: Ich denke "fabulouspaul" mein eher spezielle Barcode- TrueType - Schriftarten.
Damit haben wir monatelang gearbeitet.
Leider lag die Fehlerquote je nach Skalierung bei über 5%. :!:

Ist halt ärgerlich wenn 34 Palettenscheine gedruckt werden und die Codes nicht lesbar sind. :oops:


Siehe auch dort: https://de.wikipedia.org/wiki/Strichcode Kapitel: Herstellung von Strichcodes
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Barcode Modul

Beitrag von Sicro »

Hallo Micha122

Sehr gutes Modul 8)
Sogar mit der MIT-Lizenz veröffentlicht -- Top :allright:

Ich verfolge den Thread schon seit einer Weile, weil ich das Modul gerne zum CodeArchiv hinzufügen möchte, wenn es ausgereift ist.
Im Archiv sind bereits Codes für die Generierung von Barcodes, aber EAN8 , EAN13 und Code128 ist da noch nicht dabei:
Code-39_1 .... Code-39_2 .... Code_UPC-A
Vielleicht könnte man die vielen Codes später zu einem einzigem Code zusammenbauen.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Hallo Sicro,
Sicro hat geschrieben:Sehr gutes Modul
Sogar mit der MIT-Lizenz veröffentlicht -- Top
Auch Dir danke fürs Feedback. :allright:
Sicro hat geschrieben:Ich verfolge den Thread schon seit einer Weile, weil ich das Modul gerne zum CodeArchiv hinzufügen möchte, wenn es ausgereift ist.
Der Aktuelle Stand:
- Erzeugen der Prüfziffern > Okay
- Erzeugen der Linien-Sequenzen > Okay
- Zeichnen der Linien > Okay aber noch nicht ganz normgerecht.

Probleme gab es lediglich mit den Fonts.
Bin aber fleißig dabei.
Sicro hat geschrieben:Vielleicht könnte man die vielen Codes später zu einem einzigem Code zusammenbauen.
Zusammenbauen ist meist mehr arbeit als neu zu schreiben. Ist jedenfalls meine Meinung.

Wenn ich das Font-Problem beseitigt habe ist eh noch einiges geplant.

Als nächstes:
SVG Export und GS1-128

Langfristig:
Code39 und Data Matrix

Grüße, Micha
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 »

Sicro hat geschrieben:Im Archiv sind bereits Codes für die Generierung von Barcodes, aber EAN8 , EAN13 und Code128 ist da noch nicht dabei:
Code-39_1 .... Code-39_2 .... Code_UPC-A
Feine Sache! :allright:
Mal sehen, vielleicht kann ich einige Teile aus den Code39 Quellcodes übernehmen/gebrauchen. :D
Barcodes for PureBasic - http://micha122.bplaced.net/
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Barcode Modul

Beitrag von ccode_new »

Sieht echt gut aus. (Insider) :wink:

Mal sehen was noch so kommt.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Hallo ccode_new,
super das der Code nun auch auf Linux funktioniert. :D

Neu Version lade ich am späten Nachmittag hoch, habe es nicht mehr geschafft.

Hier vorab schon mal ein paar PDFs.
http://micha122.bplaced.net/?Beispiele

Grüße, und nochmals danke fürs testen.

Info:
Version 1.1.2 Beta 03/04/2018 ist online.
Zuletzt geändert von Micha122 am 03.06.2018 07:34, insgesamt 1-mal geändert.
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 »

Abend,
Version 1.2.0 bringt nichts spektakuläres , jedoch recht nützliches.

Die Struktur Print_Parameter wurde um den Eintrag "Doc_Name" erweitert.
Ihr könnt nun also dem Druckauftrag einen Namen zuweisen.

Code: Alles auswählen

  Structure Print_Parameter
    Page_width.d                  ;Papierbreite in mm
    Page_height.d                 ;Papierhöhe in mm
    Left_edge.d                   ;Druckrand links in mm
    Right_edge.d                  ;Druckrand rechts in mm
    Top_edge.d                    ;Druckrand oben in mm
    Upper_edge.d                  ;Druckrand unten in mm
    Pages.i                       ;Anzahl zu druckender Seiten
    Print_Requester.b             ;#True = Es wird das Drucker Requester geöffnet. #False = Es wird der Standard Drucker verwendet.
    Doc_Name.s                    ;Dieser Text wird in der Drucker-Warteschlange angezeigt.
  EndStructure
War halt nicht so schön das jeder Eintrag in der Drucker-Warteschlange "BarcodeModul" hieß. :oops:
Oder jede vom Server automatisch generierte PDF-Kopie "BarcodeModul" hieß. :oops:


Die Syntax zum generieren von Code128 wurde vereinfacht bzw. erleichtert.
Im Modul "Common" sind alle Code128 Steuercodes nun als Konstanten definiert.
Vereinfacht das ganze eben, weil man die PB-Autovervollständigung nutzen kann. :)
Beispiel alte Syntax:

Code: Alles auswählen

"<START B>Hallo Welt ;<P>" + Str(Checksum) + ";<STOP>"
Beispiel neue Syntax:

Code: Alles auswählen

#BC128_StartB + "Hallo Welt" + #BC128_Checksum + Str(Checksum) + #BC128_Stop
Die alte Syntax kann trotzdem weiter benutzt werden falls diese besser gefällt.


Der SVG-Export, aktuell leider nur Code128, bereitete etwas schwierigkeiten.
Im Modul "Common" findet Ihr die Konstante #Code128_SVG_Correction.
Benutzt diese falls euch der Barcode-Text zu groß oder zu klein sein sollte.
Ausschnitt aus Modul "Common":

Code: Alles auswählen

  ;Wird in Barcode_SVG_Export() benutzt um die Barcode-Textlänge anzupassen.
  ;Standard ist 50%.
  ;Dies besagt: Barcode-Textlänge = ca. 50% der Barcodelänge.
  ;Zirka deshalb, weil SVG-Anzeiger wie Browser oder LibreOffice ein größeres Letter-spacing verwenden als die
  ;PureBasic Vektor-Library. Es gibt in SVG zwar die Möglichkeit dies zu korrigieren, welche aber leider ausgerechnet von
  ;LibreOffice ignoriert wurde.
  #Code128_SVG_Correction  = 50 ;%
Grüße, Michael
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Re: Barcode Modul

Beitrag von nicolaus »

@Micha122
erstmal danke fürs zur verfügung stellen!!!

Eine Frage zu dem Module und Code 128.
Werden die 4 Funktionszeichen des Code 128 auch voll unterstüzt?

Leider ist das bei sehr vielen immer genau der schwachpunkt.

Ich entwickle seit einigen Jahren für Barcodescanner von Motorola (oder jetzt eher Zebra) die dazugehörige PC Software.
Um einen Solchen Barcodescanner mit dem PC zu verbinden (via BT) muss der Scanner éinen speziellen Barcode (Code 128) scannen.
Dieser Code ist im Grunde die MAC des BT Dongles am PC, jedoch benötigt der Barcode noch Funktionszeichen und ein Führungszeichen (in den meisten fällen ein B) vor der MAC Adresse.

Wie Kann ich die Funktionszeichen in deinem Modul übergeben (wenn es geht)?

Danke und Grüße,
Nico
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Hallo nicolaus,
danke für Dein Interesse.
nicolaus hat geschrieben:Werden die 4 Funktionszeichen des Code 128 auch voll unterstüzt?
Ja, werden sie.
Codetable A und B unterstützt FNC1-4 und Codetable C FNC1.
Lediglich ein STARTA, STARTB oder STARTC gefolgt von FNC1 wird momentan nicht
zugelassen (abgefangen) da dies dem Scanner einen GS1-128 signalisieren würde.
Den GS1-128 wollte/möchte ich separat behandeln.
nicolaus hat geschrieben:Wie Kann ich die Funktionszeichen in deinem Modul übergeben (wenn es geht)?
Okay, ich bin nicht so der Schreiberling aber ich versuche es. :mrgreen:

1. Der Funktion Generate_Code128_Sequence(Code128.s) musst Du den kompletten Code128 als String übergeben.
Also mindesten Start........Checksum....STOP.

2. Um den Umgang mit den Steuercodes/Funktionszeichen zu vereinfachen habe ich Konstanten definiert.
Siehe Modul Common!

3. Ein Beispiel:
- Der Code startet mit Codetable B
- Gefolgt von FNC4
- Nun irgendein Text
- Die Prüfziffer gefolgt vom Stop-Code

Die Prüfziffer berechnen:

Code: Alles auswählen

Define Checksum = Generate_Code128_Checksum(#BC128_StartB + #BC128_FNC4 + "Dein Text oder sonstiges")
Die Linien-Sequenz generieren:

Code: Alles auswählen

Code128_Sequence.s = Generate_Code128_Sequence(#BC128_StartB + #BC128_FNC4 + "Dein Text oder sonstiges" + #BC128_Checksum + Str(Checksum) + #BC128_Stop)
Nachdem Du die Linien-Sequenz generiert hast, kannst Du den Barcode entweder drucken oder als SVG exportieren.

Grüße, Michael
Barcodes for PureBasic - http://micha122.bplaced.net/
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Re: Barcode Modul

Beitrag von nicolaus »

Hi Michael,
Erstmal danke für die schnelle Antwort.
Durch deine Antwort hat sich noch eine Frage ergeben
Micha122 hat geschrieben: .....
Nachdem Du die Linien-Sequenz generiert hast, kannst Du den Barcode entweder drucken oder als SVG exportieren.

Grüße, Michael
Verstehe ich das somit richtig und es ist aktuell "nur" möglich zu Drucken oder als SVG zu exportieren?
Genial wäre auch eine Option wo mir der Barcode als PNG im Speicher zurückgegeben wird.
Somit könnte ich dies direkt weiter verarbeiten und müsste nicht erst wieder eine Datei neu laden.

Hintergrund ist das in einem meiner Programme (die Barcodes lasse ich aktuell noch durch Zint erstellen) der Barcode nach drücken einer Tastenkombi erstellt und auf dem Monitor angezeigt wird. (Barcode muss bei jeder Tastenkombi neu erstellt werden da ja der BT Dongel gewechselt wurden sein könnte und somit eine neie MAC Adresse für diesen vorhanden sein könnte)
Die Mitarbeiter, welche den Scanner benutzen, Scannen dann direkt vom Monitor ab und der Scanner stellt die Verbindung mit dem PC her.

Wäre es möglich das Modul zu erweitern, so dass du den Barcode auch als PNG im Speicher hältst und das Handel dessen zurück gibst (z.b. mit CreateImage() )?

Danke und Grüße,
Nico
Antworten