Barcode zeichnen
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Joshi.
-
-
-
-
-
DTF schrieb:
Nimm einen Barcode-Font--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Zum Font-Namen: Kommt auf den zu generierenden Code an. Code39 wäre eine Möglichkeit. Die kannst Du dann Deinem Programm mitgeben und dann wohl zur Laufzeit einbinden.Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Ich denke mir fehlt hier noch ein großer Punkt an Hintergrundwissen. Wie binde ich den Font denn zur Laufzeit ein?
2 of 5 Interleaved wäre der Code meiner Wahl, aber es tut bestimmt auch ein anderer. Haben die Prüfziffern einen Einfluss auf die Darstellung des Codes?
Hiermit habe ich es versucht, aber das ist wie gewohnt eine Ziffernfolge:
VB.NET-Quellcode
- Friend Class Form1
- Private ReadOnly Barcode As New Font("Code 39", 24)
- Private Sub Print()
- Using dlg As New PrintPreviewDialog
- Me.PrintDocument1.DocumentName = "Test"
- dlg.Document = Me.PrintDocument1
- dlg.PrintPreviewControl.Zoom = 1.0
- dlg.ShowDialog()
- End Using
- End Sub
- Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- e.Graphics.DrawString("1234567890", Barcode, Brushes.Black, New Point(300, 300))
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Print()
- End Sub
- End Class
Kostenlos gefunden habe ich jetzt nur eine Truetype-Schriftartendatei für LibreBarcode128, ich schätze mal die muss ich irgendwie einbinden?
-
@Haudruferzappeltnoch Lade den Font aus einer Datei und verwende ihn:
stackoverflow.com/questions/19…t-from-a-file-in-vb-and-cFalls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Es hängt auch davon ab, was die lesende Gegenstelle imstande ist zu lesen und auszuwerten.
Üblicherweise arbeite ich mit Code128, weil der gängig ist und auch sicherer zu lesen als 2/5i
Oder ich nehme gleich QR-Code.
Wer soll deinen Barcode letztendlich denn lesen und auswerten?
Haudruferzappeltnoch schrieb:
e.Graphics.DrawString("1234567890", Barcode, Brushes.Black, New Point(300, 300))--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
--Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()
-
Also einbinden habe ich nun verstanden, denke ich, leider weiterhin keine Änderung die Ziffern bleiben Ziffern:
VB.NET-Quellcode
- Friend Class Form1
- Private Barcode As Font
- Private ReadOnly myFont As New PrivateFontCollection
- Sub New()
- InitializeComponent()
- PreLoad()
- End Sub
- Private Sub PreLoad()
- Dim path = Application.StartupPath & "\Barcode128.ttf"
- myFont.AddFontFile(path)
- Barcode = New Font(myFont.Families(0), 24)
- End Sub
- Private Sub Print()
- Using dlg As New PrintPreviewDialog
- Me.PrintDocument1.DocumentName = "Test"
- dlg.Document = Me.PrintDocument1
- dlg.PrintPreviewControl.Zoom = 1.0
- dlg.ShowDialog()
- End Using
- End Sub
- Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- e.Graphics.DrawString("1234567890", Barcode, Brushes.Black, New Point(300, 300))
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Print()
- End Sub
- End Class
@petaod Ich hab gerade mal geschaut Barcode 128 und QR-Code würde auch gehen. Ob das Lesegerät das lesen kann, weiß ich leider noch nicht wie oben beschrieben habe ich noch gar keinen Barcode. Ich denke mal um Prüfzifferen kann ich mir hinterher Gedanken machen, erstmal muss ich einen maschinenlesbaren String erzeugen können.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()
-
Haudruferzappeltnoch schrieb:
erstmal muss ich einen maschinenlesbaren String erzeugen können
Bei Code128 z.B. benötigst du zwingend StartCode, Prüfziffer und EndCode damit das Lesegerät den Code als gültig erkennt.
Theorie
--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Zitat von mir 2023:
Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig -
Ändert nix, außer dass es syntaktisch klappt. Das PrintDocument übernimmt es nicht.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Merkwürdig. Ich hab einfach mal den FOnt installiert, dann geht das auch im PrintDocument. Scheint ein blöder Bug zu sein, wenn ich einem Label den Font zugewiesen hab wurde der Barcode angezeigt. Auch beim malen auf's Form ging das. Ohne zu installieren müsste man ein Image rendern und das dann malen um eine installation zu umgehen.
Zitat von mir 2023:
Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig -
Barcodes von Hand zu erzeugen kann eine Herausforderung sein.
Die Library Spire.Barcode kann so ziemlich alles erzeugen, Barcodes, QR-Codes...
Und gibt es als kostenlose Communtiy Edition. Auch als nuget-Package.
Wenn du dich registrierst, kriegst du sogar einen kostenlosen Key, um das ice-blue-Logo zu entfernen.--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Jou, merkwürdig.
wenn ich im PrintDocument.Print-Event einen Arial-Font erzeuge (Bold, Italic, Underline), klappt das.
Ein Barcodefont kommt zwar im DrawString-Befehl an, wird aber iwie verworfen.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Ausprobiert habe ich es zwar noch nicht, aber hört sich vielversprechend an.
dotnetpro.de/workout/c/pdfs-barcodes-c-erzeugen-1677579.html
codeproject.com/Articles/57068…ass-Library-Version-2-0-0
Freundliche Grüsse
exc-jdbi -
Hm ich hab das Ganze auf ne PictureBox gemalt, dann kommt da auch ein Barcode bei rum, dann wollte ich das als Bild auf mein PrintDocument packen, aber da verschwindet der Barcode diesmal ganz.
VB.NET-Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim g = picBCode.CreateGraphics
- g.DrawString("1234567890", Barcode, Brushes.Black, New Point(20, 40))
- picBCode.DrawToBitmap(PrepBitmap, New Rectangle(0, 0, 240, 128))
- Print()
- End Sub
- Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- e.Graphics.DrawImage(PrepBitmap, 350, 300)
- End Sub
Was Prüfziffer und Startcode angeht, welche Zeichen muss ich im String denn angeben für CODE A oder FNC1?
Wie mache ich es denn mit einem QR-Code? Das geht ja nicht mit Font, da wird der Bug dann ja auch entfallen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()
-
@Haudruferzappeltnoch Probier mal diesen hier (getestet):
Spoiler anzeigen VB.NET-Quellcode
- Imports System.Drawing.Text
- Public Class Form1
- Dim myFonts As New PrivateFontCollection
- Dim myFont As Font
- Dim bmp As New Bitmap(200, 100)
- Public Sub New()
- InitializeComponent()
- Me.myFont = Me.Font ' initial setzen
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Dim path = "D:\Projekte\___diverse Snippets\Font\Barcode.ttf" ' Pfad zu Deinem Font
- If Not IO.File.Exists(path) Then
- MessageBox.Show("Nein")
- Return
- End If
- Me.myFonts.AddFontFile(path)
- Me.myFont = New Font(myFonts.Families(0), 20)
- Me.PictureBox1.Invalidate()
- End Sub
- Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
- e.Graphics.DrawString("Blaklsdvölkkjadfv", Me.myFont, Brushes.Black, New Point(30, 100))
- Using g = Graphics.FromImage(bmp)
- g.Clear(Color.White)
- g.DrawString("Blaklsdvölkkjadfv", Me.myFont, Brushes.Black, New Point(10, 10))
- End Using
- 'bmp.Save("d:\temp\barcode.png") ' Testausgabe
- End Sub
- Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
- e.Graphics.DrawImage(bmp, New PointF(100, 100))
- e.Graphics.DrawImage(bmp, New RectangleF(100, 100, 500, 250), New RectangleF(0, 0, 200, 100), GraphicsUnit.Pixel)
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Using dlg = New PrintPreviewDialog
- dlg.Document = Me.PrintDocument1
- dlg.ShowDialog()
- End Using
- End Sub
- End Class
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Wenn es beim Font bleibt, könntest du Fonts aus Resources nutzen (Ohne physikalische Kopie auf Festplatte) verwenden.bit.ly/DotNetSearch
Code Konverter:
Online: @ developerfusion.com, @ telerik.com
Offline stand alone: Convert .NET, C# to VB Converter
VS Extensions: Convert .NET (Based on .NET 4.5), Language Convert
-
Benutzer online 2
2 Besucher
-
Ähnliche Themen
-
Specials - - Sonstige Problemstellungen
-
a.setzer - - Schnittstellen-/Hardwareprogrammierung
-
9 Benutzer haben hier geschrieben
- Haudruferzappeltnoch (8)
- RodFromGermany (5)
- petaod (4)
- DTF (4)
- VaporiZed (3)
- Montoyafan (1)
- Joshi (1)
- FormFollowsFunction (1)
- exc-jdbi (1)