Пример #1
0
        /// <summary>
        /// 生成打印任务图片结果
        /// </summary>
        /// <param name="printTaskRequest">打印任务请求</param>
        /// <param name="TaskId">任务Id</param>
        /// <param name="CurrentDirectory">当前路径</param>
        /// <param name="TemplateFolder">模板文件夹名</param>
        /// <param name="FileName">文件名</param>
        /// <param name="BartendExePath">Bartender执行路径</param>
        /// <param name="PrintName">打印机名</param>
        /// <returns></returns>
        public static bool ExportPrintPreviewToImage(this PrintTaskRequest printTaskRequest, string TaskId, string CurrentDirectory, string TemplateFolder, string FileName, string BartendExePath, string PrintName)
        {
            bool   rtn  = false;
            string path = string.Format(@"{0}{1}{2}_{3}_{4}{5}", CurrentDirectory.getPath(), TemplateFolder.getPath(), TaskId, "Preview_Label", "1", ".jpg");

            if (FileHelper.Exists(path))
            {
                rtn = true;
            }
            return(rtn);
        }
Пример #2
0
        public async Task <ActionResult <PrintTaskResponse> > PostPrintTaskExcel(PrintTaskRequest printTaskRequest)
        {
            string taskId = printTaskRequest.TaskId;
            bool   result = true;
            string msg    = "Success to print";

            TodoItem todoItem = _context.TodoItems.Find(taskId);
            await Task.Run(() =>
            {
                ExcelHelper.PrintExcel(todoItem.GenerateExcelFile, todoItem.PrintName, todoItem.PrintCount, todoItem.GenerateExcelFile.Replace(".xlsx", ".pdf"));
            });

            //请求打印任务结果
            PrintTaskResponse printTaskResponse = new PrintTaskResponse {
                TaskId = taskId, Result = result, Msg = msg
            };

            return(printTaskResponse);
        }
Пример #3
0
        /// <summary>
        /// 生成打印任务
        /// </summary>
        /// <param name="printTaskRequest">打印任务请求</param>
        /// <param name="TaskId">任务Id</param>
        /// <param name="CurrentDirectory">当前路径</param>
        /// <param name="TemplateFolder">模板文件夹名</param>
        /// <param name="OutputFolder">输出文件夹名</param>
        /// <param name="FileName">文件名</param>
        /// <param name="BartendExePath">Bartender执行路径</param>
        /// <param name="PrintName">打印机名</param>
        /// <returns></returns>
        public static string GeneratePrintTask(this PrintTaskRequest printTaskRequest, string TaskId, string CurrentDirectory, string TemplateFolder, string OutputFolder, string FileName, string BartendExePath, string PrintName)
        {
            //Step-1,产生NameSubStrings
            StringBuilder NamedSubStrings = new StringBuilder();

            foreach (NamedSubString item in printTaskRequest.TaskContent)
            {
                NamedSubStrings
                .Append("\t".getDuplicates(3)).Append(string.Format(@"<NamedSubString Name=""{0}"">", item.Name)).Append("\r\n")
                .Append("\t".getDuplicates(4)).Append(string.Format(@"<Value>{0}</Value>", item.Value)).Append("\r\n")
                .Append("\t".getDuplicates(3)).Append("</NamedSubString>").Append("\r\n");
            }
            string nameSubStrings = NamedSubStrings.ToString();
            //Step-2,生成图片
            StringBuilder ExportPrintPreviewToImage = new StringBuilder();
            string        exportPrintPreviewToImage = ExportPrintPreviewToImage
                                                      .Append("\t".getDuplicates(2)).Append(@"<ExportPrintPreviewToImage ReturnImageInResponse=""false"">").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<Format>").Append("\r\n")
                                                      .Append("\t".getDuplicates(4)).Append(string.Format(@"{0}{1}{2}{3}", CurrentDirectory.getPath(), TemplateFolder.getPath(), FileName, ".btw")).Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("</Format>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<Folder>").Append("\r\n")
                                                      .Append("\t".getDuplicates(4)).Append(string.Format(@"{0}{1}", CurrentDirectory.getPath(), OutputFolder.getPath())).Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("</Folder>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<FileNameTemplate>").Append("\r\n")
                                                      .Append("\t".getDuplicates(4)).Append(string.Format(@"{0}_{1}_{2}{3}", TaskId, "Preview_Label", "%PageNumber%", ".jpg")).Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("</FileNameTemplate>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<ImageFormatType>").Append("JPG").Append("</ImageFormatType>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<Colors>").Append("btColors24Bit").Append("</Colors>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<DPI>").Append("300").Append("</DPI>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<Overwrite>").Append("true").Append("</Overwrite>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<IncludeMargins>").Append("true").Append("</IncludeMargins>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<IncludeBorder>").Append("true").Append("</IncludeBorder>").Append("\r\n")
                                                      .Append("\t".getDuplicates(3)).Append("<BackgroundColor>").Append("16777215").Append("</BackgroundColor>").Append("\r\n")
                                                      .Append("\t".getDuplicates(2)).Append("</ExportPrintPreviewToImage>").Append("\r\n")
                                                      .ToString();
            //Step-3,产生XmlScripts
            string xmlScripts = new StringBuilder(@"<?xml version=""1.0"" encoding=""utf-8""?>").Append("\r\n")
                                .Append(@"<XMLScript Version=""2.0"">").Append("\r\n")
                                .Append("\t".getDuplicates(1)).Append(string.Format(@"<Command Name=""{0}"">", TaskId)).Append("\r\n")
                                .Append("\t".getDuplicates(2)).Append("<Print>").Append("\r\n")
                                .Append("\t".getDuplicates(3)).Append("<Format>").Append("\r\n")
                                .Append("\t".getDuplicates(4)).Append(string.Format(@"{0}{1}{2}{3}", CurrentDirectory.getPath(), TemplateFolder.getPath(), FileName, ".btw")).Append("\r\n")
                                .Append("\t".getDuplicates(3)).Append("</Format>").Append("\r\n")
                                .Append("\t".getDuplicates(3)).Append("<PrintSetup>").Append("\r\n")
                                .Append("\t".getDuplicates(4)).Append("<Printer>").Append(PrintName).Append("</Printer>").Append("\r\n")
                                .Append("\t".getDuplicates(3)).Append("</PrintSetup>").Append("\r\n")
                                .Append(string.Format("{0}", nameSubStrings.getNameSubStrings())).Append("\r\n")
                                .Append("\t".getDuplicates(2)).Append("</Print>").Append("\r\n")
                                .Append(string.Format("{0}", exportPrintPreviewToImage))
                                .Append("\t".getDuplicates(1)).Append("</Command>").Append("\r\n")
                                .Append(@"</XMLScript>")
                                .ToString();
            //Step-4, 产生XmlScripts写入xml文件
            string path = string.Format(@"{0}{1}{2}_{3}{4}", CurrentDirectory.getPath(), OutputFolder.getPath(), TaskId, FileName, ".xml");

            if (FileHelper.CreateFile(path))
            {
                FileHelper.Write(path, xmlScripts);
            }
            //Step-5, 产生打印任务
            StringBuilder sb = new StringBuilder("")
                               .Append(BartendExePath)
                               .Append(" /XMLScript=").Append(path);

            //Step-6,是否打印下一个标签
            if (!printTaskRequest.PrintNext)
            {
                sb.Append(" /X");
            }
            string rtn = sb.ToString();

            return(rtn);
        }
