/// <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); }
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); }
/// <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); }
/// <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); } }
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); }