程序设计:排版、检验报告的上下标解决几种办法
【啰嗦两句】
本文重点在于提供几个针对排版文档、各种检验报告系统等程序设计时,遇到的上下标录入、绘制展示等问题的应对办法,但是准确地说,并没有非常优秀的方案。
【上下标难题】
一般的行业或许对上下标并没有严格要求,多数只需在固定的页面中展示,所以遇到的难题都不算大。但是在检验检测行业,用计算机软件表示上下标就显得困难重重,牵涉到模板软件、计算机语言、软件平台、中英文字库等。
例如纺织、食品、水质检验检测行业,在其检验、报告录入生成等过程,有大量的化学分子式、金属非金属离子根的表示方式,如下图1所示:
(图1 水质检验结果报告局部示例)
上面的氧化钙CaCO₃,←看,我不是打字打出来了吗?很简单是不是?No!你看到的只是Web版面并且常规数字3,还有比较多特殊符号。
再比如辐射检验报告如图2:
(图2 辐射检验报告局部示例)
【常规解决方案优缺点】
方案1. 用Microsoft Office Word或WPS模板
这种方案应该是最普遍的解决方案,先制作一份标准格式的Wrod模板,在模板中需要填检验结果的地方用“域”表示(也就是变量,供检验管理系统调用),或者留空给录入人员按需人工录入结果,有分子式的地方模板早早就录好了。如图3所示:
(图3 Word制作的模板局部示例)
图3模板解释:
黑色字区域是提前固定好的,因为检验项目是按对应国标或客户约定的内容提前准备好了,检验过程也只是把结果录入,所以这部分包含了复杂的分子式上下标即可。
绿色字区域原本应该是空白,这里演示了人工录入的效果,或者最终呈现给客户时的效果。
蓝色字是变量域,既可以是Word自带的域,也可以是自行约定的标准格式变量。这种变量一般用于实验室信息管理系统(LIMS)、检验管理系统等,已经有个平台支撑加载并填充检验结果。还可以进一步从Word转成PDF格式文件。所以这种用法非常普遍。
优点:1、一旦做好模板,剩下的结果数据只需要按格式填充即可,在检验管理系统里面调用,非常轻松。2、Word自带的公式编辑器,非常友好,设计出的上下标非常好看:
![]()
很多人可能到这里就已经“十分满意”。
缺点:可以说是非常大的缺点,这些上下标仅仅能在Word模板中存在,无法直接转换成Web页面前端的标准文本上下标样式,也无法直接保存到数据库。本质原因在于,Word内部用类似<SubScript>、<SuperScript>这样的标签表示上下标。例如下标CaCO₃,存储的不仅仅是数字3,而是CaCO<SubScript>3</SubScript>。这就带来一个大的难题:极大增加录入人员的录入复杂度,例如图2里面的“-SEdb”极其复杂。如果直接存储到数据库里面,并直接展示在客户端(浏览器、APP)就会把<SubScript>也显示出来。而Word导出PDF之所以能保持上下标,也是对这些特殊格式做了转换。当然,聪明的检验管理系统在呈现到页面时也可以专门转换。因为HTML本身也有<SubScript>标签。
更大的问题来了,检验行业往往有大量监管要求,需要把检验结果上传给国家监管平台系统(例如食品相关的需要上传国家抽检大平台),各个省市也会有自己的数据上传要求,这些上下标一定少不了。
好在,一般检验报告的录入部分,不需要录入上下标。上传给监管平台可能也没那么严格。
方案2. 采用自定义的格式化标准
比如用<sub></sub>富文本格式表示下标,并且在检验管理系统框架内对这些标签进行支持,在录入的地方用“Ctrl+字符”录入字符,格式标签是隐藏的,呈现的效果也很好。这种方案类似方案1。
优点:在检验管理平台内呈现效果好,并且平台框架内都兼容。
缺点:和方案1一样,不同平台就是没法兼容。
方案3. 采用UTF8的上下标字符
本文录入的CaCO₃当中的3就是用了下标字符3,这些字符很多,0-9的上下标字符都有,非常适合较简单的上下标录入。常用的数字上下标字符有如下:
上标:⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ º ˙
下标:₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ₐ ₑ ₒ ₓ ₔ ₕ ₖ ₗ ₘ ₙ ₚ ₛ ₜ
为节约篇幅,更多上下标可以网上搜。
优点:兼容性好,几乎采用UTF-8编码的系统、文档软件都按标准呈现上下标,录入人员复制粘贴搞定,无需考虑数据的下一步去向。这些数据也可以被用于查找、统计、分析,跟操作普通0-9一样。如果只用到数字上下标的系统,推荐用这个方案。
缺点:1、字符不够多,比如d、b这2个就没有下标,虽然有上标。2、就算符号都能找到,本质上这些字符都是东拼西凑,罗马字、拉丁字等等,风格各异,呈现出来的上下标位置并不协调,样式也极其丑,版面美观要求高的系统根本没法接受。
方案4. 自行设计字库
既然方案1、2输入格式那么复杂,方案3缺字符,那为什么不自己造一个?还真有办法造!在Windows系统有个叫“专用字符编辑器”的自带软件,就具备造字功能。在系统搜索“专用字符编辑器”,就能看到。界面如图5所示:
(图4 Windows系统自带的专用字符编辑器)
专用字符编辑器就像画图标一样画出字符,保存之后系统会自动转换成矢量曲线路径。感兴趣的童鞋可以玩一玩。这个字库文件是EUDC.EUF和EUDC.TTE。
而造出来的字符可以用复制粘贴的方式,也可以采用“区位输入法”(老家伙了)打字,每个字有自己的编码。
优点:可以制作任意效果的上下标文字,并且可以在Windows环境中任何显示、打印的地方输出相同效果的文字(前提把字库弄出来安装到不同电脑上)。
缺点:这个缺点也非常多,1、自己造的字,在自己电脑没任何问题,但是还有导出并安装到别人电脑就麻烦,体验不好还权限一堆问题。2、想用输入法输入,虽然可以,但是又要翻出已经埋了多年的“区位输入法”,已知XP系统默认装了,WIN7以上已经默认不装。3、搜狗输入法似乎也走过这个路线,会占用默认的EUDC字库文件,导致自己造的字失效。4、很糟糕的是Windows10及以上版本,似乎也喜欢覆盖这个EUDC文件,每次更新都会一定概率让自造的字库失效(老外没人用过?),5、最失望的是,这个字库是GBK编码,2个字节表示一个字,中文XP及以前的系统是GBK编码,之后的系统比较灵活用上了UTF-8编码,如果用自己造的字,往往没法转UTF-8,而现在的检验管理系统所用的数据库、框架、底层几乎都不会用GBK了,因为GBK的字库容量有限,很多常见的中文都缺失,比如“啫”字,还有那么多特殊字符,跟不上时代了。6、每个符号按汉字大小占据固定尺寸,越简单的符号效果越不协调。
【总结】
以上4个方案,缺点列出来的往往比优点多,说明没有一个真正完美方案。或许未来会有编码方面的解决方案。
相关文章:
程序设计:排版、检验报告的上下标解决几种办法
【啰嗦两句】 本文重点在于提供几个针对排版文档、各种检验报告系统等程序设计时,遇到的上下标录入、绘制展示等问题的应对办法,但是准确地说,并没有非常优秀的方案。 【上下标难题】 一般的行业或许对上下标并没有严格要求,多数…...
【2024年华为OD机试】 (C卷,100分)- 求字符串中所有整数的最小和(Java JS PythonC/C++)
一、问题描述 题目解析 题目描述 输入字符串 s,输出 s 中包含所有整数的最小和。 说明 字符串 s 只包含 a-z、A-Z、、-。合法的整数包括: 正整数:一个或多个 0-9 组成,如 0、2、3、002、102。负整数:负号 - 开头&…...
MBox20网关:数字化工厂的智能加速器
在当今这个日新月异的数字化时代,企业对于生产效率、数据管理和网络安全的追求已经达到了前所未有的高度。特别是在制造业领域,随着“工业4.0”和“智能制造”概念的深入实践,数字化工厂已成为产业升级的必然趋势。在这场深刻的变革中&#x…...
NodeJS | 搭建本地/公网服务器 live-server 的使用与安装
目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一:未知命令 问题二:拒绝脚本 公网配置…...
用C++实现一个基于模板的观察者设计模式
观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …...
LabVIEW开发X光图像的边缘检测
在医疗影像处理中,X光图像的分析对于骨折、肿瘤等病变的检测非常重要。X光图像中包含许多关键信息,然而,由于图像噪声的干扰,直接从图像中提取有用的特征(如骨折的边缘)变得非常困难。边缘检测作为图像处理…...
GitEE
版本控制 cvs svn git 等等 一、团队开发过程中的问题 1、备份【Release】 2、代码还原 3、协同修改 4、多版本文件管理 5、追溯问题代码的编写人和编写时间 6、权限控制 二、版本控制 版本控制就是维护工程蓝图标准做法,能追踪工程蓝图从诞生一直到定案的过程…...
Ubuntu配置python环境
前言 Ubuntu22.04自带python3,仅需要安装pip3即可。 也可以安装Anaconda使用虚拟环境。 本地Python环境 查看python3是否已安装: python3 -V若已安装python3,继续安装pip3: sudo apt install python3-pip查看pip版本…...
数据库的DML
1.insert 数据库于表创建成功后,需要向数据库的表中插入数据。在MySQL中可以使用insert语句向数据库已有的表中插入一行或者多行元组数据 基本语法: insert 语句有两种语法形式,分别是insert…values语句和insert…set语句 insert into&l…...
什么是SSL及SSL的工作流程
什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...
RabbitMQ---消息确认和持久化
(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…...
4 AXI USER IP
前言 使用AXI Interface封装IP,并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo,这个demo是非常必要的,因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互,在PL端可以通过中断的形式来告知PS端一些事情&…...
windows下安装并使用node.js
一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0(LTS长期支持版本)版本的.msi安装包程序 官网下载: 中文网下载: 二、安…...
【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的
SSMS 20在连接Sql server 2022数据库时有如下报错: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…...
VSCode 的部署
一、VSCode部署 (1)、简介 vsCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性&…...
淘宝、京东联盟数字ID转加密ID接口
该接口可以将主站的数字ID转换为加密ID 例如:123456789 转换为 xxxxxxxxxx-xxxxxxxxx PHP示例 // 接口地址:https://www.haodanku.com/openapi/api_detail?id103 $app_secret 你的appSecret, //替换成自己的 $x [app_id > 你的appid, //替换成…...
【物联网】keil仿真环境设置 keilV5可以适用ARM7
文章目录 一、ARM指令模拟器环境搭建1. keil软件2. Legacy Support 二、Keil仿真环境设置1. 创建一个项目2. 编译器介绍(1)arm-none-eabi-gcc(2)arm-none-linux-gnueabi-gcc(3)arm-eabi-gcc(4)grmcc(5)aarch64-linux-gnu-gcc 3. 安装编译器(1)设置调试 一、ARM指令模拟器环境搭…...
Oracle 可观测最佳实践
简介 Oracle 数据库是一种广泛使用的商业关系数据库管理系统(RDBMS),由甲骨文公司(Oracle Corporation)开发。它支持 SQL 语言,能够存储和管理大量数据,并提供高级数据管理功能,如数…...
上传自己的镜像到docker hub详细教程
上传自己的镜像到docker hub详细教程 本博客通B站视频一致: 上传自己的镜像到docker hub详细教程 1. 登录自己的hub.docker.com的账号 docker hub仓库 2. 点击Repositories,跳转到创建仓库页面 3. 点击Create a repository 创建repository,…...
Python猜数小游戏
Python 实现的《猜数游戏》 介绍 本文将展示如何使用 Python 编写一个简单的《猜数游戏》。这个游戏将会生成一个1到10之间的随机数,用户有最多三次机会来猜测正确的数字。如果用户猜对了,游戏将结束并显示恭喜信息;如果没有猜对࿰…...
HackMyVM-Klim靶机的测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 CVE-2008-0166 四、结论 一、测试环境 1、系统环境 渗透机:kali2021.1(192.168.159.127) 靶 机:debian(192.168.159.27) 注意事…...
MySQL中大量数据优化方案
文章目录 1 大量数据优化1.1 引言1.2 评估表数据体量1.2.1 表容量1.2.2 磁盘空间1.2.3 实例容量 1.3 出现问题的原因1.4 解决问题1.4.1 数据表分区1.4.1.1 简介1.4.1.2 分区限制和执行计划1.4.1.3 分区表的索引1.4.1.4 为什么分区键必须是主键的一部分1.4.1.5 操作分区1.4.1.5.…...
春秋杯-WEB
SSTI 可以看到主页那里有个登录测试之后为ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到题目名字为file_copy, 当输入路径时会返回目标文件的大小, 通…...
C++多态的认识与理解
多态的定义 多态其实就是同一操作在不同的对象上可以有不同的实现方式。 多态的类型 多态分为静态多态和动态多态两种,而静态多态其实我们之前就了解过,今天主要是讲解一下动态多态。 静态多态(编译时多态):静态多态其实就是在…...
improve-gantt-elastic(vue2中甘特图实现与引入)
1.前言 项目开发中需要使用甘特图展示项目实施进度,左侧为表格计划,右侧为图表进度展示。wl-gantt-mater,dhtmlx尝试使用过可拓展性受到限制。gantt-elastic相对简单,可操作性强,基础版本免费。 甘特图(Gan…...
模型 笛卡尔思维
系列文章分享模型,了解更多👉 模型_思维模型目录。怀疑一切,分析整合,验证真理。 1 笛卡尔思维模型的应用 1.1 笛卡尔思维模型在城市规划中的应用 背景:某城市计划进行新的城市规划,以提高城市的可持续性…...
LabVIEW桥接传感器数据采集与校准程序
该程序设计用于采集来自桥接传感器的数据,执行必要的设置(如桥接配置、信号采集参数、时间与触发设置),并进行适当的标定和偏移校正,最终通过图表呈现采集到的数据信息。程序包括多个模块,用于配置通道、触…...
无人机技术架构剖析!
一、飞机平台系统 飞机平台系统是无人机飞行的主体平台,主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。 机体结构:无人机的机身是其核心结构,承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、…...
飞牛 使用docker部署Watchtower 自动更新 Docker 容器
Watchtower是一款开源的Docker容器管理工具,其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能: 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…...
【Flink系列】4. Flink运行时架构
4. Flink运行时架构 4.1 系统架构 Flink运行时架构——Standalone会话模式为例 1)作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被…...
【机器学习实战入门】使用Pandas和OpenCV进行颜色检测
Python 颜色检测项目 今天的项目将非常有趣和令人兴奋。我们将与颜色打交道,并在项目过程中学习许多概念。颜色检测对于识别物体来说是必要的,它也被用作各种图像编辑和绘图应用的工具。 什么是颜色检测? 颜色检测是检测任何颜色名称的过程…...
C++ K2 (2)
提示:文章 文章目录 前言一、背景标准库基础知识堆栈 总结 前言 前期疑问: 本文目标: 一、背景 接上文 标准库 1、(单选)【STL】在以下容器中间插入一个元素,时间复杂度为O(1)的是(A&#x…...
【React】静态组件动态组件
目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件: 组件第一次渲染完毕后,无法基于内部的某些操作让组件更新「无法实现自更新」;但是,如果调用它的父组…...
Spring Web MVC综合案例
承接上篇文章——Spring Web MVC探秘,在了解Spring Web MVC背后的工作机制之后,我们接下来通过三个实战项目,来进一步巩固一下前面的知识。 一、计算器 效果展示:访问路径:http://127.0.0.1:8080/calc.html 前端代码&a…...
OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数,它基于已知的相机参数和相对位置&am…...
SDL2基本的绘制流程与步骤
SDL2(Simple DirectMedia Layer 2)是一个跨平台的多媒体库,它为游戏开发和图形应用提供了一个简单的接口,允许程序直接访问音频、键盘、鼠标、硬件加速的渲染等功能。在 SDL2 中,屏幕绘制的流程通常涉及到窗口的创建、渲染目标的设置、图像的绘制、事件的处理等几个步骤。…...
计算机网络 (42)远程终端协议TELNET
前言 Telnet(Telecommunication Network Protocol)是一种网络协议,属于TCP/IP协议族,主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议,它允许用户通过终端仿真器连接到远程主机,并在远程…...
重拾Python学习,先从把python删除开始。。。
自己折腾就是不行啊,屡战屡败,最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder,跟matlab最像,也最容易入手。 从VScode上搞python,最后安装到appdata上,安装插…...
51c大模型~合集106
我自己的原文哦~ https://blog.51cto.com/whaosoft/13115290 #GPT-5、 Opus 3.5为何迟迟不发 新猜想:已诞生,被蒸馏成小模型来卖 「从现在开始,基础模型可能在后台运行,让其他模型能够完成它们自己无法完成的壮举——就像一个老…...
node安装教程及环境配置
1.下载安装包 下载的网址:Node.js — Download Node.js 根据自己电脑系统及位数选择,电脑是Windows系统、64位、想下载稳定版的.msi(LTS为长期稳定版)这里选择windows64位.msi格式安装包。 .msi和.zip格式区别: .msi…...
Temp123
MapDB:的持久化机制,以及源码分析和摘取 1、spark streaming--struct streaming 基于 时间间隔 攒批 2、kafka-connect-hdfs 控制 flush.size 和 interval.ms控制 攒批 - 完全自研 攒批机制 - 使用 embeded 版 https://lxblog.com/qianwen/share?shar…...
YOLO系列代码
Test-Time Augmentation TTA (Test Time Augmentation)是指在test过程中进行数据增强。其思想非常简单,就是在评测阶段,给每个输入进行多种数据增广变换,将一个输入变成多个输入,然后再merge起来一起输出,形成一种ens…...
2025.1.16——一、NewsCenter
题目来源:攻防世界 NewsCenter 目录 一、题目 二、sqlmap解题——bp抓包存为txt文件进行爆破 step 1:search框内随便输入,进行抓包 step 2:抓包后,存到txt文件,进行sqlmap step 3:-r获取文…...
Java中的继承
引入继承 Java中使用类对实体进行描述,类经过实例化之后的产物对象,就可以用来表示现实中的实体,描述的事物错综复杂,事物之间可能会存在一些关联,因此我们就需要将他们共性抽取,面向对象的思想中提出了继…...
vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权
文章目录 简介一、先看效果1.1 授权定位前,先弹出隐私协议弹框1.2 上述弹框点击同意,得到如下弹框1.3 点击三个点,然后点设置 1.4 在1.2步骤下,无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…...
在Playwright中使用PO模式
1.新建项目 安装库 npm init -y npm install -D playwright npm install -D playwright/test npm install typescript ts-node types/node npx playwright install 项目目录 2.编写代码 package.json {"name": "pom_playwright","version": …...
三台 Centos7.9 中 Docker 部署 Redis 哨兵模式
三台 Centos7.9 中 Docker 部署 Redis 哨兵模式 1. 环境规划2. 配置 Docker Compose3. 配置 Redis 密码和持久化4. 配置哨兵5. 启动服务6. 验证 Redis 哨兵模式7. 注意事项 1. 环境规划 三台服务器的角色分配如下: IP Address容器端口角色192.168.15.128redis-mas…...
JSON数据格式的序列化和反序列化jackson针对首字母小学的字段返回序列化后第2个大写字母也变成小写的问题处理
SpringBoot类属性”第二个字母大写“反序列化问题。key第二个字母大写会被转成小写 , 这个为 jackson 的bug。 后台 : String pName; public String getPName() { return pName; } 前台 : { pname : xxx } 解决方案: 使用JsonProperty("pName")…...
Android wifi列表中去自身的热点
Android wifi列表中去自身的热点 一、前言 Android wifi列表中能搜索到自身的热点wifi? 正常手机上都不会出现这个问题;可能是系统底层已经做了过滤处理。 现实开发中Android设备的Wifi能搜索到自身热点也可能会存在。 比如基于两个单独的wifi双模组硬…...
Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧
作者:来自 Elastic Gustavo Llermaly 将 Jira 连接到 Elasticsearch 后,我们现在将回顾最佳实践以升级此部署。 在本系列的第一部分中,我们配置了 Jira 连接器并将对象索引到 Elasticsearch 中。在第二部分中,我们将回顾一些最佳实…...