Пример #4
0
        /// <summary>
        /// 生成待打印的Excel
        /// </summary>
        /// <param name="printTaskRequest">打印任务请求</param>
        /// <param name="taskId">任务Id</param>
        /// <param name="currentDirectory">当前路径</param>
        /// <param name="templateFolder">模板文件夹名</param>
        /// <param name="outputFolder">输出文件夹名</param>
        /// <param name="fileName">文件名</param>
        /// <param name="msg">输出信息</param>
        /// <returns></returns>
        public static bool GeneratePrintExcel(this PrintTaskRequest printTaskRequest, string taskId, string currentDirectory, string templateFolder, string outputFolder, string fileName, out string msg)
        {
            try
            {
                List <SheetRenderer> list = new List <SheetRenderer>();

                foreach (var sheet in printTaskRequest.ExcelTaskContent)
                {
                    List <IElementRenderer> elementRenderers = new List <IElementRenderer>();
                    //单元格内容
                    foreach (var cell in sheet.CellContent)
                    {
                        elementRenderers.Add(new ParameterRenderer(cell.Name, cell.Value));
                    }
                    //表格内容
                    foreach (var table in sheet.TableContent)
                    {
                        List <JObject> obj = new List <JObject>();
                        foreach (var content in table.Content)
                        {
                            obj.Add(content.ToString().ToJObject());
                        }

                        if (obj.Count == 0)
                        {
                            continue;
                        }

                        List <ParameterRenderer <JObject> > parameterRenderers = new List <ParameterRenderer <JObject> >();
                        var properties = obj[0].Properties();
                        foreach (var property in properties)
                        {
                            parameterRenderers.Add(new ParameterRenderer <JObject>(property.Name, m => m[property.Name].ToString()));
                        }
                        elementRenderers.Add(new RepeaterRenderer <JObject>(table.TableName, obj, parameterRenderers.ToArray()));
                    }

                    list.Add(new SheetRenderer(sheet.SheetName, elementRenderers.ToArray()));
                }

                if (list.Count > 0)
                {
                    string templateExcel = Path.Combine(currentDirectory, templateFolder, $"{fileName}.xlsx");
                    string outputExcel   = Path.Combine(currentDirectory, outputFolder, $"{taskId}_{fileName}.xlsx");
                    ExportHelper.ExportToLocal(templateExcel, outputExcel, list.ToArray());

                    msg = outputExcel;
                    return(true);
                }
                else
                {
                    msg = "Fail to generate excel, bad excel content";
                    return(false);
                }
            }
            catch (Exception e)
            {
                msg = e.Message;
                return(false);
            }
        }
