[c#]二维码打印

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;

namespace TwoDimensionCodePrint
{
    public partial class Print : Form
    {
        private int left = 0, top = 0, width = 150, height = 150;
        private string fileName = "d:\\二维码电子票\\红河谷大门票\\20141025111316红河谷大门票共30张.jpg";

        public Print()
        {
            InitializeComponent();
        }
        //打印
        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("请选择二维码图片");
                return;
            }
            //打印预览
            PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
            PrintDocument printDocument = new PrintDocument();
            //设置边距
            try
            {
                left = int.Parse(txtLeft.Text);
                top = int.Parse(txtTop.Text);
                width = int.Parse(txtWidth.Text);
                height = int.Parse(txtHeight.Text);
            }
            catch
            {
                MessageBox.Show("请输入正确的数字");
            }

            Margins margin = new Margins(left, left + width, top, top + height);
            printDocument.DefaultPageSettings.Margins = margin;
            //打印事件设置
            printDocument.PrintPage += new PrintPageEventHandler(this.PrintPageEvent);
            // 打印预览
            //printPreviewDialog.Document = printDocument;
            //printPreviewDialog.ShowDialog();
            try
            {
                printDocument.Print();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());
            }
        }

        //打印事件处理
        private void PrintPageEvent(object sender, PrintPageEventArgs e)
        {
            //读取图片
            // 1 根据路径获取
            // Bitmap image = new Bitmap(fileName);
            // 2 从PictureBox获取
            // Image image = pictureBox1.Image;
            // 3 直接根据生成的二维码打印
            Image image = ProduceQRcode("司吉峰");
            //在指定区域打印二维码
            Rectangle destRect = new Rectangle(left, top, width, height);
            e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel);
        }
        // 将结果填充到图片
        private void GetResultIntoImage(ref Image temp, string name, string date)
        {
            //读取图片
            Graphics g = Graphics.FromImage(temp);
            Font f = new Font("宋体", 12);
            Brush b = new SolidBrush(System.Drawing.Color.Black);
            //填充数据到图片
            g.DrawImage(temp, 0, 0, temp.Width, temp.Height);
            g.DrawString(name, f, b, 168, 105);
            g.DrawString(date, f, b, 176, 269);
            g.Dispose();
        }
        //生成二维码
        public Image ProduceQRcode(string TicketCodeContent)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 7;

            qrCodeEncoder.QRCodeVersion = 0;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
            qrCodeEncoder.QRCodeBackgroundColor = System.Drawing.Color.White;
            qrCodeEncoder.QRCodeForegroundColor = System.Drawing.Color.Black;
            return qrCodeEncoder.Encode(TicketCodeContent);
        }
    }
}

运行界面:

完整代码下载:点击打开链接

时间: 2024-11-15 20:31:55

[c#]二维码打印的相关文章

vfp报表中如何动态显示打印二维码,每条记录的值有可能重复,比如姓名用二维码显示打印。

问题描述 vfp报表中如何动态显示打印二维码,每条记录的值有可能重复,比如姓名用二维码显示打印. vfp报表中如何动态显示打印二维码,每条记录的值有可能重复,比如姓名用二维码显示打印.求关注求转发求收藏qq:1280737814https://shop67511955.taobao.com/ 解决方案 http://bbs.bccn.net/thread-436671-1-1.html 解决方案二: 二维码打印JS

基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作_javascript技巧

在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理,并介绍如何利用CLODOP组件实现内容的打印输出. 生成条形码使用组件JsBarcode,生成二维码使用组件qrcodejs. 1.条形码的生成 条码的作用一般在一些商品标签上,方便使用条码枪快速.准确录入信息. 如下所示是一种条形码   这里条形码生成使用了JsBarcode组件进行处理,它支持

基于Metronic的Bootstrap开发框架经验总结(14)--条码和二维码的生成及打印处理

在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理,并介绍如何利用CLODOP组件实现内容的打印输出. 生成条形码使用组件JsBarcode,生成二维码使用组件qrcodejs. 1.条形码的生成 条码的作用一般在一些商品标签上,方便使用条码枪快速.准确录入信息. 如下所示是一种条形码 这里条形码生成使用了JsBarcode组件进行处理,它支持很多

代码-C# 打印二维码设置宽高问题!

问题描述 C# 打印二维码设置宽高问题! 打印二维码,为什么设置他的长宽会这样的.中间那个小的才是我设置的,但是为什么会有个大的二维码的呢?我代码哪里写错了吗? 解决方案 把 this.BackgroundImage = ... 去掉,直接 GetDimensionalCode(...) 就可以了. 因为你已经有了bmp = qrCodeEncoder.Encode(link);这里已经画图了. 解决方案二: 或者去掉gg.DrawImage 解决方案三: 如果你希望小的图像,你需要再开一个bi

如何使用java调用bartender打印二维码

问题描述 如何使用java调用bartender打印二维码 使用就JAVA代码去调用bartender打印一个二维码,代码应该怎么写,是不是生成一个批处理文件在调用呢 解决方案 你的意思是调用执行bartender这个软件吗?如果是,就使用exec执行http://blog.csdn.net/yy6060/article/details/6311920

ZPL指令TXT文本里设置QR code二维码为什么打印出来前三位扫描不出来?

问题描述 ZPL指令TXT文本里设置QR code二维码为什么打印出来前三位扫描不出来? 单机文本里编辑的指令 用Print.bat指定模板打印,二维码扫描是就前三位出不来,如下代码.如扫描只会出现456789012345,前面的123就没有了,还请高手指点下是为什么? ^XA ^LH40,180 ^MD13 ^LL1600 ^FO1,270^BQN,20,30^FD123456789012345^FS ^FO220,295^A0N,15,20^CI13^FR^FD123456789012345

zpl-使用ZPL语言打印二维码,怎么使扫描出来的数据换行?

问题描述 使用ZPL语言打印二维码,怎么使扫描出来的数据换行? 例如我的数据为:123456789 ABCDEFHIG CODE 想要达到扫描后的效果为:123456789 ABCDEFHIG CODE 请大神帮忙,代码应该怎样写? 解决方案 问题找到方法了,加"x01"解决了. 解决方案二: 参考 New line in Zebra ZPL 使用&来还行 解决方案三: 刚才一个反斜杠被替换了,应该是使用&来换行

使用jquery.qrcode 生成的二维码,使用window.print(); 无法实现打印

问题描述 使用jquery.qrcode 生成的二维码,使用window.print(); 无法实现打印 使用jquery.qrcode 生成的二维码,使用window.print(); 无法实现打印 代码如下 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> &

c#并口打印-C# 热敏打印机打印二维码

问题描述 C# 热敏打印机打印二维码 问题是这样,最近在用热敏打印机做东西,其中一向可能要涉及到热敏打印机打印二维码的问题: 并口打印(USB映射为并口): 当次打印二维码的的时候图片总有很多白线. 热敏打印机不放纸张的时候选择打印二维码提示完成后,再把纸张放进去,一次性来的码就没有(基本没有)白线. 当我打开并口一次性执行完再关闭并口的时候就不打印了,热敏打印机跟据接收指令一样. 请问该怎么解决. if (!SetLineSpace(0)) { return false; } if (!Ali