Ultimamente mi sono imbattuto nella creazione di un programma che stampasse codice a barre per il magazzino e per farlo ho utilizzato la libreria iTextSharp (disponibile su Sourceforce) che consente di interagire con file in formato PDF e consente anche di generare Barcode in diversi formati. La libreria è molto diffusa tra gli sviluppatori di applicazioni Java, .NET, Android per creare e manipolare file in formato PDF.
In questo Post pubblicherò i pezzi di codice che ho creato per stampare un barcode e salvarlo in un file PDF e stamparlo.
La maschera che ho creato è la seguente:
- Text box dove inserire la stringa da convertire
- Un pulsante
- Incrementatore etichette da stampare
Elenco librerie da importare:
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports iTextSharp.text
Imports System.IO
Imports iTextSharp.text.pdf
Codice bottone stampa (all’inizio imposto la dimensione del documento da realizzare )
Dim doc As New Document(New iTextSharp.text.Rectangle(50, 12), 80, 20, 1, 1)
Dim n As Integer
Dim nMax As Integer
nMax = N1.Value ‘verifico quante copie fare
Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + “/codes.pdf”, FileMode.Create))
doc.Open()
Try
Dim img1 As System.Drawing.Image = Nothing
For n = 1 To nMax
Dim dt As New DataTable()
dt.Columns.Add(“Codice”)
dt.Columns.Add(“Data”)
For i As Integer = 0 To 0
Dim row As DataRow = dt.NewRow()
row(“Codice”) = Me.TextBox1.Text
row(“Data”) = “Data imballo ” + Now
dt.Rows.Add(row)
Next
For i As Integer = 0 To dt.Rows.Count – 1
doc.NewPage()
Dim cb1 As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_BOLDITALIC, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb1.SetFontAndSize(bf, 4.5F)
cb1.BeginText()
cb1.SetTextMatrix(1.2F, 8.5F)
cb1.ShowText(“Info”)
cb1.EndText()
Dim cb2 As PdfContentByte = writer.DirectContent
Dim bf1 As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb2.SetFontAndSize(bf1, 2.3F)
cb2.BeginText()
cb2.SetTextMatrix(1.5F, 5.75F)
cb2.ShowText(dt.Rows(i)(“Data”).ToString())
cb2.EndText()
Dim cb As iTextSharp.text.pdf.PdfContentByte = writer.DirectContent
Dim bc As iTextSharp.text.pdf.Barcode128 = New Barcode128()
bc.TextAlignment = Element.ALIGN_LEFT
bc.Code = dt.Rows(i)(“Codice”).ToString()
bc.BarHeight = 10
bc.StartStopText = False
bc.CodeType = iTextSharp.text.pdf.Barcode128.EAN13
bc.Extended = True
Dim img As iTextSharp.text.Image = bc.CreateImageWithBarcode(cb, iTextSharp.text.BaseColor.BLACK, iTextSharp.text.BaseColor.BLACK)
cb.SetTextMatrix(1.5F, 3.0F)
img.ScaleToFit(40, 5)
img.SetAbsolutePosition(1.5F, 0.5)
cb.AddImage(img)
Next
Next
doc.Close()
System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + “/codes.pdf”)
Catch
Finally
doc.Close()
End Try
Create una classe e chiamatela Program.vb
Classe Program.vb
Imports System.Collections.Generic
Imports System.Windows.Forms
Namespace BarLabel
NotInheritable Class Program
<STAThread> _
Private Shared Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New Form1())
End Sub
End Class
End Namespace