jbase打印完善

news2024/11/17 9:46:35

上一篇实现了粗略的打印元素绘制协议,并且写了打印示例和导出示例,趁着空隙时间完善一下打印。

首先元素构造函数默认初始化每个字段值

package LIS.Core.Dto;

/**
 * 打印约定元素
 */
public class PrintElement {
    /**
     * 元素类型
     */
    public String PrintType;

    /**
     * X
     */
    public String PrintX;

    /**
     * Y
     */
    public String PrintY;

    /**
     * 字体
     */
    public String PrintFont;

    /**
     * 字体大小
     */
    public String PrintFontSize;

    /**
     * 字体样式
     */
    public String PrintFontStyle;

    /**
     * 长度
     */
    public String PrintLength;

    /**
     * 宽度
     */
    public String PrintWidth;

    /**
     * 高度
     */
    public String PrintHeight;

    /**
     * 文本
     */
    public String PrintText;

    /**
     * 数据字段
     */
    public String DataField;

    /**
     * 特殊标志
     */
    public String PrintFlag;

    /**
     * 停靠
     */
    public String PrintAlignment;

    /**
     * 图片
     */
    public String PrintImageFile;

    /**
     * 颜色
     */
    public String PrintColor;

    /**
     * 旋转角度
     */
    public String Angle;

    /**
     * 垂直显示
     */
    public String IsVShow;

    /**
     * 业务ID
     */
    public String BllID;

    /**
     * 构造
     */
    public PrintElement()
    {
        PrintType="";
        PrintX="10";
        PrintY="10";
        PrintFont="宋体";
        PrintFontSize="10";
        PrintFontStyle="";
        PrintLength="10";
        PrintWidth="20";
        PrintHeight="20";
        PrintText="";
        DataField="";
        PrintFlag="";
        PrintAlignment="";
        PrintImageFile="";
        PrintColor="";
        Angle="0";
        IsVShow="";
        BllID="";
    }
}

加强绘制元素的类型约束和检查,把换页,打印机控制等都实现

package LIS.Core.Util;

import LIS.Core.Dto.PrintElement;

import java.awt.*;
import java.util.List;

/**
 * 打印元素绘制协议实现,先提供各种元素的初级api,参数类型限制比较松散,后面再包限制严格的api,避免参数错误导致的画图问题
 */
public class PrintDrawProtocol {

    /**
     * 打印纸张方向 Landscape:旋转 Portrait:正常
     */
    public enum PrintLayout {
        Landscape, Portrait
    }

    /**
     * 打印文本的停靠方向
     */
    public enum PrintAlignment {
        Left, Center, Right
    }

