Nach vielen Recherchen gelang es mir, Barcode in meinem Bericht einzubetten und es unter Verwendung Code 128
Schriftart laufen zu lassen.
die Schriftart an sich ist nicht genug, da Sie den Text zuerst vorbereiten müssen, damit der Barcode scanfähig ist, folgende Lösung erfordert nicht, die Schriftart auf den Klientenmaschinen zu installieren, Sie müssen nur installieren es auf dem Server:
Zuerst müssen Sie Code 128
Schriftart installieren, wenn Sie nicht bereits getan! Sie können es von here herunterladen.
Öffnen Sie Ihren Bericht oder erstellen Sie einen neuen Bericht.
Wir brauchen System.Drawing
DLL
Datei als Verweis hinzuzufügen:
Dies kann, indem Sie auf den Berichtseigenschaften erfolgen (Rechtsklick außerhalb des Körpers ->Berichtseigenschaften), klicken Sie auf Referenzen Registerkarte, klicken Sie auf Hinzufügen Schaltfläche in Hinzufügen oder Entfernen von Baugruppen Abschnitt, klicken Sie auf die Schaltfläche Öffnen ... Suchen Sie nach C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll
Datei, und klicken Sie auf Öffnen Sie.
Sie sollten etwas davon haben:
- Jetzt müssen wir einige benutzerdefinierte Code zu dem Bericht hinzuzufügen:
Gehen Sie zu Code Tab im Bericht t Eigenschaften, kopieren und den folgenden Code ein und klicken Sie Ok:
Function StringToBarcode(value As String) As String
Dim charPos, minCharPos As Integer
Dim currentChar, checksum As Integer
Dim isTableB As Boolean = True, isValid As Boolean = True
Dim returnValue As String = String.Empty
If (value Is Nothing OrElse value.Length = 0) Then
Return String.Empty
End If
'Check for valid characters
For charCount As Integer = 0 To value.Length - 1
currentChar = Asc(value.Substring(charCount, 1))
If (Not (currentChar >= 32 AndAlso currentChar <= 126)) Then
isValid = False
Exit For
End If
Next
If Not (isValid) Then Return returnValue
charPos = 0
While (charPos < value.Length)
If (isTableB) Then
'See if interesting to switch to table C
'yes for 4 digits at start or end, else if 6 digits
If (charPos = 0 OrElse charPos + 4 = value.Length) Then
minCharPos = 4
Else
minCharPos = 6
End If
minCharPos = IsNumber(value, charPos, minCharPos)
If (minCharPos < 0) Then
'Choice table C
If (charPos = 0) Then
'Starting with table C
'char.ConvertFromUtf32(205)
returnValue = Chr(205).ToString()
Else
'Switch to table C
returnValue = returnValue + Chr(199).ToString()
End If
isTableB = False
Else
If (charPos = 0) Then
'Starting with table B
returnValue = Chr(204).ToString()
'char.ConvertFromUtf32(204);
End If
End If
End If
If (Not isTableB) Then
'We are on table C, try to process 2 digits
minCharPos = 2
minCharPos = IsNumber(value, charPos, minCharPos)
If (minCharPos < 0) Then
'OK for 2 digits, process it
currentChar = Integer.Parse(value.Substring(charPos, 2))
If (currentChar < 95) Then
currentChar = currentChar + 32
Else
currentChar = currentChar + 100
End If
returnValue = returnValue + Chr(currentChar).ToString()
charPos += 2
Else
'We haven't 2 digits, switch to table B
returnValue = returnValue + Chr(200).ToString()
isTableB = True
End If
End If
If (isTableB) Then
'Process 1 digit with table B
returnValue = returnValue + value.Substring(charPos, 1)
charPos += 1
End If
End While
'Calculation of the checksum
checksum = 0
Dim loo As Integer
For loo = 0 To returnValue.Length - 1
currentChar = Asc(returnValue.Substring(loo, 1))
If (currentChar < 127) Then
currentChar = currentChar - 32
Else
currentChar = currentChar - 100
End If
If (loo = 0) Then
checksum = currentChar
Else
checksum = (checksum + (loo * currentChar)) Mod 103
End If
Next
'Calculation of the checksum ASCII code
If (checksum < 95) Then
checksum = checksum + 32
Else
checksum = checksum + 100
End If
' Add the checksum and the STOP
returnValue = returnValue + _
Chr(checksum).ToString() + _
Chr(206).ToString()
Return returnValue
End Function
Function IsNumber(InputValue As String, CharPos As Integer, MinCharPos As Integer) As Integer
MinCharPos -= 1
If (CharPos + MinCharPos < InputValue.Length) Then
While (MinCharPos >= 0)
If (Asc(InputValue.Substring(CharPos + MinCharPos, 1)) < 48 _
OrElse Asc(InputValue.Substring(CharPos + MinCharPos, 1)) > 57) Then
Exit While
End If
MinCharPos -= 1
End While
End If
Return MinCharPos
End Function
Public Function Code128(ByVal stringText As String) As Byte()
Dim result As Byte() = Nothing
Try
result = GenerateImage("Code 128", StringToBarcode(stringText))
Catch ex As Exception
End Try
Return result
End Function
Public Function GenerateImage(ByVal fontName As String, ByVal stringText As String) As Byte()
Dim oGraphics As System.Drawing.Graphics
Dim barcodeSize As System.Drawing.SizeF
Dim ms As System.IO.MemoryStream
Using font As New System.Drawing.Font(New System.Drawing.FontFamily(fontName), 30)
Using tmpBitmap As New System.Drawing.Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
oGraphics = System.Drawing.Graphics.FromImage(tmpBitmap)
oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel
barcodeSize = oGraphics.MeasureString(stringText, font)
oGraphics.Dispose()
End Using
Using newBitmap As New System.Drawing.Bitmap(barcodeSize.Width, barcodeSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
oGraphics = System.Drawing.Graphics.FromImage(newBitmap)
oGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel
Using oSolidBrushWhite As New System.Drawing.SolidBrush(System.Drawing.Color.White)
Using oSolidBrushBlack As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
oGraphics.FillRectangle(oSolidBrushWhite, New System.Drawing.Rectangle(0, 0, barcodeSize.Width, barcodeSize.Height))
oGraphics.DrawString(stringText, font, oSolidBrushBlack, 0, 0)
End Using
End Using
ms = New System.IO.MemoryStream()
newBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
End Using
End Using
Return ms.ToArray()
End Function
ein Bild in Ihren Bericht einfügen, und wählen Sie Datenbank als die Bildquelle, und verwenden als image/png
MIMI Typ:
Klicken Sie auf fx Taste in Verwenden Sie dieses Feld Taste, und diese Funktion =Code.Code128(Fields!your_field_name.Value)
, drücken Ok und Ok verwenden.
Führen Sie den Bericht, jetzt haben Sie einen Barcode :)
Ich habe hatte Glück mit dieser Schriftart: http://www.squaregear.net/fonts/free3of9.shtml –