博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 三种打印方式含代码
阅读量:7239 次
发布时间:2019-06-29

本文共 38060 字,大约阅读时间需要 126 分钟。

 

 

 

 

 

一:C#代码直接打印pdf文件(打印质保书pdf文件)

引用:

 

代码注释很详细了。

private void btn_pdf_Click(object sender, RoutedEventArgs e)        {            string filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Resource\\川AX5572 904080D005000.pdf";            printShow(filePath);        }        ///         /// 打印的代码        ///         /// 要打印的PDF路径        private int printShow(string url)        {            int isOK = 0;            PDFFile file = PDFFile.Open(url);            PrinterSettings settings = new PrinterSettings();            System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();            settings.PrinterName = "NPI84FFAF (HP LaserJet MFP M436)"; // 打印机名称            settings.PrintToFile = false;            //设置纸张大小(可以不设置,取默认设置)3.90 in,  8.65 in            PaperSize ps = new PaperSize("test", 4, 9);            ps.RawKind = 9; //如果是自定义纸张,就要大于118,(A4值为9,详细纸张类型与值的对照请看http://msdn.microsoft.com/zh-tw/library/system.drawing.printing.papersize.rawkind(v=vs.85).aspx)            O2S.Components.PDFRender4NET.Printing.PDFPrintSettings pdfPrintSettings = new O2S.Components.PDFRender4NET.Printing.PDFPrintSettings(settings);            pdfPrintSettings.PaperSize = ps;            pdfPrintSettings.PageScaling = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional;            pdfPrintSettings.PrinterSettings.Copies = 1;            try            {                file.Print(pdfPrintSettings);                isOK = 1;            }            catch (Exception)            {                isOK = -1;                throw;            }            finally            {                file.Dispose();            }            return isOK;        }

  

二:先生成excel在调用打印(生成excel主要在于布局)

按钮事件代码:

private void btn_zbs_Click(object sender, RoutedEventArgs e)        {            // 准备好数据            List
dm = new List
() { new DynamicModel(){BatchNumber="319040027",RelMpa = "470",RMpa = "655",A="29.0",Agt = "16.0",RmReL = "1.40",RelRel = "1.18",DirectBendingOne="",ResultOne = "",DirectBendingTwo = "I", ResultTwo = "合格", Metallography = "合格", WeightDeviation="合格", SurfaceQuality="合格", SizeAndAppearance="合格", Packing="合格", }, new DynamicModel(){BatchNumber="319040027",RelMpa = "450",RMpa = "650",A="27.0",Agt = "15.4",RmReL = "1.45",RelRel = "1.13",DirectBendingOne="",ResultOne = "",DirectBendingTwo = "I", ResultTwo = "合格", Metallography = "合格", WeightDeviation="合格", SurfaceQuality="合格", SizeAndAppearance="合格", Packing="合格", }, new DynamicModel(){BatchNumber="319040027",RelMpa = "435",RMpa = "640",A="28.0",Agt = "15.7",RmReL = "1.47",RelRel = "1.09",DirectBendingOne="",ResultOne = "",DirectBendingTwo = "I", ResultTwo = "合格", Metallography = "合格", WeightDeviation="合格", SurfaceQuality="合格", SizeAndAppearance="合格", Packing="合格", }, new DynamicModel(){BatchNumber="319040027",RelMpa = "460",RMpa = "645",A="26.0",Agt = "16.2",RmReL = "1.40",RelRel = "1.15",DirectBendingOne="",ResultOne = "",DirectBendingTwo = "I", ResultTwo = "合格", Metallography = "合格", WeightDeviation="合格", SurfaceQuality="合格", SizeAndAppearance="合格", Packing="合格", }, new DynamicModel(){BatchNumber="319040027",RelMpa = "470",RMpa = "655",A="29.0",Agt = "16.0",RmReL = "1.40",RelRel = "1.18",DirectBendingOne="",ResultOne = "",DirectBendingTwo = "I", ResultTwo = "合格", Metallography = "合格", WeightDeviation="合格", SurfaceQuality="合格", SizeAndAppearance="合格", Packing="合格", }, }; List
cm = new List
() { new ChemistryModel(){BatchNumber="319040027",Bales="2",Constituent="熔炼",C="0.22",Si= "0.37",Mn = "1.32",P="0.020",S="0,030",Ceq = "0.46"}, new ChemistryModel(){BatchNumber="319040027",Bales="2",Constituent="熔炼",C="0.22",Si= "0.37",Mn = "1.32",P="0.020",S="0,030",Ceq = "0.46"}, new ChemistryModel(){BatchNumber="319040027",Bales="2",Constituent="熔炼",C="0.22",Si= "0.37",Mn = "1.32",P="0.020",S="0,030",Ceq = "0.46"}, new ChemistryModel(){BatchNumber="319040027",Bales="2",Constituent="熔炼",C="0.22",Si= "0.37",Mn = "1.32",P="0.020",S="0,030",Ceq = "0.46"}, }; WarrantyModel wm = new WarrantyModel() { LicenceNumber = "XK05-001-00066", OrderUnit = "。。。。。。限公司", ReceivingUnit = "。。。。有限责任公司", ContractCode = "D9S0379001", VarietyName = "钢筋混凝土用热轧带肋钢筋(盘卷)", Technical = "GB/T1499.2-2018", FixedLength = "", BrandName = "HRB400R", Diameter = "10", AddressChina = " 中 国 攀 枝 花", AddressEnglish = " PAN ZHI HUA CHINA ", KnotNumber = "904080D005000", DeliveryStute = "热扎", CertificateNo = "1904DB00384", ArriveStation = "汽车自提", LicenseNumber = "川A09901", DeliverGoodsData = "2019年4月8日", TabulationTime = "2019年04月08日 15时08分13分", Remark = "\n1、兹证明本产品按供货标准检验各项指标均符合供货标准规定。 \n2、质量证明书原件是验收依据,复印件仅供参考,不作为验收凭证。 \n3、弯芯直径①:C▁d=a、G▁3d、H▁4d、I▁5d、J▁6d、K▁7d、L▁8d、M▁9d。", Explain = "", PersonInCharge = "" }; wm.Dynamic = dm; wm.Chemistry = cm; // 调用打印 PrintHelper printHelper = new PrintHelper(wm); printHelper.DataToExcel(); }

  

 PrintHelper.cs文件代码

///     /// 打印    ///     public class PrintHelper    {        ///         /// 文件生成路径        ///         private string _filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "file\\" +                                   DateTime.Now.ToString("yyyyMMddhhmmss");//DateTime.Now.ToFileTimeUtc().ToString();        ///         /// 打印质保书数据实体        ///         private WarrantyModel _warranty;        ///         ///         ///         private int _maxRemarkLength = int.MinValue;        public PrintHelper(WarrantyModel warranty)        {            _warranty = warranty;        }        ///         /// 动态生成Excel        ///         public void DataToExcel()        {            int max = int.MinValue;            var remarkList = _warranty.Chemistry.Select(m => m.BatchNumber).ToList();            for (int i = 0, length = remarkList.Count; i < length; i++)            {                var remark = remarkList[i];                if (remark != null && remark.Length > max)                {                    max = remarkList[i].Length;                }            }            if (max > 10) _maxRemarkLength = (max / 4 + 1) * 20;            else _maxRemarkLength = 40;            Application ExcelApp = new Application();            Workbook worksBook = ExcelApp.Workbooks.Add();            Worksheet workSheet = (Worksheet)worksBook.Worksheets[1];            if (workSheet == null)            {                System.Diagnostics.Debug.WriteLine("ERROR: worksheet == null");                return;            }            workSheet.Name = "DeliveryOrderBills";            workSheet.Cells.WrapText = true;            workSheet.Cells.EntireRow.AutoFit();            RangeMark(workSheet, "A1", "D1", "QG/JS JL(Y)042-2017", 10, 30, 1, 0);            RangeMark(workSheet, "H1", "K1", "产 品 质 量 保 证 书", 26, 30, 3, 0);            RangeMark(workSheet, "A3", "A3", "许可证号:", 12, 30, 3, 0);            RangeMark(workSheet, "B3", "D3", _warranty.LicenceNumber, 12, 30, 1, 0);            RangeMark(workSheet, "O3", "O3", "结齐单号:", 12, 30, 3, 0);            RangeMark(workSheet, "P3", "Q3", _warranty.KnotNumber, 12, 30, 1, 0);            RangeMark(workSheet, "A4", "A4", "订货单位:", 12, 30, 3, 0);            RangeMark(workSheet, "B4", "C4", _warranty.OrderUnit, 12, 30, 1, 0);            RangeMark(workSheet, "I4", "K4", "Quality  Certificate", 12, 30, 3, 0);            RangeMark(workSheet, "O4", "O4", "交货状态:", 12, 30, 3, 0);            RangeMark(workSheet, "P4", "Q4", _warranty.DeliveryStute, 12, 30, 1, 0);            RangeMark(workSheet, "A5", "A5", "收获单位:", 12, 30, 3, 0);            RangeMark(workSheet, "B5", "C5", _warranty.ReceivingUnit, 12, 30, 1, 0);            RangeMark(workSheet, "H5", "K5", "攀钢集团攀枝花金属制品有限公司", 16, 30, 3, 0);            RangeMark(workSheet, "O5", "O5", "证明书号:", 12, 30, 3, 0);            RangeMark(workSheet, "P5", "Q5", _warranty.CertificateNo, 12, 30, 1, 0);            RangeMark(workSheet, "A6", "A6", "合同编号:", 12, 30, 3, 0);            RangeMark(workSheet, "B6", "C6", _warranty.ContractCode, 12, 30, 1, 0);            RangeMark(workSheet, "F6", "F6", "定尺长度\n(mm):", 12, 30, 3, 0);            RangeMark(workSheet, "G6", "G6", _warranty.FixedLength, 12, 30, 3, 0);            RangeMark(workSheet, "I6", "M6", "Pangang Group Panzhihua Metal Products Co., Ltd.", 12, 20, 3, 0);            RangeMark(workSheet, "O6", "O6", "到 站:", 12, 30, 3, 0);            RangeMark(workSheet, "P6", "Q6", _warranty.ArriveStation, 12, 30, 1, 0);            RangeMark(workSheet, "A7", "A7", "品种名称:", 12, 30, 3, 0);            RangeMark(workSheet, "B7", "D7", _warranty.VarietyName, 12, 30, 1, 0);            RangeMark(workSheet, "F7", "F7", "牌 号", 12, 30, 3, 0);            RangeMark(workSheet, "G7", "G7", _warranty.BrandName, 12, 20, 3, 0);            RangeMark(workSheet, "J7", "J7", "地 址:", 12, 30, 3, 0);            RangeMark(workSheet, "K7", "M7", _warranty.AddressChina, 12, 30, 3, 0);            RangeMark(workSheet, "O7", "O7", "车 号:", 12, 30, 3, 0);            RangeMark(workSheet, "P7", "Q7", _warranty.LicenseNumber, 12, 30, 1, 0);            RangeMark(workSheet, "A8", "A8", "技术条件:", 12, 30, 3, 0);            RangeMark(workSheet, "B8", "D8", _warranty.Technical, 12, 30, 1, 0);            RangeMark(workSheet, "F8", "F8", "直径(mm):", 12, 30, 3, 0);            RangeMark(workSheet, "G8", "G8", _warranty.Diameter, 12, 30, 3, 0);            RangeMark(workSheet, "J8", "J8", "Address:", 12, 30, 3, 0);            RangeMark(workSheet, "K8", "M8", _warranty.AddressEnglish, 12, 30, 3, 0);            RangeMark(workSheet, "O8", "O8", "发货日期:", 12, 30, 3, 0);            RangeMark(workSheet, "P8", "Q8", _warranty.DeliverGoodsData, 12, 30, 1, 0);            // 化学成分表单(表头部分)            RangeMark(workSheet, "A9", "A10", "批号");            RangeMark(workSheet, "B9", "B10", "捆(包)数");            RangeMark(workSheet, "C9", "C10", "成分项目");            RangeMark(workSheet, "D9", "O9", "化  学  成  分 chemical composition");            RangeMark(workSheet, "P9", "P9", "");            RangeMark(workSheet, "Q9", "Q9", "");            RangeMark(workSheet, "R9", "R9", "");            RangeMark(workSheet, "D10", "D10", "C");            RangeMark(workSheet, "E10", "E10", "Si");            RangeMark(workSheet, "F10", "F10", "Mn");            RangeMark(workSheet, "G10", "G10", "P");            RangeMark(workSheet, "H10", "H10", "S");            RangeMark(workSheet, "I10", "I10", "Ceq");            RangeMark(workSheet, "J10", "J10", "");            RangeMark(workSheet, "K10", "K10", "");            RangeMark(workSheet, "L10", "L10", "");            RangeMark(workSheet, "M10", "M10", "");            RangeMark(workSheet, "N10", "N10", "");            RangeMark(workSheet, "O10", "O10", "");            RangeMark(workSheet, "P10", "R10", "");            // 化学成分表单(内容部分)            var rowTwoNum = 0;// 力学性能表单开始行索引            if (_warranty.Chemistry.Any())            {                for (int i = 0; i < _warranty.Chemistry.Count; i++)                {                    // 行数索引                    var rowOneNum = 11 + i;                    // 数据实体                    var item = _warranty.Chemistry[i];                    RangeMark(workSheet, string.Format("A{0}", rowOneNum), string.Format("A{0}", rowOneNum), item.BatchNumber);                    RangeMark(workSheet, string.Format("B{0}", rowOneNum), string.Format("B{0}", rowOneNum), item.Bales);                    RangeMark(workSheet, string.Format("C{0}", rowOneNum), string.Format("C{0}", rowOneNum), item.Constituent);                    RangeMark(workSheet, string.Format("D{0}", rowOneNum), string.Format("D{0}", rowOneNum), item.C);                    RangeMark(workSheet, string.Format("E{0}", rowOneNum), string.Format("E{0}", rowOneNum), item.Si);                    RangeMark(workSheet, string.Format("F{0}", rowOneNum), string.Format("F{0}", rowOneNum), item.Mn);                    RangeMark(workSheet, string.Format("G{0}", rowOneNum), string.Format("G{0}", rowOneNum), item.P);                    RangeMark(workSheet, string.Format("H{0}", rowOneNum), string.Format("H{0}", rowOneNum), item.S);                    RangeMark(workSheet, string.Format("I{0}", rowOneNum), string.Format("I{0}", rowOneNum), item.Ceq);                    RangeMark(workSheet, string.Format("J{0}", rowOneNum), string.Format("J{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("K{0}", rowOneNum), string.Format("K{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("L{0}", rowOneNum), string.Format("L{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("M{0}", rowOneNum), string.Format("M{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("N{0}", rowOneNum), string.Format("N{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("O{0}", rowOneNum), string.Format("O{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("P{0}", rowOneNum), string.Format("P{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("Q{0}", rowOneNum), string.Format("Q{0}", rowOneNum), "");                    RangeMark(workSheet, string.Format("R{0}", rowOneNum), string.Format("R{0}", rowOneNum), "");                }                // 空行索引                var krowIndex = _warranty.Chemistry.Count + 11;                RangeMark(workSheet, string.Format("A{0}", krowIndex), string.Format("R{0}", krowIndex), "", 12, 15);                rowTwoNum = krowIndex + 1;            }            else            {                RangeMark(workSheet, string.Format("A{0}", 11), string.Format("R{0}", 11), "", 12, 15);                rowTwoNum = 12;            }            // 力学性能表单(表头部分)            RangeMark(workSheet, string.Format("A{0}", rowTwoNum), string.Format("A{0}", rowTwoNum + 1), "批号");            RangeMark(workSheet, string.Format("B{0}", rowTwoNum), string.Format("G{0}", rowTwoNum), "力学性能");            RangeMark(workSheet, string.Format("H{0}", rowTwoNum), string.Format("I{0}", rowTwoNum), "冷弯 / 180°");            RangeMark(workSheet, string.Format("J{0}", rowTwoNum), string.Format("K{0}", rowTwoNum), "反向弯曲 ②");            RangeMark(workSheet, string.Format("L{0}", rowTwoNum), string.Format("L{0}", rowTwoNum + 1), "金相组织");            RangeMark(workSheet, string.Format("M{0}", rowTwoNum), string.Format("M{0}", rowTwoNum + 1), "");            RangeMark(workSheet, string.Format("N{0}", rowTwoNum), string.Format("N{0}", rowTwoNum + 1), "");            RangeMark(workSheet, string.Format("O{0}", rowTwoNum), string.Format("O{0}", rowTwoNum + 1), "重量偏差");            RangeMark(workSheet, string.Format("P{0}", rowTwoNum), string.Format("P{0}", rowTwoNum + 1), "表面质量");            RangeMark(workSheet, string.Format("Q{0}", rowTwoNum), string.Format("Q{0}", rowTwoNum + 1), "尺寸和\n外形");            RangeMark(workSheet, string.Format("R{0}", rowTwoNum), string.Format("R{0}", rowTwoNum + 1), "包装");            RangeMark(workSheet, string.Format("B{0}", rowTwoNum + 1), string.Format("B{0}", rowTwoNum + 1), "Rel /Mpa");            RangeMark(workSheet, string.Format("C{0}", rowTwoNum + 1), string.Format("C{0}", rowTwoNum + 1), "Rm /Mpa");            RangeMark(workSheet, string.Format("D{0}", rowTwoNum + 1), string.Format("D{0}", rowTwoNum + 1), "A / %");            RangeMark(workSheet, string.Format("E{0}", rowTwoNum + 1), string.Format("E{0}", rowTwoNum + 1), "Rgt / %");            RangeMark(workSheet, string.Format("F{0}", rowTwoNum + 1), string.Format("F{0}", rowTwoNum + 1), " R°m / R°eL");            RangeMark(workSheet, string.Format("G{0}", rowTwoNum + 1), string.Format("G{0}", rowTwoNum + 1), "R°eL/ReL");            RangeMark(workSheet, string.Format("H{0}", rowTwoNum + 1), string.Format("H{0}", rowTwoNum + 1), "弯芯直径①");            RangeMark(workSheet, string.Format("I{0}", rowTwoNum + 1), string.Format("I{0}", rowTwoNum + 1), "结果");            RangeMark(workSheet, string.Format("J{0}", rowTwoNum + 1), string.Format("J{0}", rowTwoNum + 1), "弯芯直径①");            RangeMark(workSheet, string.Format("K{0}", rowTwoNum + 1), string.Format("K{0}", rowTwoNum + 1), "结果");            // 力学性能表单(内容部分)            var totalRowIndex = rowTwoNum + 2;// 统计行索引            if (_warranty.Dynamic.Any())            {                for (int i = 0; i < _warranty.Dynamic.Count; i++)                {                    // 内容索引                    var rowThreeNum = i + rowTwoNum + 2;                    totalRowIndex = rowThreeNum + 1;                    // 数据实体                    var item = _warranty.Dynamic[i];                    RangeMark(workSheet, string.Format("A{0}", rowThreeNum), string.Format("A{0}", rowThreeNum), item.BatchNumber);                    RangeMark(workSheet, string.Format("B{0}", rowThreeNum), string.Format("B{0}", rowThreeNum), item.RelMpa);                    RangeMark(workSheet, string.Format("C{0}", rowThreeNum), string.Format("C{0}", rowThreeNum), item.RMpa);                    RangeMark(workSheet, string.Format("D{0}", rowThreeNum), string.Format("D{0}", rowThreeNum), item.A);                    RangeMark(workSheet, string.Format("E{0}", rowThreeNum), string.Format("E{0}", rowThreeNum), item.Agt);                    RangeMark(workSheet, string.Format("F{0}", rowThreeNum), string.Format("F{0}", rowThreeNum), item.RmReL);                    RangeMark(workSheet, string.Format("G{0}", rowThreeNum), string.Format("G{0}", rowThreeNum), item.RelRel);                    RangeMark(workSheet, string.Format("H{0}", rowThreeNum), string.Format("H{0}", rowThreeNum), item.DirectBendingOne);                    RangeMark(workSheet, string.Format("I{0}", rowThreeNum), string.Format("I{0}", rowThreeNum), item.ResultOne);                    RangeMark(workSheet, string.Format("J{0}", rowThreeNum), string.Format("J{0}", rowThreeNum), item.DirectBendingTwo);                    RangeMark(workSheet, string.Format("K{0}", rowThreeNum), string.Format("K{0}", rowThreeNum), item.ResultTwo);                    RangeMark(workSheet, string.Format("L{0}", rowThreeNum), string.Format("L{0}", rowThreeNum), item.Metallography);                    RangeMark(workSheet, string.Format("M{0}", rowThreeNum), string.Format("M{0}", rowThreeNum), "");                    RangeMark(workSheet, string.Format("N{0}", rowThreeNum), string.Format("N{0}", rowThreeNum), "");                    RangeMark(workSheet, string.Format("O{0}", rowThreeNum), string.Format("O{0}", rowThreeNum), item.WeightDeviation);                    RangeMark(workSheet, string.Format("P{0}", rowThreeNum), string.Format("P{0}", rowThreeNum), item.SurfaceQuality);                    RangeMark(workSheet, string.Format("Q{0}", rowThreeNum), string.Format("Q{0}", rowThreeNum), item.SizeAndAppearance);                    RangeMark(workSheet, string.Format("R{0}", rowThreeNum), string.Format("R{0}", rowThreeNum), item.Packing);                }                             }            // 添加统计行             RangeMark(workSheet, string.Format("A{0}", totalRowIndex), string.Format("A{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("B{0}", totalRowIndex), string.Format("B{0}", totalRowIndex), "总捆(包)数 ");            RangeMark(workSheet, string.Format("C{0}", totalRowIndex), string.Format("C{0}", totalRowIndex), "计算");            RangeMark(workSheet, string.Format("D{0}", totalRowIndex), string.Format("D{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("E{0}", totalRowIndex), string.Format("E{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("F{0}", totalRowIndex), string.Format("F{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("G{0}", totalRowIndex), string.Format("G{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("H{0}", totalRowIndex), string.Format("I{0}", totalRowIndex), "实际总重量(t)");            RangeMark(workSheet, string.Format("J{0}", totalRowIndex), string.Format("J{0}", totalRowIndex), "计算");            RangeMark(workSheet, string.Format("K{0}", totalRowIndex), string.Format("L{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("M{0}", totalRowIndex), string.Format("N{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("O{0}", totalRowIndex), string.Format("Q{0}", totalRowIndex), "");            RangeMark(workSheet, string.Format("R{0}", totalRowIndex), string.Format("R{0}", totalRowIndex), "");                        // 合并横着的单元格            ColumnsSpan(workSheet, "F1", "G1");            ColumnsSpan(workSheet, "F2", "G2");            ColumnsSpan(workSheet, "F3", "G3");            ColumnsSpan(workSheet, "F4", "G4");            ColumnsSpan(workSheet, "F5", "G5");            ColumnsSpan(workSheet, "L1", "M1");            ColumnsSpan(workSheet, "L2", "M2");            ColumnsSpan(workSheet, "L3", "M3");            ColumnsSpan(workSheet, "L4", "M4");            ColumnsSpan(workSheet, "L5", "M5");            // 合并竖着的单元格             RowsSpan(workSheet, "F1", "F5");            RowsSpan(workSheet, "G1", "G5");            RowsSpan(workSheet, "L1", "L5");            RowsSpan(workSheet, "M1", "M5");            // 插入图片            SavePic(workSheet, "G1", Directory.GetCurrentDirectory() + "/pq.jpg");            SavePic(workSheet, "L1", Directory.GetCurrentDirectory() + "/s.jpg");            //------------------------打印页面相关设置--------------------------------            workSheet.PageSetup.PaperSize = Microsoft.Office.Interop.Excel.XlPaperSize.xlPaperA4;//纸张大小            workSheet.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape;//页面横向            //workSheet.PageSetup.Zoom = 75; //打印时页面设置,缩放比例百分之几            workSheet.PageSetup.Zoom = false; //打印时页面设置,必须设置为false,页高,页宽才有效            workSheet.PageSetup.FitToPagesWide = 1; //设置页面缩放的页宽为1页宽            workSheet.PageSetup.FitToPagesTall = false; //设置页面缩放的页高自动            workSheet.PageSetup.CenterFooter = "第 &P 页,共 &N 页";//页面下标            workSheet.PageSetup.FooterMargin = 5;            workSheet.PageSetup.PrintGridlines = false; //打印单元格网线            workSheet.PageSetup.TopMargin = 15; //上边距为2cm(转换为in)            workSheet.PageSetup.BottomMargin = 20; //下边距为1.5cm            workSheet.PageSetup.LeftMargin = 30; //左边距为2cm            workSheet.PageSetup.RightMargin = 30; //右边距为2cm            workSheet.PageSetup.CenterHorizontally = true; //文字水平居中            //------------------------打印页面设置结束--------------------------------            ///http://blog.csdn.net/wanmingtom/article/details/6125599            ///                         // 生成excel文件            workSheet.SaveAs(_filePath, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 1, false, Type.Missing, Type.Missing, Type.Missing); //另存表             直接打印放开下面两个注释即可            //ExcelApp.Visible = false; //是否显示excel文档            //workSheet.PrintOutEx();            KillProcess(ExcelApp); //杀掉生成的进程            GC.Collect(); //垃圾回收机制                     }        private void ColumnsSpan(Worksheet workSheet, string start, string end)        {            Microsoft.Office.Interop.Excel.Range EG1 = workSheet.get_Range(start, end);            EG1.MergeCells = true;            EG1.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;            EG1.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;        }        private void RowsSpan(Worksheet workSheet, string start, string end)        {            Range pqPricRange = workSheet.get_Range(start, end);            pqPricRange.Application.DisplayAlerts = false;            //pqPricRange.Merge(Missing.Value);            pqPricRange.MergeCells = true;            pqPricRange.Application.DisplayAlerts = true;            pqPricRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;            pqPricRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;        }        ///         /// 创建单元格        ///         /// Worksheet对象        /// 开始格子号        /// 终止格子号        /// 文本        /// 字体大小        /// 行高        /// 横向剧中        /// 单元格边框        /// 
private bool RangeMark(Worksheet workSheet, string startCell, string endCell, string strText, int fontSize = 12, int rowHeight = 30, int HorizontalAlignment = 3, int LineStyle = 1) { //创建一个区域对象。第一个参数是开始格子号,第二个参数是终止格子号。比如选中A1——D3这个区域。 Range range = workSheet.get_Range(startCell, endCell); if (range == null) { System.Diagnostics.Debug.WriteLine("ERROR: range == null"); return false; } range.Merge(0); //合并方法,0的时候直接合并为一个单元格 range.Font.Size = fontSize; //字体大小 range.Font.Name = "黑体"; //字体 //range.EntireRow.AutoFit(); //自动调整行高 //range.EntireColumn.AutoFit(); //range.RowHeight = 20; //range.EntireColumn.AutoFit(); //自动调整列宽 //range.NumberFormatLocal = "@"; //range.EntireColumn.AutoFit(); range.NumberFormatLocal = "@"; range.RowHeight = rowHeight; range.ColumnWidth = 15; //range.EntireColumn.AutoFit(); //range.EntireRow.AutoFit(); range.HorizontalAlignment = HorizontalAlignment; //横向居中 range.VerticalAlignment = XlVAlign.xlVAlignCenter; range.Value = strText; //合并单元格之后,设置其中的文本 range.Cells.Borders.LineStyle = LineStyle; //设置单元格边框的粗细 range.WrapText = true; //文本自动换行 return true; } /// /// 杀掉生成的进程 /// /// 进程程对象 private static void KillProcess(Microsoft.Office.Interop.Excel.Application AppObject) { int Pid = 0; IntPtr Hwnd = new IntPtr(AppObject.Hwnd); System.Diagnostics.Process p = null; try { GetWindowThreadProcessId(Hwnd, out Pid); p = System.Diagnostics.Process.GetProcessById(Pid); if (p != null) { p.Kill(); p.Dispose(); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("进程关闭失败!异常信息:" + ex); } } /// /// 引用Windows句柄,获取程序PID /// /// /// ///
[DllImport("User32.dll")] public static extern int GetWindowThreadProcessId(IntPtr Hwnd, out int PID); private void SavePic(Worksheet workSheet, string rangename, string filename) { Microsoft.Office.Interop.Excel.Range range = workSheet.get_Range(rangename, Type.Missing); range.Select(); range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; /// float PicLeft, PicTop, PicWidth, PicHeight; //距离左边距离,顶部距离,图片宽度、高度 PicTop = Convert.ToSingle(range.Top); PicWidth = Convert.ToSingle(range.MergeArea.Width); PicHeight = Convert.ToSingle(range.Height); PicWidth = Convert.ToSingle(range.Width); PicLeft = Convert.ToSingle(range.Left); // Microsoft.Office.Interop.Excel.Pictures pict = (Microsoft.Office.Interop.Excel.Pictures)workSheet.Pictures(Type.Missing); if (filename.IndexOf(".") > 0) { if (System.IO.File.Exists(filename)) { pict.Insert(filename, Type.Missing);//显示原图 重叠在一起 //workSheet.Shapes.AddPicture(filename, // Microsoft.Office.Core.MsoTriState.msoFalse, // Microsoft.Office.Core.MsoTriState.msoCTrue, // PicLeft, PicTop, PicWidth, PicHeight);//指定位置显示小图 } } } }

  生成的excel预览

 

三 在Visual Studio中通过插件编辑rdlc文件进行可视化布局(动态添加行的我暂时没有弄出来,这里只演示固定字段的打印)

 首先引用:

 

第一步:安装插件 

搜索rdlc

 

 第二步:这里下载好之后从新启动vs它会自动安装插件。安装好后创建文件。

 

 

 

 

 第三步:可视化布局操作

 

 

 第四步:设置数据绑定,在需要绑定数据的单元格中鼠标右键点击文本框属性。

 

 

名称:与实体属性写法一致  值:[与实体属性写法一致]

 

设置字体及大小

 

 

 第五步:布局及所有字段写好之后就设置数据集(我这里用的是本地实体模型)

右键添加数据集

 

这里选择你要绑定的实体

 

 

 

 

注意:当界面设计好之后我们重新生成项目总是提示生成失败,而vs也不提示哪里出错了。

我就猜测是不是这个rdlc文件的问题,我就试着把rdlc文件排除在项目外,再次生成就可以了。

当然这个不影响我们编辑rdlc文件,你可以继续编辑,只不过在读取的时候,是默认bin目录下,这里每次编辑了就要手动赋值到bin目录中。 

 这里设计好了之后就看代码。

按钮事件代码:

private void btn_code_Click(object sender, RoutedEventArgs e)        {            // 数据            var csm = new CodeSheetModel()            {                CodeSheetNumber = "1W52902644",                ContractNuber = "D8S0363501",                QuasiSign = "",                LoadingPoint = "北部站",                DeliveryStandard = "GB/T1499.2-2019",                DeliveryAddress = "",                OrderUnit = "。。。。。有限公司",                ReceivingUnit = "。。。。。。。有限公司",                SettlementUnit = "。。。。。有限公司",                PrivateLineName = "螺纹钢",                LicenseNumber = "川B37037",                BillLoadNo = "1W62904010501",                ShippType = "21",                DeliveryClass = "2",                ProductDescription = "不说明",                VarietyName = "螺纹钢",                ShipmentNo = "",                BrandNo = "HRB400E1114",                FactoryOutData = "2019-04-03 14:10",                MeterMode = "计量",                PrintDateTime = "2019-04-03 14:10:45"            };            var p = new CodePrintHelper();             p.Run(csm, (ex) =>            {                MessageBox.Show(ex.Message);            }, "NPI84FFAF (HP LaserJet MFP M436)");                         MessageBox.Show("完成打印。。。");        }

  CodePrintHelper.cs文件代码:

///     /// 码单打印    ///     public class CodePrintHelper    {        ///         /// 用来记录当前打印到第几页了        ///         private int m_currentPageIndex = 0;        private IList
m_streams; ///
/// 时间 /// private DateTime dateTime; ///
/// 打印机集合 /// private static List
printList = null; ///
/// 打印发生异常的回调函数 /// public Action
ExecptionCallBack { get; set; } ///
/// 获取打印机集合 /// public static List
PrintList { get { if (printList == null) { printList = new List
(); LocalPrintServer printServer = new LocalPrintServer(); PrintQueueCollection printQueuesOnLocalServer = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local }); foreach (PrintQueue printer in printQueuesOnLocalServer) printList.Add(printer.Name); } return printList; } } ///
/// 执行打印 /// ///
打印的数据 ///
打印机名称,为空则调用默认的打印机 public bool Run(CodeSheetModel outPlate, Action
execptionCallBack, string printName = null) { ExecptionCallBack = execptionCallBack; // 检查是否指定了打印机 if (string.IsNullOrWhiteSpace(printName) && PrintList.Count > 0) printName = PrintList[0]; else if (PrintList.Count <= 0) { ExecptionCallBack(new Exception("未找到可用的打印机")); return false; } if (!printList.Contains(printName)) { ExecptionCallBack(new Exception(string.Format("未找到打印机 {0}", printName))); return false; } dateTime = DateTime.Now; var report = new LocalReport(); report.ReportPath = "./Reports/ExitBarReport.rdlc"; report.DataSources.Add(new ReportDataSource("CodeSheetDataSet", LoadData(outPlate))); Export(report); m_currentPageIndex = 0; Print(printName); if (m_streams != null) { foreach (Stream stream in m_streams) stream.Close(); m_streams = null; } DeleteTempFile(); return true; } ///
/// 填充要打印的数据 /// ///
///
public DataTable LoadData(CodeSheetModel op) { DataTable dt = new DataTable(); dt.Columns.Add("CodeSheetNumber", typeof(string)); dt.Columns.Add("ContractNuber", typeof(string)); dt.Columns.Add("QuasiSign", typeof(string)); dt.Columns.Add("LoadingPoint", typeof(string)); dt.Columns.Add("DeliveryStandard", typeof(string)); dt.Columns.Add("DeliveryAddress", typeof(string)); dt.Columns.Add("OrderUnit", typeof(string)); dt.Columns.Add("ReceivingUnit", typeof(string)); dt.Columns.Add("SettlementUnit", typeof(string)); dt.Columns.Add("PrivateLineName", typeof(string)); dt.Columns.Add("LicenseNumber", typeof(string)); dt.Columns.Add("BillLoadNo", typeof(string)); dt.Columns.Add("ShippType", typeof(string)); dt.Columns.Add("DeliveryClass", typeof(string)); dt.Columns.Add("ProductDescription", typeof(string)); dt.Columns.Add("VarietyName", typeof(string)); dt.Columns.Add("ShipmentNo", typeof(string)); dt.Columns.Add("BrandNo", typeof(string)); dt.Columns.Add("FactoryOutData", typeof(string)); dt.Columns.Add("MeterMode", typeof(string)); dt.Columns.Add("PrintDateTime", typeof(string)); 产品 //dt.Columns.Add("MeltingNumber", typeof(string)); //dt.Columns.Add("MaterialScience", typeof(string)); //dt.Columns.Add("MachiningState", typeof(string)); //dt.Columns.Add("Chang", typeof(string)); //dt.Columns.Add("NetWight", typeof(string)); //dt.Columns.Add("BundleNum", typeof(string)); //dt.Columns.Add("BranchNum", typeof(string)); DataRow dr = dt.NewRow(); dr["CodeSheetNumber"] = op.CodeSheetNumber; dr["ContractNuber"] = op.ContractNuber; dr["QuasiSign"] = op.QuasiSign; dr["LoadingPoint"] = op.LoadingPoint; dr["DeliveryStandard"] = op.DeliveryStandard; dr["DeliveryAddress"] = op.DeliveryAddress; dr["OrderUnit"] = op.OrderUnit; dr["ReceivingUnit"] = op.ReceivingUnit; dr["SettlementUnit"] = op.SettlementUnit; dr["PrivateLineName"] = op.PrivateLineName; dr["LicenseNumber"] = op.LicenseNumber; dr["BillLoadNo"] = op.BillLoadNo; dr["ShippType"] = op.ShippType; dr["DeliveryClass"] = op.DeliveryClass; dr["ProductDescription"] = op.ProductDescription; dr["VarietyName"] = op.VarietyName; dr["ShipmentNo"] = op.ShipmentNo; dr["BrandNo"] = op.BrandNo; dr["FactoryOutData"] = op.FactoryOutData; dr["MeterMode"] = op.MeterMode; dr["PrintDateTime"] = op.PrintDateTime; dt.Rows.Add(dr); 产品 //for (int i = 0; i < productItem.Count; i++) //{ // var model = productItem[i]; // var newRow = dt.NewRow(); // dr["MeltingNumber"] = model.MeltingNumber; // dr["MaterialScience"] = model.MaterialScience; // dr["MachiningState"] = model.MachiningState; // dr["Chang"] = model.Chang; // dr["NetWight"] = model.NetWight; // dr["BundleNum"] = model.BundleNum; // dr["BranchNum"] = model.BranchNum; // dt.Rows.Add(newRow); //} return dt; } ///
/// 导出报表的每一个页面到一个EMF文件 /// ///
private void Export(LocalReport report) { string deviceInfo = "
" + "
EMF
" + "
19.30cm
" + "
6.68cm
" + "
0.13cm
" + "
1.53cm
" + "
0.13cm
" + "
0.13cm
" + "
"; Warning[] warnings; m_streams = new List
(); report.Render("Image", deviceInfo, CreateStream, out warnings); foreach (Stream stream in m_streams) { stream.Position = 0; } } ///
/// 创建流 /// ///
///
///
///
///
///
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { //var stream = new FileStream(@"./" + name + // "." + fileNameExtension, FileMode.Create); //var stream = new FileStream($"./{dateTime.ToString("yyyy_MM_dd_HH_mm_ss")}_{name}.{fileNameExtension}", FileMode.Create); if (!Directory.Exists("./PrintFileTemp")) { Directory.CreateDirectory("./PrintFileTemp"); } var stream = new FileStream(string.Format("./PrintFileTemp/{0}_{1}.{2}", dateTime.ToString("yyyy_MM_dd_HH_mm_ss"), name, fileNameExtension), FileMode.Create); if (m_streams.Count < 1) m_streams.Add(stream); return stream; } ///
/// 打印 /// ///
private void Print(string printerName) { if (m_streams == null || m_streams.Count == 0) return; PrintDocument printDoc = new PrintDocument(); printDoc.PrinterSettings.PrinterName = printerName; if (!printDoc.PrinterSettings.IsValid) { //ExecptionCallBack(new Exception($"未找到打印机 {printerName}")); ExecptionCallBack(new Exception(string.Format("未找到打印机 {0}", printerName))); return; } // 0.001 英寸 = 0.0254 厘米 // = 960cm //printDoc.DefaultPageSettings.PaperSize = new PaperSize("Custom", 815, 400); printDoc.PrinterSettings.Copies = 1; printDoc.PrintPage += new PrintPageEventHandler(PrintPage); printDoc.Print(); } ///
/// /// ///
///
private void PrintPage(object sender, PrintPageEventArgs ev) { Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); ev.Graphics.DrawImage(pageImage, ev.PageBounds); ev.HasMorePages = false; ev.PageSettings.Landscape = true; } private void DeleteTempFile() { Dispose(); foreach (var item in Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory + "PrintFileTemp")) { try { File.Delete(item); } catch (Exception) { } } } ///
/// 释放现有流资源 /// public void Dispose() { if (m_streams != null) { foreach (Stream stream in m_streams) stream.Close(); m_streams = null; } } }

  

 以上就是三种打印方式。

 以上源码下载地址:

转载于:https://www.cnblogs.com/wendj/p/10728685.html

你可能感兴趣的文章
Maven学习总结(四)——Maven核心概念
查看>>
mysqldumpslow和mysqlslap使用
查看>>
mysql使用SUBSTRING展示特定字段里面的特定字符
查看>>
ubuntu12.04 虚拟机锁定鼠标问题。
查看>>
java retry(重试) spring retry, guava retrying 详解
查看>>
嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译
查看>>
MyBatis学习总结(六)——调用存储过程
查看>>
Java基础学习总结(8)——super关键字
查看>>
职场上班族可吃零食能消除疲劳
查看>>
PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决
查看>>
Java基础学习总结(8)——super关键字
查看>>
a.b.c.d.e.f.g这样的字段变成d.e.f.g的几种方法
查看>>
MySQL5.7运行自定义函数报错
查看>>
C++中关联容器和序列式容器在erase迭代器时的区别
查看>>
细谈围城---我的启示录
查看>>
字符串shuffle
查看>>
Nginx+PHP配置
查看>>
如何修改Xenserver网卡的offload
查看>>
Jmeter安装手记
查看>>
FCKeditor配置步骤详解
查看>>