    /**
     * 控制打印机,在第一个输出的元素就会按输出控制打印机
     *
     * @param paper       A4或A5等
     * @param paperLayout Landscape或Portrait
     * @param printerName 打印机名称,tiaoma等
     * @param paperSource 送纸来源,1,2等
     * @param paperWidth  纸张宽度
     * @param paperHeight 纸张高度
     * @return
     */
    public static PrintElement ControlPrinter(String paper, PrintLayout paperLayout, String printerName, String paperSource, int paperWidth, int paperHeight) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PRINTER";
        ret.DataField = paper;
        ret.PrintAlignment = paperLayout.toString();
        ret.PrintFlag = printerName;
        ret.PrintFont = paperSource;
        ret.PrintWidth = String.valueOf(paperWidth);
        ret.PrintHeight = String.valueOf(paperHeight);
        return ret;
    }

    /**
     * 控制打印机,在第一个输出的元素就会按输出控制打印机,只会按名称选择打印机,不会控制纸张等
     *
     * @param printerName 打印机名称,tiaoma等
     * @return
     */
    public static PrintElement ControlPrinterName(String printerName) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PRINTERONLY";
        ret.PrintFlag = printerName;
        return ret;
    }

    /**
     * 输出此元素通知打印换页
     *
     * @return
     */
    public static PrintElement ChangePage() {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PAGE";
        return ret;
    }

    /**
     * 让用户选择打印机并且按唯一键缓存
     *
     * @param uniqueFlag
     * @return
     */
    public static PrintElement SelectPrinter(String uniqueFlag) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "SELECTPRINTER";
        ret.PrintFlag = uniqueFlag;
        return ret;
    }

    /**
     * 绘图输出第一个元素为ImageInfo类型的元素讲按照以上属性创建位图,其他后续元素的画笔操作都在该位图上执行。
     *
     * @param width  图的宽度
     * @param height 图的高度
     * @param color  颜色
     * @return
     */
    public static PrintElement CreateImage(int width, int height, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "ImageInfo";
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintColor = color;
        return ret;
    }

    /**
     * 画标签
     *
     * @param x         x坐标(*必填)
     * @param y         y坐标(*必填)
     * @param drawStr   要绘制的文本(*必填)
     * @param font      字体
     * @param fontSize  字体大小
     * @param fontStyle 字体样式
     * @param alignment 字体靠齐方向  Center:居中  Right:靠右  Justified或者空:靠左
     * @param color     颜色,html颜色 red  #ffffff这种
     * @param angle     旋转角度,角度数字
     * @return
     */
    public static PrintElement DrawLabel(int x, int y, String drawStr, String font, Integer fontSize, String fontStyle, PrintAlignment alignment, String color, String angle) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = drawStr;
        ret.PrintFont = font;
        if (fontSize == null) {
            fontSize = 9;
        }
        ret.PrintFontSize = String.valueOf(fontSize);
        ret.PrintFontStyle = fontStyle;
        if(alignment!=null)
        {
            ret.PrintAlignment = alignment.toString();
        }

        ret.Angle = String.valueOf(angle);
        ret.PrintType = "Label";
        return ret;
    }


    /**
     * 画线
     *
     * @param x         起点x坐标(*必填)
     * @param y         起点y坐标(*必填)
     * @param x1        终点x坐标(*必填)
     * @param y1        终点y坐标(*必填)
     * @param size      线宽度 默认1
     * @param dashStyle 线样式,0、1、2、3、4
     * @param color     颜色 html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawLine(int x, int y, int x1, int y1, Integer size, String dashStyle, String color) {
        if (size == null) {
            size = 1;
        }
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintWidth = String.valueOf(x1);
        ret.PrintHeight = String.valueOf(y1);
        ret.PrintLength = String.valueOf(size);
        ret.PrintFlag = dashStyle;
        ret.PrintColor = color;
        ret.PrintType = "ILineN";
        return ret;
    }

    /**
     * 画条码
     *
     * @param x          x坐标(*必填)
     * @param y          y坐标(*必填)
     * @param barStr     要绘制的文本(*必填)
     * @param isDrawText 是否绘制条码文本 false:不画条码文本  true:画条码文本
     * @param width      宽度 小于10认为使用条码本身宽度不做缩放
     * @param height     高度
     * @param barType    条码码制,空默认,可为A、B、C
     * @param font       字体
     * @param fontSize   字体大小
     * @param fontStyle  字体样式
     * @param alignment  字体靠齐方向  Center:居中  Right:靠右  Justified或者空:靠左
     * @param color      颜色,html颜色 red  #ffffff这种
     * @param angle      旋转角度,角度数字
     */

    public static PrintElement DrawBarCode(int x, int y, String barStr, boolean isDrawText, int width, int height, String barType, String font, Integer fontSize, String fontStyle, PrintAlignment alignment, String color, String angle) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = barStr;
        ret.PrintFont = font;
        if (fontSize == null) {
            fontSize = 9;
        }
        ret.PrintFontSize = String.valueOf(fontSize);
        ret.PrintFontStyle = fontStyle;
        if(alignment!=null) {
            ret.PrintAlignment = alignment.toString();
        }
        ret.Angle = String.valueOf(angle);
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Data";
        String Flag = "";
        if (isDrawText == false) {
            Flag = "N";
        }
        String PrintFlag = "BarCode" + Flag + barType;
        ret.PrintFlag = PrintFlag;
        return ret;
    }

    /**
     * 画二维吗
     *
     * @param x      x坐标(*必填)
     * @param y      y坐标(*必填)
     * @param barStr 要绘制的文本(*必填)
     * @param width  宽度
     * @param height 高度
     * @return
     */
    public static PrintElement DrawQRCode(int x, int y, String barStr, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = barStr;
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Data";
        String PrintFlag = "QRCode";
        ret.PrintFlag = PrintFlag;
        return ret;

    }


    /**
     * 画点
     *
     * @param x      x坐标(*必填)
     * @param y      y坐标(*必填)
     * @param width  宽度
     * @param height 高度
     * @param type   点类型o  []  <>或者空串
     * @param color  颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoint(int x, int y, int width, int height, String type, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Point";
        ret.PrintFlag = type;
        ret.PrintColor = color;
        return ret;
    }

    /**
     * 画多边形
     *
     * @param pointList 点集合描述串多个点用^分割,一个点的xy用@分割  如:10@10^29@20^100@15(*必填)
     * @param color     颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoly(List<Point> pointList, String color) {
        String polyStr = "";
        if (pointList != null || pointList.size() > 0) {
            for (Point p : pointList) {
                if (polyStr.isEmpty()) {
                    polyStr = p.x + "@" + p.y;
                } else {
                    polyStr += "^" + p.x + "@" + p.y;
                }
            }
        }
        PrintElement ret = new PrintElement();
        ret.PrintText = polyStr;
        ret.PrintType = "Poly";
        ret.PrintColor = color;
        return ret;

    }


    /**
     * 画多边形
     *
     * @param points 点集合描述串多个点用^分割,一个点的xy用@分割  如:10@10^29@20^100@15(*必填)
     * @param color  颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoly(String points, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintText = points;
        ret.PrintType = "Poly";
        ret.PrintColor = color;
        return ret;

    }

    /**
     * 画图片
     *
     * @param x         x坐标(*必填)
     * @param y         y坐标(*必填)
     * @param width     宽度(*必填)
     * @param height    高度(*必填)
     * @param dataField :数据,签名图片就传base64位串,否则传ftp全路径地址(*必填)
     * @param isSign    是否是签名图片 默认不是
     * @return
     */
    public static PrintElement DrawGraph(int x, int y, int width, int height, String dataField, boolean isSign) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.DataField = dataField;
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Graph";
        if (isSign == true) {
            ret.PrintFlag = "D";
        }
        return ret;
    }


    /**
     * 画复选框
     *
     * @param x       x坐标(*必填)
     * @param y       y坐标(*必填)
     * @param checked 是否选择  0:不选,1:选中
     * @param width   宽度
     * @param height  高度
     * @return
     */
    public static PrintElement DrawCheckBox(int x, int y, boolean checked, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        if (checked == true) {
            ret.PrintText = "是";
        }
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "CheckBox";
        return ret;
    }

    /**
     * 画单选框
     *
     * @param x       x坐标(*必填)
     * @param y       y坐标(*必填)
     * @param checked 是否选择  0:不选,1:选中
     * @param width   宽度
     * @param height  高度
     * @return
     */

    public static PrintElement DrawRadio(int x, int y, boolean checked, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        if (checked == true) {
            ret.PrintText = "是";
        }
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Radio";
        return ret;
    }

    /**
     * PDF文件的ftp或http全路径。用英文逗号分隔两个A5PDF路径打印会自动合并为一个A4。一个A5路径后跟个英文逗号,会把PDF转A4纸打印
     *
     * @param httpOrFtpPath pdf文件的下载路径
     * @return
     */
    public static PrintElement DrawFile(String httpOrFtpPath) {
        PrintElement ret = new PrintElement();
        ret.DataField = httpOrFtpPath;
        ret.PrintType = "FILE";
        return ret;
    }

}

