Я должен создать этикетку со штрих-кодом code39 и некоторым информационным текстом.
Я создаю ярлык внутри GroupBox, который прекрасно работает. После создания этикетки мне нужно распечатать этот GroupBox (или, по крайней мере, элементы управления внутри) на принтере этикеток (Meto SP40 II).
Чтобы напечатать GroupBox, я рисую его в растровом изображении, сохраняю растровое изображение в формате jpg и печатаю в формате jpg. Когда я печатаю jpg на «обычном» принтере, качество хорошее, и я могу без проблем сканировать штрих-код. Но когда я печатаю jpg с помощью принтера этикеток, качество действительно плохое, и я не могу отсканировать штрих-код. Это код, который я использую для создания и печати JPG.
public void PrintBarcodeGrpb()
{
Bitmap bmp = new Bitmap(groupBox1.Width, groupBox1.Height);
groupBox1.DrawToBitmap(bmp,groupBox1.ClientRectangle);
bmp.Save(barcodeSavePath, ImageFormat.Jpeg);
PrintDocument doc = new PrintDocument();
doc.PrintPage += Doc_PrintPage;
doc.PrinterSettings.DefaultPageSettings.PaperSize = new PaperSize("Etiketten", 75, 40);
doc.Print();
doc.Dispose();
}
private void Doc_PrintPage(object sender, PrintPageEventArgs e)
{
Image img = Image.FromFile(barcodeSavePath);
Point loc = new Point(0,0);
e.Graphics.DrawImage(img, loc);
}
Полагаю, проблема с качеством возникает из-за проблем с принтером в jpg. Но даже когда я печатаю растровое изображение напрямую, не сохраняя его в формате jpg, качество остается неизменным. Есть ли способ напечатать GroupBox, не рисуя его в растровом изображении?
EDIT
Когда я создаю и печатаю этикетку следующим образом:
e.Graphics.DrawString(BarcodeLocation, textFont, Brushes.Black, 33,29);
e.Graphics.DrawString(BarcodeText, barcodeFont, Brushes.Black, 15, 58);
e.Graphics.DrawString(BarcodeText, textFont, Brushes.Black, 35, 97);
e.Graphics.DrawString(lblKST.Text, textFont, Brushes.Black, 233, 29);
e.Graphics.DrawString(lblKTR.Text, textFont, Brushes.Black, 233, 97);
e.Graphics.DrawString(CostCentre, textFont, Brushes.Black, 233, 120);
e.Graphics.DrawString(CostTypes, textFont, Brushes.Black, 33, 120);
Качество напечатанной этикетки в порядке. Прежде чем все будет в нужном месте, нужно много тестировать и печатать, но для меня это было намного проще, чем пытаться напечатать весь GroupBox.