C#打印標籤

一個複雜的標籤包括一個複雜的表格樣式和二維碼、條形碼等內容。因此若是直接繪製的方式將會很是的麻煩,因此採用使用的方案是使用模板的方式:1.使用Excel建立出想要的模板的樣式。2.對模板中的動態內容進行填充。3.打印Excel微信

一.ZXing.net(能夠方便生成條形碼、二維碼和帶有頭像的二維碼)ide

        /// <summary>
        /// 條形碼
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private Bitmap Create1Code(string text)
        {
            BarcodeWriter writer = new BarcodeWriter();
            //使用ITF 格式,不能被如今經常使用的支付寶、微信掃出來
            //若是想生成可識別的能夠使用 CODE_128 格式
            //writer.Format = BarcodeFormat.ITF;
            writer.Format = BarcodeFormat.CODE_128;
            EncodingOptions options = new EncodingOptions()
            {
                Width = 450,
                Height = 100,
            };
            writer.Options = options;
            Bitmap map = writer.Write(text);
            return map;
        }
        /// <summary>
        /// 生成二維碼
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        private Bitmap Create2Code(string text)
        {

            BarcodeWriter writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.QR_CODE;
            QrCodeEncodingOptions options = new QrCodeEncodingOptions();
            options.DisableECI = true;
            //設置內容編碼
            options.CharacterSet = "UTF-8";
            //設置二維碼的寬度和高度
            options.Width = 180;
            options.Height = 180;
            //設置二維碼的邊距,單位不是固定像素
            options.Margin = 0;
            writer.Options = options;
            Bitmap map = writer.Write(text);
            return map;
        }

 

二.Epplus(能夠方便的對Excel內容進行設置,導出,同時能夠對Excel打印時的參數進行設置,遺憾的是他並無集成相應的API)測試

 using (FileStream fileStream = new FileStream(TemplatePath, FileMode.Open))
            {
                using (ExcelPackage package = new ExcelPackage(fileStream))
                {
                    OfficeOpenXml.ExcelWorksheet sheet = package.Workbook.Worksheets["Sheet1"];
                    //當設置Excel中不存在的字體的時候,好比設置的字體太小的時候,會出現Dictionary不存在鍵值的錯誤

                    //填充第一行第一列的內容
                    sheet.Cells[1, 1].Value =「測試內容」;
                    sheet.Cells[1, 1].Style.Font.Name =「宋體」;
                    sheet.Cells[1, 1].Style.Font.Size = 10.5;
                    sheet.Cells[1, 1].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Bottom;
                    //設置打印格式
                    sheet.PrinterSettings.LeftMargin = 0.3m;
                    sheet.PrinterSettings.PaperSize = ePaperSize.A3;
                    sheet.PrinterSettings.TopMargin = 0.3m;
                    //填充二維碼。
                    var map = Create2Code(「二維碼測試」);
                    var pic = sheet.Drawings.AddPicture("1", map);
                    pic2.SetPosition(1, 0, 3, 0);
                    using (Stream stream = new FileStream(ExcelPath, FileMode.Create))
                    {
                        package.SaveAs(stream);
                    }
                }
            }

 

三.使用GemBox插件進行打印(這個插件對打印功能很是簡單,只是集成了一個打印功能API提供打印而已,沒法對打印機的屬性設置)字體

               SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
              var workbook = ExcelFile.Load(ExcelPath);
              workbook.Print(cboPrinter.Text);

 經過上面的功能已經能夠完成基本的功能。可是存在的不足就是不能夠直接設置打印機的屬性,有一款收費的插件能夠實現,免費版的也能夠使用打印的功能,可是會在文檔的上面生成水印---Spire.xlsthis

Spire.XLS是一個很是強大的插件,能夠對Excel進行出來裏,同時提供了相應的接口能夠和Windows中打印的PrintDocument直接對接,能夠設置打印機的屬性。編碼

 

            Workbook workbook = new Workbook();
            workbook.LoadFromFile(ExcelPath);
            Worksheet sheet = workbook.Worksheets[0];
             sheet.PageSetup.PrintArea = "C7:D7";
            sheet.PageSetup.PrintTitleRows = "$1:$1";
            sheet.PageSetup.FitToPagesWide = 1;
            sheet.PageSetup.FitToPagesTall = 1;
            sheet.PageSetup.Orientation = PageOrientationType.Landscape;
            sheet.PageSetup.PaperSize = PaperSizeType.PaperA3;
             PrintDocument pd = workbook.PrintDocument;
             pd.PrinterSettings.PrinterName = cboPrint.Text;
             pd.PrinterSettings.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
             pd.Print();

 補充:spa

1.關於打印,微軟還提供了彈出對話框模式的打印PrintDialog..net

2.關於微軟的打印PrintDocument支持直接使用Graphics直接繪圖,簡單的樣式能夠考慮插件

     PrintDocument pd = new PrintDocument();
     pd.PrintPage += new PrintPageEventHandler
                    (this.pd_PrintPage);
     private void pd_PrintPage(object sender, PrintPageEventArgs ev)
        {
            ev.Graphics.DrawImage(Bitmap.FromFile(pngPath), new Point(0, 0));
            
        }

3.和使用Excel模板同樣的思路,能夠使用微軟的報表模板RDLC製做標籤樣式,使用RDLC報表中的打印功能。code

相關文章
相關標籤/搜索