测试

import LIS.Core.Dto.OutParam;
import LIS.Core.Dto.PrintElement;
import LIS.Core.Util.PrintDrawProtocol;
import appcode.BaseHttpHandlerNoSession;
import appcode.Helper;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 输出符合打印元素绘制协议的打印元素数据,来供打印执行层打印
 */
public class PrintBarCodeTest extends BaseHttpHandlerNoSession {
    /**
     * 按传入的RowID输出符合打印元素绘制协议的数据来实现打印控制
     * @param RowID 业务主键
     * @param P1
     * @param P2
     * @param P3
     * @param P4
     * @param P5
     * @param P6
     * @param P7
     * @param P8
     * @param P9
     * @param P10
     * @param P11
     * @param P12
     * @param P13
     * @param Session
     * @param Output
     * @return
     */
    public String GetData(String RowID, String P1, String P2, String P3, String P4, String P5, String P6, String P7, String P8, String P9, String P10, String P11, String P12, String P13, OutParam Session, OutParam Output) {
        List<PrintElement> retList=new ArrayList<>();
        //画一个文本
        retList.add(PrintDrawProtocol.DrawLabel(10,10,"zhanglianzhu","宋体",12,"", null,"","0"));
        //画一个条码
        retList.add(PrintDrawProtocol.DrawBarCode(10,50,"0947809",true,5,30,"","宋体",12,"",null,"","0"));
        //换一根横线
        retList.add(PrintDrawProtocol.DrawLine(10,70,70,70,1,"",""));
        //换一根竖线
        retList.add(PrintDrawProtocol.DrawLine(50,10,50,470,1,"",""));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawQRCode(10,90,"jbase",90,90));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,210,"jbase打印支持","宋体",12,"",null,"","0"));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,230,"20231118 22:49","宋体",12,"",null,"","0"));
        //画一个点
        retList.add(PrintDrawProtocol.DrawPoint(10,270,10,10,"o",""));
        retList.add(PrintDrawProtocol.DrawPoint(100,270,10,10,"[]",""));
        retList.add(PrintDrawProtocol.DrawPoint(200,270,10,10,"<>",""));
        //画多边形
        List<Point> pointList=new ArrayList<>();
        Point p1=new Point();
        p1.x=10;
        p1.y=300;
        pointList.add(p1);
        Point p2=new Point();
        p2.x=100;
        p2.y=310;
        pointList.add(p2);
        Point p3=new Point();
        p3.x=50;
        p3.y=360;
        pointList.add(p3);
        retList.add(PrintDrawProtocol.DrawPoly(pointList,""));
        //画复选框
        retList.add(PrintDrawProtocol.DrawCheckBox(10,400,true,30,30));
        //画单选框
        retList.add(PrintDrawProtocol.DrawRadio(10,400,true,30,30));

        //换页
        retList.add(PrintDrawProtocol.ChangePage());

        //画一个文本
        retList.add(PrintDrawProtocol.DrawLabel(10,10,"这是打印的第二页","宋体",12,"", null,"","0"));
        //画一个条码
        retList.add(PrintDrawProtocol.DrawBarCode(10,50,"0947809",true,5,30,"","宋体",12,"",null,"","0"));
        //换一根横线
        retList.add(PrintDrawProtocol.DrawLine(10,70,70,70,1,"",""));
        //换一根竖线
        retList.add(PrintDrawProtocol.DrawLine(50,10,50,470,1,"",""));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawQRCode(10,90,"jbase",90,90));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,210,"jbase打印支持","宋体",12,"",null,"","0"));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,230,"20231119","宋体",12,"",null,"","0"));
        //先包一个打印元素绘制协议数据生成的工具类来解决元素约束问题,工具类实现了调用工具类得到标签,条码,文本等
        return Helper.Object2Json(retList);
    }
}

