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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Barcode Modul

Beitrag von ccode_new »

Hallo,

deine Änderungen sind ja ganz nett.

Es wird dadurch aber nichts am bestehenden Problem gelöst.

Diese Formel wirft doch trotzdem den Fehler bei den Schriftarten.

Text_width.d = VectorTextWidth(Text()\Text) ;Die Textgrößen bleiben doch trotzdem größer.
Text_height.d = VectorTextHeight(Text()\Text)

Text()\Text_PosX + Text_width.d > *Printer\Page_width - *Printer\Right_edge

.................
Was du machen könntest:

-> Wenn die Textgröße größer als die Barcodegröße ist sollte automatisch eine kleinere Schriftart gewählt werden.
(Bis die Textbreite den Barcode nicht mehr überschreitet. Die Texthöhe sollte dabei proportional angepasst werden.)

Alles andere ist zwar ganz nett, bringt aber hier überhaupt nichts.

.....

Code: Alles auswählen

  ;********************************************************************************************************************
        ; Barcode Drucken Ende                                                                                              *
        ;********************************************************************************************************************
      Next 
      ;********************************************************************************************************************
      ; Texte drucken                                                                                                     *
      ;********************************************************************************************************************
      ForEach Text()
        ;Zeichensatz für Text_Line laden und Text zeichnen
        If Text()\Font <> ""
          Text_Font.i = LoadFont(#PB_Any, Text()\Font, Text()\Font_Size, Text()\Text_Style) ;Hier sollte etwas geändert werden.
          If Text_Font.i = 0
            ProcedureReturn 17
          EndIf
          Text_FontID.i = FontID(Text_Font.i)
        EndIf
Text()\Font_Size ist hier nicht abgesichert und lässt nur Fehler zu.
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 »

ccode_new hat geschrieben: Hallo,

deine Änderungen sind ja ganz nett.

Es wird dadurch aber nichts am bestehenden Problem gelöst.

Diese Formel wirft doch trotzdem den Fehler bei den Schriftarten.
Puuhhh, entweder liest Du meine Beiträge nicht, oder ich bin zu dumm das richtig rüber zu bringen. :oops:
Nochmals:
Die Textzeile unterhalb des Barcodes hat überhaupt nichts mit den frei definierbaren Textzeilen zutun.
Der Codeschnipsel den du gepostet hast ist für die frei definierbaren Textzeilen zuständig.
Es gibt keine Formel mehr. Du kannst 10 feste Größen vergeben!
ccode_new hat geschrieben:Was du machen könntest:

-> Wenn die Textgröße größer als die Barcodegröße ist sollte automatisch eine kleinere Schriftart gewählt werden.
(Bis die Textbreite den Barcode nicht mehr überschreitet. Die Texthöhe sollte dabei proportional angepasst werden.)
Das ist eine Klasse Idee. :allright:
Werde ich mal versuchen zu realisiern.
Manchmal hat man eben so nen Tunnelblick und man macht es sich unnötig schwer. :oops:

Dies Frage hast Du leider noch nicht beantwortet:
Micha122 hat geschrieben:Noch eine wichtige Frage?
Werden unter Linux denn zumindest die Linien richtig gezeichnet?
Drucke bitte mal einen Code ohne Font und miss nach!
Der Barcode-Font wird weggelassen, wenn Du bei Font einen leeren String einträgst ("").
Kannst auch einfach Beispiel4 ausdrucken und den untersten Barcode ausmessen.
:?: :?:

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

Puuhhh, entweder liest Du meine Beiträge nicht, oder ich bin zu dumm das richtig rüber zu bringen. :oops:
Nochmals:
Die Textzeile unterhalb des Barcodes hat überhaupt nichts mit den frei definierbaren Textzeilen zutun.
Der Codeschnipsel den du gepostet hast ist für die frei definierbaren Textzeilen zuständig.
Es gibt keine Formel mehr. Du kannst 10 feste Größen vergeben!
Ja es hat nichts damit zu tun und deshalb ein bisschen unnötig.

Die Formel existiert genauso weiter in deinem Quellcode.
Und die Textbreite und Texthöhe wird eben bei Linux größer dargestellt und auch so ausgegeben.
Fontsize 22 hat halt unter Linux z.Bsp. eben nicht die Ausmaße wie unter Windows.
Die Millimeter-Dimensionen sind aber trotzdem korrekt.

Und das hier wirft eben dann einen Fehler 19.

Text()\Text_PosX + Text_width.d > *Printer\Page_width - *Printer\Right_edge

Man kann ja trotzdem eine freie Größe angeben: zum Beispiel: "Text()\Font_Size = 24"

-> Das würde aber zu einem unnötigen Fehler führen, der so unter Windows nicht bestehen würde.

Daher mein Anpassungstipp.

Text()\Font_Size sollte nie direkt bei LoadFont landen.

Sondern eben nach der echten Größe (VectorTextWidth() ) überprüft werden.

Außerdem habe ich die Frage mit der Barcodegröße schon beantwortet.

Ich zitiere mich:
Die Striche werden korrekt angezeigt.
Es ist nur die Schrift die immer größer ist.

Anbei:
Kleine Aussagenkorrektur von mir:

All diese Funktionen liefern auch unter Linux korrekte Werte.

TextWidth
TextHeight
VectorTextHeight
VectorTextWidth
VectorOutputHeight
VectorOutputWidth
.....

Aber die Zeichenausmaße unterscheiden sich bei Linux und Windows.
Dies führt zu Probleme.

Windows misst trotzdem etwas genauer.
Bei Linux wird nicht ganz so genau gemessen. (Es wird ein etwas größerer Rahmen um den Text mit einkalkuliert.)
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,
ccode_new hat geschrieben:Außerdem habe ich die Frage mit der Barcodegröße schon beantwortet.
Sorry, hatte ich echt überlesen.
Aber schön das zumindest das unter Linux identisch mit Windows ist. :D
ccode_new hat geschrieben:Daher mein Anpassungstipp.

Text()\Font_Size sollte nie direkt bei LoadFont landen.

Sondern eben nach der echten Größe (VectorTextWidth() ) überprüft werden.
Da hast Du recht. Ich werde das auch beherzigen.

Die Sache ist die:
Ich muss/werde die Druckfunktion komplett neu schreiben müssen.
Die Buchstaben/Ziffern müssen gezeichnet werden während der Code gezeichnet wird.
Und ich werde jeden Barcode-Typ gesondert behandeln müssen. :cry:
Okay, werden dann eben statt 300 Zeilen geschätzt 2000. :oops:

Habe morgen mehr Zeit und werde dann genauer erklären warum.

Grüße und danke fürs testen.
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 »

Bild
Okay, werden dann eben statt 300 Zeilen geschätzt 2000. :oops:

Habe morgen mehr Zeit und werde dann genauer erklären warum.
Das "Warum" würde mich dann schon interessieren.

Bild
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Barcode Modul

Beitrag von mk-soft »

Ich denke es nicht zu kompliziert zu machen.

Es reicht ja eine Compiler-Option für die Schriften einzufügen.

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    Macro FontHeight(Height)
      (Height)
    EndMacro  
  CompilerCase #PB_OS_Linux
    Macro FontHeight(Height)
      Int(0.8 * Height)
    EndMacro  
  CompilerCase #PB_OS_MacOS
    Macro FontHeight(Height)
      Int(1.1 * Height)
    EndMacro  
CompilerEndSelect

Debug FontHeight(11)
Somit ändert sich nur die Übergabe des Parameters bei Loadfont...
Die Faktoren müssen aber noch angepasst werden.
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 »

Zunächst wünsche ich allen frohe Ostern! :D
ccode_new hat geschrieben:Das "Warum" würde mich dann schon interessieren.
Auf den ersten Blick sehen Barcodes ziemlich simpel aus.
Aber: Der Schein trügt und wenn man sich zumindest mal annähernd an DIN oder Norm
orientieren möchte trügt der Schein eben gewaltig.
mk-soft hat geschrieben:Ich denke es nicht zu kompliziert zu machen.

Es reicht ja eine Compiler-Option für die Schriften einzufügen.
Ja so hatte ich das auch mal vor.
Ist aber eigentlich quatsch.
Das ganze ist/war ja kein Linux Problem, sonder einfach nur ein völlig falsches Code-Konzept :oops:


Hier ein GTIN-13 aus dem Laden:
Bild

Deutlich zu sehen:
Die Sequenzen Start, Center und End gehen deutlich in den Text Bereich.
Die ersten Ziffern befinden sich zwischen Start und Center die letzten zwischen Center und End.
Die Prüfziffer erscheint überhaupt nicht unter dem Code.

Hier eine GTIN-13 von einer Obstwaage gedruckt:
Bild

Obwohl dieser Code im Laden nur für interne Zwecke benutzt wird (zu erkennen an der vorangestellten 2), entspricht er der Norm
Entspricht er wirklich der Norm?
Deutlich zu sehen: Die Obstwaage druckt auch die Prüfziffer.

Fazit: Bei GTIN-8/13 muss ich gravierend nachbessern.

Wie ich den Code128 handeln werde weis ich noch nicht so wirklich.
Er hat keine feste Anzahl Linien. Ein funktionierender Code128 kann im Prinzip zu 100% auch nur Steuercodes enthalten.

Erstmal Danke für Eure Arbeit!
Zuletzt geändert von Micha122 am 03.06.2018 07:35, insgesamt 1-mal geändert.
Barcodes for PureBasic - http://micha122.bplaced.net/
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Barcode Modul

Beitrag von fabulouspaul »

Hallo Micha,

prima Sache, dein Barcode-Modul! :allright:

Mich würde interessieren, warum Du nicht auf entsprechende TTF-Fonts zurück greifst? So habe ich das bisher gehandhabt und ganz gute Ergebnisse erzielt.
Kannst Du mir kurz erklären, welche Vorteile Deine Vorgehensweise hat (außer, dass man die entsprechenden Fonts nicht auf dem System installieren muss)?

Meine Frage ist nicht als Kritik zu verstehen, das Modul ist eine respektable Leistung, aber ich bin von Haus aus faul und frage mich, ob mir was entgangen ist. :mrgreen:
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

Re: Barcode Modul

Beitrag von Micha122 »

Hallo fabulouspaul,
danke für Dein Feedback. :D
fabulouspaul hat geschrieben:Mich würde interessieren, warum Du nicht auf entsprechende TTF-Fonts zurück greifst? So habe ich das bisher gehandhabt und ganz gute Ergebnisse erzielt.
Kannst Du mir kurz erklären, welche Vorteile Deine Vorgehensweise hat (außer, dass man die entsprechenden Fonts nicht auf dem System installieren muss)?
Die Sache ist die:
Ich programmiere zwar schon seit einigen Jahren aber leider monoton fast immer das gleiche.
Mal ne kleine Retouren-Software, dann mal wieder ein kleines Datenbank Frontend ..........
Kaum zu glauben aber ich habe mit diesem Modul das erste mal eine Linie gezeichnet. :oops:
Ich habe auch immer nur die Standard System Fonts benutzt. :oops:
fabulouspaul hat geschrieben:Meine Frage ist nicht als Kritik zu verstehen, das Modul ist eine respektable Leistung, aber ich bin von Haus aus faul und frage mich, ob mir was entgangen ist.
Kritik, egal ob positiv oder negativ ist immer willkommen. Hilft ungemein ein Projekt zu verbessern und Fehler zu erkennen.
Okay, das TTFs Vektor basierend sind und somit besser skalierbar sind, soviel weis ich zumindest.
Kann ich die so ohne weiteres mit PB benutzen? :?:

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

Ich denke "fabulouspaul" meint eher spezielle Barcode- TrueType - Schriftarten.

Wie hier:
http://www.1001fonts.com/barcode-fonts.html
oder hier
http://www.millstone.de/Barcode_Fonts/b ... fonts.html
,etc.
Zuletzt geändert von ccode_new am 01.04.2018 15:05, insgesamt 1-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

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