JRT实现在线打印预览

news2024/11/23 18:44:46

在JRT打印元素绘制协议一篇已经介绍过打印把绘图和打印逻辑进行了分离,这是和老设计最大的不同。因为老的设计时候没想着做在线预览功能,是后面硬性扩出来的。这次从最初设计就考虑绘图逻辑各处共用,包括打印预览,在线打印预览等、后面还会再加PDF之类的。

总之:设计很重要,设计不到位后期功能难做,复杂度也会很高。

先看效果:
在这里插入图片描述

在这里插入图片描述

后台ashx对接绘图

import JRT.Core.Dto.OutValue;
import JRT.Core.MultiPlatform.FileCollection;
import JRT.Model.Bussiness.Parameters;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.ParamDto;
import JRT.Core.Dto.OutParam;
import JRT.Model.Entity.*;
import JRT.Core.Util.Convert;
import JRT.Core.MultiPlatform.JRTContext;
import JRTPrintDraw.DrawElement;
import JRTPrintDraw.JRTPrintDrawProtocol;
import JRTPrintDraw.JsonDealUtil;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.Base64;
import java.util.List;

/**
 * 打印绘图在线预览的后台类,对接打印绘图库,由于打印元素绘制协议是完全剥离的,所以很好共用,这样体现了设计的优势
 */
public class ashJRTPrintDrawView  extends BaseHttpHandlerNoSession {
    /**
     * 得到打印画图的图片。分页的话有多张图片,在C#层面对接,返回串自己在前面加data:image/png;base64,后给图片绑定。分页多个图的Base64串以^分隔
     * @return
     * @throws Exception
     */
    public String QryPrintDrawImgs() throws Exception
    {
        //打印M类名
        String ClassName = Helper.ValidParam(JRTContext.GetRequest(Request,"ClassName"), "");
        //打印M方法名
        String FuncName = Helper.ValidParam(JRTContext.GetRequest(Request,"FuncName"), "");
        //绘图宽度
        int Width = Helper.ValidParam(JRTContext.GetRequest(Request,"Width"), 827);
        //绘图高度
        int Height = Helper.ValidParam(JRTContext.GetRequest(Request,"Height"), 583);
        //返回类型
        String RetType = "BASE64";
        //文件名
        String FileName = Helper.ValidParam(JRTContext.GetRequest(Request,"FileName"), "PrintImg.bmp");
        Parameters param = new Parameters();
        param.P0 = Helper.ValidParam(JRTContext.GetRequest(Request,"P0"), "");
        param.P1 = Helper.ValidParam(JRTContext.GetRequest(Request,"P1"), "");
        param.P2 = Helper.ValidParam(JRTContext.GetRequest(Request,"P2"), "");
        param.P3 = Helper.ValidParam(JRTContext.GetRequest(Request,"P3"), "");
        param.P4 = Helper.ValidParam(JRTContext.GetRequest(Request,"P4"), "");
        param.P5 = Helper.ValidParam(JRTContext.GetRequest(Request,"P5"), "");
        param.P6 = Helper.ValidParam(JRTContext.GetRequest(Request,"P6"), "");
        param.P7 = Helper.ValidParam(JRTContext.GetRequest(Request,"P7"), "");
        param.P8 = Helper.ValidParam(JRTContext.GetRequest(Request,"P8"), "");
        param.P9 = Helper.ValidParam(JRTContext.GetRequest(Request,"P9"), "");
        param.P10 = Helper.ValidParam(JRTContext.GetRequest(Request,"P10"), "");
        param.P11 = Helper.ValidParam(JRTContext.GetRequest(Request,"P11"), "");
        param.P12 = Helper.ValidParam(JRTContext.GetRequest(Request,"P12"), "");
        param.P13 = Helper.ValidParam(JRTContext.GetRequest(Request,"P13"), "");

        String strRet = "";
        int rowCount = 0;
        String logInfo = "^^^^";
        String json = Helper.GetVMData(ClassName, FuncName, param, null, null);
        List<DrawElement> elementList = JsonDealUtil.Json2List(json, DrawElement.class);
        JRTPrintDrawProtocol PrintHandeler = new JRTPrintDrawProtocol();
        int AllPageNum = PrintHandeler.JRTPrintDrawInit(elementList);
        for(int p=0;p<AllPageNum;p++)
        {
            List<DrawElement> onePageData=PrintHandeler.GetOnePageData(p);
            float maxY = 0;
            for (int j = 0; j < onePageData.size(); j++)
            {
                DrawElement curRow = onePageData.get(j);
                float PrintY = 0;
                if (!curRow.PrintY.isEmpty())
                {
                    PrintY = Convert.ToFloat(curRow.PrintY);
                }
                if (maxY < PrintY)
                {
                    maxY = PrintY;
                }
                //图片元素
                if (curRow.PrintType.equals("Graph"))
                {
                    float PrintHeight = 0;
                    if (!curRow.PrintHeight.isEmpty())
                    {
                        PrintHeight = Convert.ToFloat(curRow.PrintHeight);
                    }
                    if (maxY < PrintY+ PrintHeight)
                    {
                        maxY = PrintY+ PrintHeight;
                    }
                }
                //是外送文件
                if (curRow.PrintType.equals("FILE"))
                {
                    if (strRet.isEmpty())
                    {
                        strRet = curRow.DataField;
                    }
                    else
                    {
                        strRet = strRet + "~" + curRow.DataField;
                    }
                }
            }
            //A4
            if (maxY > 583)
            {
                Height = 1169;
            }
            BufferedImage img = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_ARGB);
            Graphics g = img.getGraphics();
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, img.getWidth(), img.getHeight());
            PrintHandeler.DrawOnePage(g, p);
            if (strRet.isEmpty())
            {
                strRet = ImgToBase64(img);
            }
            else
            {
                strRet = strRet + "~" + ImgToBase64(img);;
            }
        }
        return strRet;
    }


    /**
     * 图片转Base64串
     * @param img
     * @return
     * @throws Exception
     */
    private String ImgToBase64(BufferedImage img) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(img, "png", baos);
        byte[] bytes = baos.toByteArray();
        String base64Image = Base64.getEncoder().encodeToString(bytes);
        return base64Image;
    }
}