在这里插入图片描述

打印基础就更稳定了,业务只需要按要求控制输出数据就行了,可以结合设计器的保存数据和业务数据组装

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

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

相关文章

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…

2023.11.18 每日一题(AI自生成应用)【C++】【Python】【Java】【Go】 动态时间序列分析

目录 一、编程挑战&#xff1a;动态时间序列分析 实际应用&#xff1a; 实现提示&#xff1a; 二、实现 1. C 2. Python 3. JAVA 4. Go 一、编程挑战&#xff1a;动态时间序列分析 问题描述&#xff1a; 假设你是一名软件工程师&#xff0c;需要开发一个应用来分析和预…

内容运营策略:个性化推荐

一、推荐系统流程 典型的推荐系统包括3个部分&#xff0c;即召回层&#xff08; Recall )、排序层&#xff08; Rank )和重排层&#xff08; ReRank )。 1&#xff0e;召回层&#xff08; Recall ) 召回层主要是从全量库中首先获取用户可能感兴趣的候选集&#xff0c;是推荐系…

「Tech初见」对epoll的理解

一、Motivation 通常&#xff0c;操作系统会为每个进程划分一个时间片的&#xff0c;在这个时间片内进程可以合法占有 cpu 进行一些计算任务。并当时间片结束后自动退回至就绪状态待命&#xff0c;等待下一次的调度 但是&#xff0c;有一种情况会使进程提前&#xff08;时间片…

cad提示由于找不到mfc140u.dll,无法继续执行代码怎么修复

在Windows操作系统中&#xff0c;mfc140u.dll是一个重要的文件&#xff0c;很多软件运行都需要它&#xff0c;它属于Microsoft Visual C库的一部分。许多基于C的开发项目都依赖于这个文件&#xff0c;如果在使用过程中出现丢失现象&#xff0c;可能导致相关软件或游戏无法正常运…

洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 python解析

P1064 [NOIP2006 提高组] 金明的预算方案 时间&#xff1a;2023.11.19 题目地址&#xff1a;[NOIP2006 提高组] 金明的预算方案 题目分析 动态规划的0-1背包&#xff0c;采用动态数组。如果不了解的话&#xff0c;可以先看看这个背包DP。 这个是0-1背包的标准状态转移方程 f…

