Я использую Zen Barcode Rendering Framework для создания штрих-кодов в приложении Windows Form C#. У меня есть два текстовых поля (одно для самого штрих-кода и одно для соответствующего текста, который я хочу напечатать на этикетке со штрих-кодом). Точно так же я загружаю сгенерированное изображение штрих-кода в окно с изображением и пытаюсь распечатать его, но каждый раз, когда я нажимаю кнопку печати, результат не подходит (иногда принтер печатает белую пустую этикетку, а иногда штрих-код печатается не полностью. Интересно, я должен сказать, что для того, чтобы штрих-код отображался на этикетке, даже если она кажется неполной, мне приходится выбирать очень большие форматы бумаги). Вот мой код:
Код для события нажатия кнопки создания штрих-кода:
private void Button1_Click(object sender, EventArgs e)
{
string barcode = textBox1.Text;
Zen.Barcode.Code128BarcodeDraw brcd = Zen.Barcode.BarcodeDrawFactory.Code128WithChecksum;
var barcodeImage = brcd.Draw(barcode, 50);
int resultImageWidth;
if(barcodeImage.Width >= textBox2.Text.Length*8)
{
resultImageWidth = barcodeImage.Width;
}
else
{
resultImageWidth = textBox2.Text.Length*8;
}
var resultImage = new Bitmap(resultImageWidth, barcodeImage.Height + 60); // 20 is bottom padding, adjust to your text
using (var graphics = Graphics.FromImage(resultImage))
using (var font = new Font("IranYekan", 10))
using (var brush = new SolidBrush(Color.Black))
using (var format = new StringFormat()
{
Alignment = StringAlignment.Center, // Also, horizontally centered text, as in your example of the expected output
LineAlignment = StringAlignment.Far
})
{
graphics.Clear(Color.White);
graphics.DrawImage(barcodeImage, (resultImageWidth - barcodeImage.Width)/2, 0);
graphics.DrawString(textBox1.Text, font, brush, resultImage.Width / 2, resultImage.Height-30, format);
graphics.DrawString(textBox2.Text, font, brush, resultImage.Width / 2, resultImage.Height, format);
}
pictureBox1.Image = resultImage;
}
Код события нажатия кнопки печати:
private void Button2_Click(object sender, EventArgs e)
{
PrintDialog pd = new PrintDialog();
PrintDocument doc = new PrintDocument();
doc.PrintPage += Doc_PrintPage;
pd.Document = doc;
if (pd.ShowDialog() == DialogResult.OK)
{
doc.Print();
}
}
И моя функция Doc_PrintPage():
private void Doc_PrintPage(object sender, PrintPageEventArgs e)
{
Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bm, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
e.Graphics.DrawImage(bm, 0, 0);
bm.Dispose();
}
Моя основная цель - полностью напечатать штрих-код с соответствующим текстом внутри границ бумаги, который выбирается при появлении диалогового окна печати.
Вы можете увидеть пользовательский интерфейс моего приложения на изображении ниже:
Вот мои распечатанные результаты, как вы видите, им не хватает качества, и изображение каждый раз не подходит правильно. Я использую Brother QL-700
e.Graphics
. - person Ann L.   schedule 04.08.2020