在线预览界面实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>打印绘图预览</title>
    <script type="text/javascript">
        var sysTheme = '';
    </script>
    <script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        SYSPageCommonInfo.Init(true);
        var BasePath = '';
        var ResourcePath = '';
        var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;
        var SessionStr = SYSPageCommonInfo.Data.SessionStr;
    </script>
    <script src="../../jrtprint/js/JRTPrint.js" type="text/javascript"></script>
    <style type="text/css">
        .btnMini {
            z-index:9999;
            position:relative;
            right:10px;
            top:0px;
        }
    </style>
    <script type="text/javascript">
        //得到传入的打印主参数
        var PrintDR = requestUrlParam(location.href, "PrintDR").replace("#", "");
        //打印类名
        var PrintClassName = requestUrlParam(location.href, "PrintClassName").replace("#", "");
        //仅仅浏览模式
        var OnlyView = requestUrlParam(location.href, "OnlyView").replace("#", "");
        var UserDR = requestUrlParam(location.href, "UserDR").replace("#", "");
        var Align = requestUrlParam(location.href, "Align").replace("#", "");
        //显示顶部按钮
        var ShowTopBtn = requestUrlParam(location.href, "ShowTopBtn").replace("#", "");
        var userCode = UserDR;
        //1:报告处理打印 2:自助打印 3:医生打印
        var paramList = "1";
        //所有页面数
        var AllPageNum = 1;
        var AllPageArr = null;
        var AllPageBllIDArr = null;
        $(function () {
            if (OnlyView == "1") {
                //批量预览
                if (PrintDR == "") {
                    PrintDR = localStorage["OnlyViewPrintDR"];
                }
                $("#btnPrint").hide();
                $("#btnPDF").hide();
                $("#btnPrintMini").remove();
                $("#btnPDFMini").remove();
            }
            //不显示顶部按钮
            if (ShowTopBtn == "0") {
                $("#divOper").hide();
            }
            else {
                $(".btnMini").hide();
            }
            //没传打印类的默认类
            if (PrintClassName == null || PrintClassName == "") {
                PrintClassName = "vm.test.PrintBarCodeTest";
            }
            if (Align == "Left") {
                $("#divOper").css("margin", "0 0 0 0");
                $("#divMian").css("margin", "0 0 0 0");
            }
            //打印
            $("#btnPrint").click(function () {
                InvokePrint("1");
            });
            $("#btnPrintMini").click(function () {
                InvokePrint("1");
            });
            //导出PDF
            $("#btnPDF").click(function () {
                InvokePrint("3");
            });
            $("#btnPDFMini").click(function () {
                InvokePrint("3");
            });

            //页数回车
            $("#txtCurPage").keydown(function (event) {
                if (event.keyCode == "13") {
                    var curPage = $("#txtCurPage").val();
                    var curPage = parseInt(curPage);
                    if (curPage < 1) {
                        curPage = 1;
                    }
                    if (curPage > AllPageNum) {
                        curPage = AllPageNum;
                    }
                    ShowOnePage(curPage);
                }
            });
            //快捷键
            $(window).keydown(function (e) {
                if (e.key == "PageUp" || e.key == "ArrowUp") {
                    PrePage();
                }
                else if (e.key == "ArrowLeft") {
                    PrePage();
                }
                else if (e.key == "PageDown" || e.key == "ArrowDown") {
                    NextPage();
                }
                else if (e.key == "ArrowRight") {
                    NextPage();
                }
                else if (e.key == "F6") {
                    UnCheckParent();
                }
            });

            //前一页
            $("#btnPrePage").click(function () {
                PrePage();
            });
            $("#btnPrePageMini").click(function () {
                PrePage();
            });
            //前一页
            function PrePage() {
                var curPage = $("#txtCurPage").val();
                var curPage = parseInt(curPage);
                curPage = curPage - 1;
                if (curPage < 1) {
                    curPage = 1;
                }
                $("#txtCurPage").val(curPage);
                ShowOnePage(curPage);
            }

            //后一页
            $("#btnNextPage").click(function () {
                NextPage();
            });
            $("#btnNextPageMini").click(function () {
                NextPage();
            });
            //下一页
            function NextPage() {
                var curPage = $("#txtCurPage").val();
                var curPage = parseInt(curPage);
                curPage = curPage + 1;
                if (curPage > AllPageNum) {
                    curPage = AllPageNum;
                }
                $("#txtCurPage").val(curPage);
                ShowOnePage(curPage);
            }

            //显示一页
            function ShowOnePage(curPage) {
                var imgStr = '';
                if ((AllPageArr[curPage - 1].toLowerCase().indexOf("../../") > -1) || (AllPageArr[curPage - 1].toLowerCase().indexOf("ftp://") > -1) || (AllPageArr[curPage - 1].toLowerCase().indexOf("http://") > -1) || (AllPageArr[curPage - 1].toLowerCase().indexOf("https://") > -1)) {
                    if (curPage > 0) {
                        imgStr += '<div style="font-weight:bold;color:#ff5252;">第' + curPage + '页</div><iframe src="' + DealPdfViewUrl(AllPageArr[curPage - 1]) + '"  style="margin-bottom:10px;width:827px;height:1189px;"/>';
                    }
                    else {
                        imgStr += '<iframe src="' + DealPdfViewUrl(AllPageArr[curPage - 1]) + '"  style="margin-bottom:10px;width:827px;height:1189px;"/>';
                    }
                }
                else {
                    if (curPage > 0) {
                        imgStr += '<div style="font-weight:bold;color:#ff5252;">第' + curPage + '页</div><img src="' + "data:image/png;base64," + AllPageArr[curPage - 1] + '" alt="报告" style="margin-bottom:10px;"/>';
                    }
                    else {
                        imgStr += '<img src="' + "data:image/png;base64," + AllPageArr[curPage - 1] + '" alt="报告" style="margin-bottom:10px;"/>';
                    }
                }
                $("#divMian").html(imgStr);
            }
            //校验参数
            if (PrintDR == "") {
                $("#spPage").html("没按要求传入PrintDR!");
                return;
            }
            //请求打印
            $.ajax({
                type: "get",
                dataType: "text", //text, json, xml
                cache: false, //
                async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                url: '../ashx/ashJRTPrintDrawView.ashx?Method=QryPrintDrawImgs',
                data: { ClassName: PrintClassName, FuncName: "GetData", Width: 827, Height: 583, P0: PrintDR, P1: userCode, P2: paramList, RetBll: "1" },
                success: function (data) {
                    AllPageArr = data.split("~");
                    var imgStr = '';
                    AllPageBllIDArr = [];
                    for (var i = 0; i < AllPageArr.length; i++) {
                        var onePage = AllPageArr[i];
                        var onePageArr = onePage.split('^');
                        var oneBll = "";
                        if (onePageArr.length > 1) {
                            oneBll = onePageArr[1];
                        }
                        AllPageBllIDArr.push(oneBll);
                        AllPageArr[i] = onePageArr[0];
                    }
                    AllPageNum = AllPageArr.length;
                    for (var i = 0; i < AllPageArr.length; i++) {
                        if ((AllPageArr[i].toLowerCase().indexOf("../../") > -1) || (AllPageArr[i].toLowerCase().indexOf("ftp://") > -1) || (AllPageArr[i].toLowerCase().indexOf("http://") > -1) || (AllPageArr[i].toLowerCase().indexOf("https://") > -1)) {
                            if (i > 0) {
                                imgStr += '<div style="font-weight:bold;color:#ff5252;">第' + (i + 1) + '页</div><iframe src="' + DealPdfViewUrl(AllPageArr[i]) + '"  style="margin-bottom:10px;width:827px;height:1189px;"/>';
                            }
                            else {
                                imgStr += '<iframe src="' + DealPdfViewUrl(AllPageArr[i]) + '"  style="margin-bottom:10px;width:827px;height:1189px;"/>';
                            }
                        }
                        else {
                            if (i > 0) {
                                imgStr += '<div style="font-weight:bold;color:#ff5252;">第' + (i + 1) + '页</div><img src="' + "data:image/png;base64," + AllPageArr[i] + '" alt="报告" style="margin-bottom:10px;"/>';
                            }
                            else {
                                imgStr += '<img src="' + "data:image/png;base64," + AllPageArr[i] + '" alt="报告" style="margin-bottom:10px;"/>';
                            }
                        }
                    }
                    $("#spPage").html("当前报告共(" + AllPageArr.length + ")页");
                    $("#divMian").html(imgStr);
                }
            });

            $("#txtCurPage").focus();

        });

        //打印
        function InvokePrint(type) {
            //0:打印所有报告 1:循环打印每一份报告
            var printFlag = "0";
            var rowids = PrintDR;
            //打印用户 
            var userCode = UserDR;
            //PrintOut:打印  PrintPreview打印预览  PDF#地址  【0用户选  -1桌面  具体地址】
            //1:报告处理打印 2:自助打印 3:医生打印
            var paramList = "LIS";
            if (type == null || type == "1") {
                //PrintOut:打印  PrintPreview打印预览
                var printType = "PrintOut";
            }
            else if (type == "2") {
                //PrintOut:打印  PrintPreview打印预览
                var printType = "PrintPreview";
            }
            else if (type == "3") {
                //打印预览
                printType = "PDF#0";
            }
            var Param = printFlag + "@" + WebServicAddress + "@" + rowids + "@" + userCode + "@" + printType + "@" + paramList + "@" + PrintClassName + "@GetData";
            JRTBasePrint(Param);
        }
    </script>