SOME/IP 协议介绍(六)接口设计的兼容性规则

接口设计的兼容性规则&#xff08;信息性&#xff09; 对于所有序列化格式而言&#xff0c;向较新的服务接口的迁移有一定的限制。使用一组兼容性规则&#xff0c;SOME / IP允许服务接口的演进。可以以非破坏性的方式进行以下添加和增强&#xff1a; • 向服务中添加新方法 …

【C++】【Opencv】cv::Canny()边缘检测函数详解和示例

Canny边缘检测是一种流行的边缘检测算法&#xff0c;由John F. Canny在1986年开发。它是一种多阶段过程&#xff0c;包括噪声滤波、计算图像强度的梯度、非最大值抑制以及双阈值检测。本文通过函数原型解读和示例对cv::Canny()函数进行详解&#xff0c;以帮助大家理解和使用。 …

Blowfish在线加密解密调试校验工具

具体请前往&#xff1a;在线Blowfish加密解密工具

米家竞品分析

一、项目描述 1. 竞品分析描述 分析市场直接竞品和潜在竞品&#xff0c;优化产品核心结构和页面布局&#xff0c;确立产品核心功能定位。了解目标用户核心需求&#xff0c;挖掘用户魅力型需求&#xff0c;以及市场现状为产品迭代做准备。 2. 产品测试环境 二、市场 1. 行业…

Django 简单入门(一)

一、配置虚拟环境 1、安装虚拟环境库vitualenv 与vitualenvwrapper-win 2、创建虚拟环境 myenv 3、在此环境中安装django 二、创建一个Django项目 1、使用命令来创建&#xff1a;django-admin startproject Django2023 工程名为Django2023 2、 使用PyCharm专业版创建Django项…

【预处理详解】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作用的宏参数 5. 宏替换的规则 6. 宏函数的对比 7. #和## 7.1 #运算符 7.2 ## 运算符 8. 命名约定 …

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0809介绍通过模数芯片ADC0809把电压模…

kubenetes-Service和EndpointSlice

一、Service 二、Endpoint Endpoint记录一个 Service 对应一组 Pod 的访问地址&#xff0c;一个 Service 只有一个 Endpoint资源。Endpoint资源会去监测Pod 集合&#xff0c;只要服务中的某个 Pod 发生变更&#xff0c;Endpoint 就会进行同步更新。 三、Service、Endpoint和 P…

青少年CTF-WEB-2048

题目环境&#xff1a; 针对这种游戏通关类题目&#xff0c;常见的有两种情况 一、有参数改参数的数值达到题目规定的分数即可拿到flag 二、没有参数那么flag就是被编码了&#xff0c;找编码即可 这道题并没有说题目通关即可获得flag&#xff0c;也并没有发现参数 所以这里猜测f…

域名的理解

域名的分类 见下图 这里引用的阿里云对域名的定义&#xff0c;个人理解是有两种叫法&#xff0c;一种是传统的叫法&#xff0c;也就是将sample.org.cn划分成了三级域名&#xff0c;还有一种叫法是基于用户注册的域名来说的&#xff0c;将用户注册的整体域名称作一级域名&…

1、cvpr2024

CVPR2024官网&#xff1a; Overleaf模板&#xff1a; 更改作者&#xff08;去掉CVPR标识&#xff09; % \usepackage{cvpr} % To produce the CAMERA-READY version \usepackage[review]{cvpr} % To produce the REVIEW version改成 \usepackage{cvpr} …

高效背单词——单词APP安利

大英赛&#xff0c;CET四六级&#xff0c;以及考研英语&#xff0c;都在不远的未来再度来临&#xff0c;年复一年的考试不曾停息&#xff0c;想要取得好成绩&#xff0c;需要我们的重视并赋予相应的努力。对于应试英语&#xff0c;词汇量是不可忽略的硬性要求。相比于传统默写&…

翻译软件Mate Translate mac中文版介绍说明

Mate Translate mac可以帮你翻译超过100种语言的单词和短语&#xff0c;使用文本到语音转换&#xff0c;并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版软件介绍 Mate Translate 可以在你的所有设备之间轻松同步&#x…

EDA实验-----4*4矩阵键盘与数码管显示测试

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理&#xff1b;掌握4*4矩阵键盘和数码管显示的编…