11人参与 • 2025-10-22 • Asp.net
zxing.net:开源条码处理库,支持qr code、code 128等格式
install-package zxing.net
qrcoder:纯c#实现的二维码生成库
install-package qrcoder
using zxing;
using zxing.common;
public class qrcodegenerator
{
public bitmap generateqrcode(string content, int size = 300)
{
var writer = new barcodewriter
{
format = barcodeformat.qr_code,
options = new encodingoptions
{
width = size,
height = size,
margin = 1,
purebarcode = true
}
};
// 添加纠错级别(l/m/q/h)
writer.options.hints.add(encodehinttype.error_correction, errorcorrectionlevel.h);
return writer.write(content);
}
}
public class barcodegenerator
{
public bitmap generatecode128(string data)
{
var options = new encodingoptions
{
height = 100,
width = 400,
margin = 2
};
using (var writer = new barcodewriter
{
format = barcodeformat.code_128,
options = options
})
{
return writer.write(data);
}
}
}
public bitmap enhanceimage(bitmap source)
{
using (var graphics = graphics.fromimage(source))
{
graphics.smoothingmode = smoothingmode.antialias;
graphics.interpolationmode = interpolationmode.highqualitybicubic;
graphics.pixeloffsetmode = pixeloffsetmode.highqualitybilinear;
// 添加边框
var border = new pen(color.black, 2);
graphics.drawrectangle(border, 0, 0, source.width-1, source.height-1);
return source;
}
}
public void saveimage(bitmap image, string path)
{
imagecodecinfo jpegencoder = getencoder(imageformat.jpeg);
encoderparameters encoderparams = new encoderparameters(1);
encoderparams.param[0] = new encoderparameter(encoder.quality, 90l);
image.save(path, jpegencoder, encoderparams);
}
private imagecodecinfo getencoder(imageformat format)
{
imagecodecinfo[] codecs = imagecodecinfo.getimageencoders();
foreach (var codec in codecs)
{
if (codec.formatid == format.guid)
return codec;
}
return null;
}
using system.drawing.printing;
public class printerservice
{
public void printbitmap(bitmap image)
{
using (var printdoc = new printdocument())
{
printdoc.printersettings.printername = "zebra zt410"; // 指定打印机
printdoc.defaultpagesettings.papersize = new papersize("custom", 400, 300);
printdoc.printpage += (s, e) =>
{
e.graphics.drawimage(image, 0, 0, image.width, image.height);
};
printdoc.print();
}
}
}
public class networkprinter
{
public void sendtoprinter(string ip, bitmap image)
{
using (var client = new tcpclient(ip, 9100))
{
using (var stream = client.getstream())
{
var ms = new memorystream();
image.save(ms, imageformat.png);
stream.write(ms.toarray(), 0, ms.length);
}
}
}
}
public string generatezpl(string content)
{
return $@"
^xa
^fo50,50
^bqn,2,8
^fd{content}^fs
^xz";
}
// 发送指令
using (var client = new tcpclient("192.168.1.100", 9100))
{
networkstream stream = client.getstream();
byte[] data = encoding.ascii.getbytes(zplcommand);
stream.write(data, 0, data.length);
}
public class printqueue
{
private queue<printjob> _jobs = new queue<printjob>();
public void enqueue(printjob job)
{
_jobs.enqueue(job);
}
public async task processqueueasync()
{
while (_jobs.count > 0)
{
var job = _jobs.dequeue();
await printservice.printasync(job.bitmap);
await task.delay(1000); // 防卡纸间隔
}
}
}
参考代码 c#二维码和条形码生成 打印处理 www.youwenfan.com/contentcsj/57421.html
public void safeprint(action printaction)
{
try
{
printaction();
}
catch (timeoutexception ex)
{
logger.logerror($"打印超时: {ex.message}");
restartprinter();
}
catch (ioexception ex)
{
logger.logerror($"设备断开: {ex.message}");
}
}
public static class logger
{
private static readonly string logpath = "print_log.txt";
public static void logerror(string message)
{
file.appendalltext(logpath,
$"{datetime.now:yyyy-mm-dd hh:mm:ss} [error] {message}{environment.newline}");
}
}
图像缓存
private static dictionary<string, bitmap> _imagecache = new dictionary<string, bitmap>();
public bitmap getcachedimage(string key, func<bitmap> generatefunc)
{
if (!_imagecache.containskey(key))
{
_imagecache[key] = generatefunc();
}
return _imagecache[key];
}
异步处理
public async task<bitmap> generateasync(string data)
{
return await task.run(() => generateqrcode(data));
}
批量生成优化
public void batchgenerate(list<string> datalist)
{
parallel.foreach(datalist, item =>
{
var img = generateqrcode(item);
saveimage(img, $"{guid.newguid()}.png");
});
}
硬件要求
环境配置
<!-- app.config -->
<configuration>
<system.drawing>
<printersettings>
<add key="defaultprinter" value="zebra zt410"/>
</printersettings>
</system.drawing>
</configuration>
安全措施
public bool validateip(string ip)
{
return allowedips.contains(ip);
}
[testclass]
public class printtests
{
[testmethod]
public void testqrcodeprint()
{
var generator = new qrcodegenerator();
var bitmap = generator.generateqrcode("https://test.com");
using (var ms = new memorystream())
{
bitmap.save(ms, imageformat.png);
assert.istrue(ms.length > 1024); // 最小尺寸验证
}
}
}
到此这篇关于基于c#实现二维码和条形码生成与打印的文章就介绍到这了,更多相关c#二维码和条形码生成与打印内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论