zoukankan      html  css  js  c++  java
  • Asp.Net Zero通用打印实现

    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中集成打印控件才能开始打印。

     打印控件实现方式:https://www.cnblogs.com/william-xu/p/11098562.html

  • 相关阅读:
    linux操作提示:“Can't open file for writing”或“operation not permitted”的解决办法
    CSS中background:url(图片) 不能显示的问题
    CSS3background-size背景图片尺寸属性
    在GitHub上成果预览
    快速上手GitHub上传代码
    css布局模型(1)
    css+div浮动怎么让它在窗口大小变化时不改变位置
    node.js基于express框架搭建一个简单的注册登录Web功能
    node.js 安装使用http-server
    grunt安装与运行
  • 原文地址:https://www.cnblogs.com/william-xu/p/11125623.html
Copyright © 2011-2022 走看看