</head>
<body>
    <div id="divOper" style="margin: auto auto; width: 850px; background-color: #F5F5F5; text-align: center; padding-top: 5px; padding-bottom: 5px;">
        <a id="btnPrint" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-print',plain:true" style="margin-left: 10px;">打印</a>&nbsp&nbsp
        <a id="btnPDF" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-export',plain:true">导出PDF</a>&nbsp&nbsp
        <a id="btnPrePage" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-arrow-left',plain:true" title="PgLeft">上一页</a>&nbsp&nbsp
        <a id="btnNextPage" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-arrow-right',plain:true" title="PgRight">下一页</a>&nbsp&nbsp
        <input id="txtCurPage" type="text" style="width: 40px;" class="easyui-validatebox" value="1" />&nbsp&nbsp
        <span id="spPage" style="font-weight: bold; color: #ff793e; font-size: 14px;"></span>
        <span style="font-weight: bold; color: #AAAAAA; font-size: 14px; float: right; margin-right: 10px;">JRT在线浏览</span>
    </div>
    <div style="margin: auto auto; width: 850px;text-align:center;">
        <div class="btnMini">
            <a id="btnPrintMini" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-print',plain:true" title="打印"></a>
            <span class="jrtsp6>"></span>
            <a id="btnPDFMini" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-export',plain:true" title="导出PDF"></a>
            <span class="jrtsp6>"></span>
            <a id="btnPrePageMini" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-arrow-left',plain:true" title="上一页[PgLeft]"></a>
            <span class="jrtsp6>"></span>
            <a id="btnNextPageMini" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-arrow-right',plain:true" title="下一页[PgRight]"></a>
            <span class="jrtsp6>"></span>
        </div>
        <div id="divMian" style="margin: auto auto; width: 850px; background-color: #DDDDDD; text-align: center; padding-top: 10px;"></div>
    </div>

