| |
VB.NET - Ein- und UmsteigerBarcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 22.06.17 12:41 |
| Hallo liebe Community,
ich habe mir mal wieder ein kleines Tools gebastelt und stehe nun vor einem Problem. Dieses ist folgendes, ich manipuliere ein PDF Dokument mit itextsharp, dass klappt alles super. Für das letzte Eingabefeld müsste ich Zahlen eingeben und diese als Barcode ausgeben. Leider habe ich zu wenig wissen um dies zu realisieren. Vllt. kann mir jemand einen Denkanstoß oder eine Lösung bieten?
Vielen Dank im Voraus
p24
Oberfläche des Programms:
http://panorama24.eu/form1.png
Fertiges erzeugtes PDF des Programms:
http://panorama24.eu/form2.png
Projekt Download:
http://panorama24.eu/LabelGEN.zip
Hier mein Code:
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO
Public Class Form1
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Label2.Click
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnclose.Click
Me.Close()
End Sub
Private Sub btngen_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btngen.Click
Dim oldFile As String = "templates/template.pdf"
Dim newFile As String = "output/etikett.pdf"
Dim reader As New PdfReader(oldFile)
Dim size As Rectangle = reader.GetPageSizeWithRotation(1)
Dim document As New Document(size)
Dim fs As New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, _
BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb.SetColorFill(BaseColor.BLACK)
cb.SetFontAndSize(bf, 16)
cb.BeginText()
Dim platz As String = txtplatz.Text
Dim name As String = txtname.Text
Dim nr As String = txtnr.Text
Dim code As String = txtcode.Text
cb.ShowTextAligned(1, platz, 240, 204, 0)
cb.ShowTextAligned(1, name, 240, 145, 0)
cb.ShowTextAligned(1, nr, 240, 125, 0)
cb.ShowTextAligned(1, code, 240, 140, 0)
cb.EndText()
Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1)
cb.AddTemplate(page, 0, 0)
document.Close()
fs.Close()
writer.Close()
reader.Close()
MsgBox("Label erfolgreich gespeichert.", MsgBoxStyle.Information, _
Title:="Information")
End Sub
Private Sub btnprint_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnprint.Click
Dim path = System.IO.Path.Combine(Application.StartupPath, _
"output/etikett.pdf")
Process.Start(path)
End Sub
End Class
Beitrag wurde zuletzt am 22.06.17 um 12:45:11 editiert. | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 22.06.17 13:40 |
| Welcher Barcode soll es denn sein???
Gibt ja ein paar....
https://www.activebarcode.de/codes/
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 23.06.17 07:04 |
| Hallo Stefan, es geht um diesen hier: EAN-13, GTIN-13
Danke dir im Voraus & liebe Grüße
p24 | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 23.06.17 08:29 |
| Danke dir für deine schnelle Antwort. Ich bin auf folgenden Barcode Generator gestoßen:
https://www.codeproject.com/Articles/29409/EAN-Barcode-Control
dieser lässt sich auch ohne Probleme scannen, aber ich kriege das leider nicht unter einen Hut mit der Ausgabe auf meine PDF mit itextsharp
Gruße
p24 | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 23.06.17 08:35 |
| Ohne jetzt itextsharp zu kennen.....
Du kannst doch bestimmt mit itextsharp Bilder in ein PDF einfügen, oder?
Falls ja, einfach den entsprechenden Barcode temporär als Bild speichern und dann in das PDF einfügen
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 23.06.17 08:36 |
| ich versuche es | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 26.06.17 10:32 |
| okay, ich hab es leider nicht hinbekommen am Wochenende, icdh wäre also für Hilfe nach wie vor dankbar | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 26.06.17 10:56 |
| Was genau hast du nicht hinbekommen?
Den Barcode als Bild zu speichern?
Das Bild in das PDF zu bekommen?
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 26.06.17 11:12 |
| Um den Barcode des Barcodecontrols zu speichern brauchst eine extra Prozedur.
Entweder bauhst du die Druckfunktion als Property dann direkt in das Control ein oder nutzt nur diese folgenden Prozedur
Private Sub SaveAsBitmap(control As Control, fileName As String)
'getthe instance of the graphics from the control
Dim g As Graphics = control.CreateGraphics()
'new bitmap object to save the image
Dim bmp As New Bitmap(control.Width, control.Height)
'Drawing control to the bitmap
control.DrawToBitmap(bmp, New Rectangle(0, 0, control.Width, _
control.Height))
bmp.Save(fileName)
bmp.Dispose()
End Sub Aufruf z.b.
SaveAsBitmap(EaN13Barcode1, "C:\Barcode\BarcodeTMP.bmp") Das erzeugte Bild musst du dann in das PDF packen.
z.b.
https://www.mikesdotnetting.com/article/87/itextsharp-working-with-images
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 26.06.17 11:50 |
| Hallo Stefan, danke dir für deine schnelle Hilfe.
Ich bekomme es nicht hin, dass ganze unter einen Hut zu bekommen, ein Fehler nach dem anderen, wie bereits erwähnt bin ich blutiger Anfänger Cool wäre es halt, wenn man nicht per Button den Barcode zuerst erstellen muss, sondern dieser automatisch als tmp gespeichert wird bei der normalen generier Methode.
Scheinbar ist das aber noch zu viel für mich | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 26.06.17 12:05 |
| Ich lade mir mal dein Projekt runter und gucke mal was ich machen kann.
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 26.06.17 12:09 |
| Woraus setzt sich denn der Barcode zusammen?
Woher bekommst du die Werte für den Barcode?
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 26.06.17 13:06 |
| Die Werte stammen aus dem Eingabe-Feld, siehe:
http://panorama24.eu/barcode.png
Danke dir schonmal | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 26.06.17 14:02 |
| Guck mal ob du hiermit was anfangen kannst
Das Barcodesteuerelemt ist hinter deiner Picturebox versteckt.
Im Quellcode habe ich meine gemachten Änderungen kommentiert und mit '------- eingefasst
https://www.file-upload.net/download-12573063/LabelGEN.zip.html
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 26.06.17 14:31 |
| Vielen vielen Dank Stefan, ich schaue es mir heute Abend an und werde mich melden ob es funktioniert | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 27.06.17 08:38 |
| Hallo Stefan, es funktioniert jetzt alles vielen vielen Dank, lediglich das PDF Template wird nicht benutzt?
Hast Du da evtl. eine Idee woran es liegen kann? -> Dim oldFile As String = "templates/template.pdf" Der Code sieht nun wie folgt aus:
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO
Public Class Form1
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Label2.Click
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnclose.Click
Me.Close()
End Sub
Private Sub btngen_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btngen.Click
checklengh(txtcode.Text)
'-------------------------------------------
Dim BarcodePath = System.IO.Path.Combine(Application.StartupPath, _
"barcode/barcode.bmp")
EaN13Barcode.Value = txtcode.Text
SaveAsBitmap(EaN13Barcode, BarcodePath)
'-------------------------------------------
Dim oldFile As String = "templates/template.pdf"
Dim newFile As String = "output/etikett.pdf"
Dim reader As New PdfReader(oldFile)
Dim size As Rectangle = reader.GetPageSizeWithRotation(1)
Dim document As New Document(size)
Dim fs As New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, _
BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb.SetColorFill(BaseColor.BLACK)
cb.SetFontAndSize(bf, 16)
cb.BeginText()
Dim platz As String = txtplatz.Text
Dim name As String = txtname.Text
Dim nr As String = txtnr.Text
Dim code As String = txtcode.Text
cb.ShowTextAligned(0, platz, 220, 204, 0)
cb.ShowTextAligned(0, name, 220, 145, 0)
cb.ShowTextAligned(0, nr, 220, 125, 0)
cb.ShowTextAligned(1, code, 283, 14, 0)
cb.EndText()
Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1)
'-------------------------------------------
Dim BarcodeImage As iTextSharp.text.Image = Image.GetInstance( _
BarcodePath)
BarcodeImage.SetAbsolutePosition(190, 0)
document.Add(BarcodeImage)
'-------------------------------------------
document.Close()
fs.Close()
writer.Close()
reader.Close()
MsgBox("Label erfolgreich gespeichert.", MsgBoxStyle.Information,
Title:="Information")
End Sub
Private Sub btnprint_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnprint.Click
Dim path = System.IO.Path.Combine(Application.StartupPath, _
"output/etikett.pdf")
Process.Start(path)
End Sub
Private Sub SaveAsBitmap(ByVal control As Control, ByVal fileName As String)
'getthe instance of the graphics from the control
Dim g As Graphics = control.CreateGraphics()
'new bitmap object to save the image
Dim bmp As New Bitmap(control.Width, control.Height)
'Drawing control to the bitmap
control.DrawToBitmap(bmp, New System.Drawing.Rectangle(0, 0, _
control.Width, control.Height))
bmp.Save(fileName)
bmp.Dispose()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
End Sub
Private Sub txtcode_TextChanged(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles txtcode.TextChanged
txtcode.MaxLength = 12
Dim MeineZahl As Double = 0
If Not Double.TryParse(txtcode.Text, MeineZahl) Then
MsgBox("Bitte nur Zahlen eintragen, 12 Zeichen sind erforderlich!", _
MsgBoxStyle.Critical,
Title:="Bitte gültige Werte eingeben")
End If
End Sub
Private Sub checklengh(ByVal txtcode As String)
If Not txtcode.Length > 12 Then
MsgBox("Der EAN Code muss 12 Zeichen haben", MsgBoxStyle.Critical,
Title:="Bitte gültige Werte eingeben")
txtcode = vbNullString
Else
End If
End Sub
End Class | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: stefan220273 | Datum: 27.06.17 11:17 |
| Nein, leider keine Ahnung.
Ich nutze iTextSharp nicht, das was ich dir geschickt habe, habe ich mir auch anhand des Internets "gebaut".
Was mir allerdings aufgefallen ist,
checklengh(txtcode.Text) Das macht keine Sinn......der Quellcode wird trotzdem weiter ausgeführt, egal ob EAN Stellen 12 oder nicht.
Mach daraus eine Function die True oder False zurückgibt
Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
| |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: HenryV | Datum: 27.06.17 14:32 |
| Hallo p24
iTextSharp kann auch Barcodes erstellen.
Den folgenden Code irgendwo zwischen cb.BeginText() und cb.EndText() einfügen.
Dim bc As New iTextSharp.text.pdf.BarcodeEAN
bc.CodeType = iTextSharp.text.pdf.BarcodeEAN.EAN13
bc.TextAlignment = Element.ALIGN_CENTER
bc.Code = txtcode.Text
'bc.StartStopText = True
'bc.Extended = True
'bc.GenerateChecksum = True
'bc.ChecksumText = True
'bc.Font = Nothing
Dim imageEAN As iTextSharp.text.Image = bc.CreateImageWithBarcode(cb, _
iTextSharp.text.BaseColor.BLACK, iTextSharp.text.BaseColor.BLACK)
imageEAN.ScaleToFit(160, 20)
imageEAN.SetAbsolutePosition(190, 0)
cb.AddImage(imageEAN) Gruss HenryV | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: p24 | Datum: 27.06.17 14:57 |
| Hallo HenryV, danke für deinen Beitrag, funktioniert super!
Ich frage mich nur wieso er die Vorlage, also das PDF-Template nicht mehr nimmt?
Jemand eine Idee? Hier der aktuelle Code:
Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO
Public Class Form1
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Label2.Click
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnclose.Click
Me.Close()
End Sub
Private Sub btngen_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btngen.Click
Dim oldFile As String = "templates/template.pdf"
Dim newFile As String = "output/etikett.pdf"
Dim reader As New PdfReader(oldFile)
Dim size As Rectangle = reader.GetPageSizeWithRotation(1)
Dim document As New Document(size)
Dim fs As New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, _
BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb.SetColorFill(BaseColor.BLACK)
cb.SetFontAndSize(bf, 16)
cb.BeginText()
Dim platz As String = txtplatz.Text
Dim name As String = txtname.Text
Dim nr As String = txtnr.Text
cb.ShowTextAligned(0, platz, 220, 204, 0)
cb.ShowTextAligned(0, name, 220, 145, 0)
cb.ShowTextAligned(0, nr, 220, 125, 0)
Dim bc As New iTextSharp.text.pdf.BarcodeEAN
bc.CodeType = iTextSharp.text.pdf.BarcodeEAN.EAN13
bc.TextAlignment = Element.ALIGN_CENTER
bc.Code = txtcode.Text
'bc.StartStopText = True
'bc.Extended = True
'bc.GenerateChecksum = True
'bc.ChecksumText = True
'bc.Font = Nothing
Dim imageEAN As iTextSharp.text.Image = bc.CreateImageWithBarcode(cb, _
iTextSharp.text.BaseColor.BLACK, iTextSharp.text.BaseColor.BLACK)
imageEAN.ScaleToFit(250, 60)
imageEAN.SetAbsolutePosition(190, 35)
cb.AddImage(imageEAN)
cb.EndText()
Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1)
document.Close()
fs.Close()
writer.Close()
reader.Close()
MsgBox("Label erfolgreich gespeichert.", MsgBoxStyle.Information,
Title:="Information")
End Sub
Private Sub btnprint_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnprint.Click
Dim path = System.IO.Path.Combine(Application.StartupPath, _
"output/etikett.pdf")
Process.Start(path)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
End Sub
Private Sub txtcode_TextChanged(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles txtcode.TextChanged
End Sub
End Class | |
Re: Barcode aus zahlen generieren und in PDF einfügen | | | Autor: HenryV | Datum: 27.06.17 15:51 |
| Dir ist die AddTemplate-Zeile abhanden gekommen
Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1)
cb.AddTemplate(page, 0, 0) | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|