Asp.Net Zero是一款非常優秀的web框架,可以用來快速構建業務系統。框架滿足了業務系統所需的大部分通用功能,但是系統必須的打印報表功能一直沒有實現。下面給大家介紹如何在zero中集成打印功能,可實現模板設計、套打、批量打印、指令打印、條碼/二維碼打印等等。
首先需要設計一套靈活用於系統的打印業務,業務設計如下:
首先在core層中新增Prints文件夾,prints中新建PrintTemplate
public class PrintTemplate : Entity<int>, ISoftDelete, IMustHaveTenant { public int TenantId { get; set; } public bool IsDeleted { get; set; } /// <summary> /// 模塊 /// </summary> [StringLength(50)] public string AppServiceName { get; set; } /// <summary> /// 模板名稱 /// </summary> [StringLength(50)] public string TemplateName { get; set; } /// <summary> /// 默認模板 /// </summary> public bool Defaule { get; set; } /// <summary> /// 模板內容 /// </summary> public string TemplateContent { get; set; } /// <summary> /// 備注 /// </summary> [StringLength(100)] public string Remark { get; set; } }
PrintTemplate創建后,添加IPrintTemplateManager領域服務方便接口調用:
public interface IPrintTemplateManager: IDomainService { Task<List<string>> GetTemplates(string serviceName); Task<string> Print(string serviceName,string name); }
Print是選擇打印模板后獲取模板內容,這里可以單次直接獲取模板列表和內容,但是可能業務發展后,打印模板會有很多,所以分步獲取更加高效。
GetTemplates是獲取當前模塊打印列表,只有模板名稱沒有內容。
數據庫遷移后在Application.Shared層中添加IPrintManagerAppService接口
public interface IPrintManagerAppService: IApplicationService { Task CreateOrUpdatePrint(CreateOrEditPrintInput input); Task DeletePrint(EntityDto<int> input); Task<PagedResultDto<CreateOrEditPrintInput>> GetPrints(GetPrintInput input); }
打印模板是根據業務模塊,也就是abp的應用服務進行分類,在報表頁面需要獲取當前模塊所有打印模板列表:
result.PrintTemplates = await _printTemplateManager.GetTemplates("SomeoneAppService");
選擇打印模板后獲取模板內容並打印:
public async Task<string> Print(string templateName) { return await _printTemplateManager.Print("PurchaseManagerAppService", templateName); }
接口實現發布后,在angular中新增打印管理模塊,用於統一管理模板,該模塊應該由開發人員進行維護。
模板設計如下,可以根據需求設計其他樣式模板:
總結:到這里打印業務已經實現,最后需要在angular中集成打印控件才能開始打印。