</body>
</html>


其他页面使用
在这里插入图片描述

这样就可以实现在线预览功能,客户端不用环境也能进行打印预览,包括一些业务场景可以让用户看到图的效果,提高体验,也方便外部系统看一些报告和各种单据,只需要推送URL即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1317849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google Scholar引用没有GB/T格式

想选择GB/T 参考文献格式&#xff0c;却无法找到这种引用方式。 1、GB/T 7714&#xff1a;&#xff08;我国&#xff09;国家标准的代号由大写汉语拼音字母构成。 强制性国家标准的代号为"GB"&#xff0c;推荐性国家标准的代号为"GB/T"。 国家标准的编号由…

C语言学习NO.-操作符(二)二进制相关的操作符,原码、反码、补码是什么,左移右移操作符、按位与,按位或,按位异或,按位取反

一、操作符的分类 操作符的分类 算术操作符&#xff1a; 、- 、* 、/ 、%移位操作符: << >>位操作符: & | ^ 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^单⽬操作符&#xff1a; &#xff01;、、–、&、*、、-、~ 、siz…

基于YOLOv8深度学习的西红柿成熟度检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …

2023年【陕西省安全员C证】新版试题及陕西省安全员C证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题参考答案及陕西省安全员C证考试试题解析是安全生产模拟考试一点通题库老师及陕西省安全员C证操作证已考过的学员汇总&#xff0c;相对有效帮助陕西省安全员C证复审模拟考试学员顺利通过考试。…