Пример #5
0
        public async Task <ActionResult <PrintTaskResponse> > PostPrintTask(PrintTaskRequest printTaskRequest)
        {
            //更新TodoItem
            string   taskId     = printTaskRequest.TaskId;
            string   fileName   = printTaskRequest.FileName;
            string   printName  = printTaskRequest.PrintName;
            string   printType  = printTaskRequest.PrintType;
            int      printCount = printTaskRequest.PrintCount;
            TodoItem todoItem   = _context.TodoItems.Find(printTaskRequest.TaskId);

            todoItem.PrintName             = printName;
            todoItem.PrintType             = printType;
            todoItem.PrintCount            = printCount;
            todoItem.FileName              = fileName;
            todoItem.IsComplete            = true;
            _context.Entry(todoItem).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            _context.SaveChanges();

            bool   result = true;
            string msg    = "Success to print";

            if (printType == "Bartend")
            {
                //生成打印任务
                string printTask = printTaskRequest.GeneratePrintTask(taskId, _hostingEnvironment.WebRootPath, this.TemplateFolder, this.OutputFolder, fileName, this.BartendExePath, printName);
                LogHelper.WriteLog(printTask, new Exception("PostPrintTask"));
                //发送条码打印任务
                await Task.Run(() =>
                {
                    //需要执行Dos命令,
                    //举例:C:\PROGRA~2\Seagull\BARTEN~1\bartend.exe /XMLScript=E:\OA_HOME\Web\OA\AmwayFramework\PrintService.Webapi\wwwroot\PIMOutput\f3d12df1-8d85-4ece-ac24-607e675293eb_ontest.xml /X
                    //方法一,问题是部署到服务器上无法执行,所以采用方法二
                    DosCommandOutputHelper.Execute(printTask, 5000);
                    //方法二,使用System.Diagnostics.Process.Start执行
                    //string[] cmd = printTask.Split(" ");
                    //元素1 C:\PROGRA~2\Seagull\BARTEN~1\bartend.exe
                    //元素2 XMLScript=E:\OA_HOME\Web\OA\AmwayFramework\PrintService.Webapi\wwwroot\PIMOutput\f3d12df1-8d85-4ece-ac24-607e675293eb_ontest.xml
                    //元素3 /X
                    //string cmd2 = new StringBuilder(cmd[1]).Append(" ").Append(cmd.Length > 2 ? cmd[2] : "").ToString();
                    //var psi = new System.Diagnostics.ProcessStartInfo(cmd[0], cmd2);
                    //System.Diagnostics.Process.Start(psi);
                    //Thread.Sleep(5000);
                });

                //生成打印任务图片结果
                result = false;
                msg    = "Fail to print";
                if (printTaskRequest.ExportPrintPreviewToImage(taskId, _hostingEnvironment.WebRootPath, this.TemplateFolder, fileName, this.BartendExePath, printName) == true)
                {
                    result = true;
                    msg    = "Success to print";
                }
            }
            else if (printType == "Excel")
            {
                //根据模板和数据生成Excel文件
                if (!printTaskRequest.GeneratePrintExcel(taskId, _hostingEnvironment.WebRootPath, this.TemplateFolder_Excel, this.OutputFolder_Excel, fileName, out msg))
                {
                    result = false;
                }
                else
                {
                    //根据Excel文件生成Pdf文件
                    string pdfFileName = ExcelHelper.ExcelToPdf(msg);

                    //保存
                    Uri location = new Uri($"{Request.Scheme}://{Request.Host}");
                    todoItem.GenerateExcelFile     = msg;
                    todoItem.GeneratePdfFile       = $"{location.AbsoluteUri}{this.OutputFolder_Excel.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)}/{pdfFileName}";
                    _context.Entry(todoItem).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
                    _context.SaveChanges();
                }
            }

            //请求打印任务结果
            PrintTaskResponse printTaskResponse = new PrintTaskResponse {
                TaskId = taskId, Result = result, Msg = msg
            };

            return(printTaskResponse);
        }