IronBarcode (preferred)
We want to print a QR Code in a Label with iTextSharp. We use IronBarcode to generate the Barcode. Also see: IronBarcode Tutorial
var label = new Label(Enums.Alignment.CENTER);
// label.AddText("Nr. " + index.ToString("000000"), "Verdana", 12, embedFont: true); // YEAH this works fine
var qrcode = QRCodeWriter.CreateQrCode(index.ToString(), 100);
var image = qrcode.GetInstance(); image.ScaleToFitHeight = false;
label.AddImage(image);
labelCreator.AddLabel(label);
Error:
"GeneratedBarcode" contain no defintion for "GetInstance", and there is no method who would accept an argument from typ "GeneratedBarcode".
QRCoder
Also we tried it with QRCoder / Found here: QRCoder Tutorial
var label = new Label(Enums.Alignment.CENTER);
// label.AddText("Nr. " + index.ToString("000000"), "Verdana", 12, embedFont: true); // YEAH this works fine
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(index.ToString(), QRCodeGenerator.ECCLevel.Q);
var qrCode = new Base64QRCode(qrCodeData);
var qrCodeImageAsBase64 = qrCode.GetGraphic(8);
var imageBytes = Convert.FromBase64String(qrCodeImageAsBase64);
var image = Image.GetInstance(imageBytes);
image.ScaleAbsoluteWidth(40);
image.ScaleAbsoluteHeight(40);
label.AddImage(image);
labelCreator.AddLabel(label);
Error:
"Image" contain no defintion for "GetInstance".
Other try
If we use using iTextSharp.text;
and using iTextSharp.text.pdf;
Error:
Argument "1": Convert from "iTextSharp.text.Image" to "System.IO.Stream" not possible
How we can fix this problem? Thanks for your input!
~ edit
This is our function to add the Image from label.cs
. Have a look to this project we use as basic: SharpPDFLabel.
public void AddImage(Stream img)
{
var mem = new System.IO.MemoryStream();
CopyStream(img, mem);
_images.Add(mem.GetBuffer());
}
In a second step we want to add an image to our barcode, preferred is the solution of IronBarcode.
SOLUTION
We open a MemoryStream and put into them our QR / picture. In our function behind them we want to read a "Stream qrstream". It must be "MemoryStream qrstream".
We use now "Spire Barcode" instead of "IronBarcode" or "QRCoder"
wrong
public void AddImage(Stream qrstream)
{
// var mem = new MemoryStream(); // not needed
// CopyStream(qrstream, mem); // not needed
_images.Add(qrstream.GetBuffer());
}
correct
public void AddImage(MemoryStream qrstream)
{
// var mem = new MemoryStream(); // not needed
// CopyStream(qrstream, mem); // not needed
_images.Add(qrstream.GetBuffer());
}
function to create stream
//Create a BarcodeSettings object
BarcodeSettings settings = new BarcodeSettings();
//Set barcode type, error correction level, data, etc.
settings.Type = BarCodeType.QRCode;
settings.QRCodeECL = QRCodeECL.H;
settings.X = 1.4f;
settings.AutoResize = true;
settings.HasBorder = false;
settings.ShowText = false;
string data = "MY TEXT IN QR CODE";
settings.Data = data;
settings.Data2D = data;
//Generate QR image based on the settings
BarCodeGenerator generator = new BarCodeGenerator(settings);
Image image = generator.GenerateImage();
// Put Image to Stream
var qrstream = new System.IO.MemoryStream();
image.Save(qrstream, System.Drawing.Imaging.ImageFormat.Png);
// Put QR Code to Label as Image
label.AddImage(qrstream);
function to add image to cell
foreach (var img in _images)
{
var pdfImg = iTextSharp.text.Image.GetInstance(img);
cellContent.Add(new Chunk(pdfImg, 0, 0));
}
Running now, great!