C++初阶-stack的使用与模拟实现

stack的使用与模拟实现 一、stack的介绍和使用二、stack的使用三、stack的模拟实现3.1 成员变量3.2 成员函数3.2.1 push入栈3.2.2 pop出栈3.2.3 返回栈顶数据3.2.4 返回栈的大小3.2.5 判断栈是否为空 四、完整代码4.1 stack.h4.2 test.h 一、stack的介绍和使用 1.stack是一种容…

03_Web开发基础之综合应用

web开发基础之综合使用 学习目标和内容 1、能够描述jQuery的作用 2、能够使用jQuery的选择器获取元素 3、能够使用jQuery对HTML标签元素注册事件 4、能够使用jQuery对HTML元素的属性进行操作 5、能够描述Bootstrap的作用 6、能够使用Bootstrap创建简单网页 7、能够描述AJAX的作…

Java----新手一步一步安装 Java 语言开发环境

查看原文 文章目录 一、基于 Windows 10 系统 安装配置 JDK8二、基于 CentOS7 系统安装配置 JDK8 一、基于 Windows 10 系统 安装配置 JDK8 &#xff08;1&#xff09;打开 JDK下载网站&#xff0c;根据系统配置选择版本&#xff0c;这里选择windows 64位的版本&#xff0c;点…

人工智能-A*算法-最优路径搜索实验

上次学会了《A*算法-八数码问题》&#xff0c;初步了解了A*算法的原理&#xff0c;本次再用A*算法完成一个最优路径搜索实验。 一、实验内容 1. 设计自己的启发式函数。 2. 在网格地图中&#xff0c;设计部分障碍物。 3. 实现A*算法&#xff0c;搜索一条最优路径。 二、A*算法实…

DDA 算法

CAD 算法是计算机辅助设计的算法&#xff0c;几何算法是解决几何问题的算法 CAD 算法是指在计算机辅助设计软件中使用的算法&#xff0c;用于实现各种设计和绘图功能&#xff0c;CAD 广泛应用于建筑、机械、电子等领域&#xff0c;可以大大提高设计效率和精度 绘图算法是 CAD…

关于多重背包的笔记

多重背包可以看作01背包的拓展&#xff0c; 01背包是选或者不选。多重背包是选0个一直到选s个。 for (int i 1; i < n; i) {for (int j m; j > w[i]; --j){f[j] max(f[j], f[j - 1*w[i]] 1*v[i], f[j - 2*w[i]] 2*v[i],...f[j - s*w[i]] s*v[i]);} } 由上述伪代码…

FL Studio2024mac电脑版本下载步骤教程

FL Studio2024是款专业的音频录制编辑软件&#xff0c;可以针对作曲者的要求编辑出不同音律的节奏&#xff0c;例如鼓、镲、锣、钢琴、笛、大提琴等等任何乐器的节奏律动。FL Studio目前在中国已经受到广大制作人喜爱&#xff0c;使用它制作的音乐作品也已经数不胜数&#xff0…

Leetcode的AC指南 —— 链表:24. 两两交换链表中的节点

摘要&#xff1a; Leetcode的AC指南 —— 链表&#xff1a;24. 两两交换链表中的节点。题目介绍&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能…

计算机服务器中了360后缀勒索病毒怎么处理,勒索病毒解密数据恢复

网络技术的不断发展与应用&#xff0c;越来越多的企业开始走向数字化办公模式&#xff0c;极大地方便了企业的生产运营。但随之而来的网络安全威胁也在不断增加&#xff0c;在本月&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了360后…

文心一言 VS 讯飞星火 VS chatgpt (158)-- 算法导论12.3 5题

五、用go语言&#xff0c;假设为每个结点换一种设计&#xff0c;属性 x.p 指向 x 的双亲&#xff0c;属性 x.succ 指向 x 的后继。试给出使用这种表示法的二叉搜索树 T 上 SEARCH、INSERT 和DELETE 操作的伪代码。这些伪代码应在 O(h) 时间内执行完&#xff0c;其中 h 为树 T 的…

函数式编程 h函数

<template><div><table border><tr><th>id</th><th>name</th><th>age</th><th>操作</th></tr><tr v-for"item in list" :key"item.id"><td>{{ item.id }}<…

wsl kafka的简单应用

安装并配置单机版kafka所需环境 wsl2 环境可用性较高&#xff0c;如下介绍在该环境中安装单机版本kafka的详细过程。 启动命令行工具启动wsl&#xff1a;wsl --user root --cd ~&#xff0c;&#xff08;以root用户启动&#xff0c;进入wsl后当前路径为~“用户主目录”&#…

3.3【窗口】窗口的几何形状(二,窗口属性)

写在前面 应用程序使用窗口来显示内容。一些属性决定了窗口及其内容的大小和位置。其他属性决定了窗口内容的外观和解释。 了解窗口属性引用的两个坐标系非常重要。如果你知道你正在使用的坐标系,那么为你的窗口属性选择设置值会容易得多,并且会更有意义。 一,显示相关属…

SpringBoot零基础入门到项目实战——学习路线规划与目录结构

文章目录 第一部分&#xff1a;Spring Boot基础第二部分&#xff1a;Web开发与RESTful API第三部分&#xff1a;数据访问与持久化第四部分&#xff1a;安全与身份验证第五部分&#xff1a;高级主题第六部分&#xff1a;测试总结与扩展实战项目练习 &#x1f389;欢迎来到Spring…

Storage engine MyISAM is disabled (Table creation is disallowed)

如何解决Storage engine MyISAM is disabled (Table creation is disallowed&#xff09; 在开发中&#xff0c;需要把mysql5.7的数据库&#xff0c;迁移到mysql8.0 的阿里云数据库上 把Mysql5.7的数据导入到8.0时&#xff0c;出现 解决方法 1、使用指令找出那些表是MyISAM引擎…