找到
8
篇与
开源工具
相关的结果
-
分享一个纯前端无隐私泄露风险的在线word文档docx图片移除体积压缩网站 这是一款免费的在线Word文档(DOCX)图片清理工具,可以一键移除Word文档中的所有图片,同时保留文字内容,帮助你快速获得纯文本版本的文档。所有处理过程在浏览器本地完成,无需上传到服务器,保护您的文档隐私和安全。 一般查重网站对文件大小是有限制的,通常在15MB~30MB,甚至有一些网站要求在10MB以下。很多牛逼PLUS的毕业生选手,毕业论文也许质量不高,但是大是真的大,四五万字的文档能写七八十MB甚至一百七八十MB,要是不打开看看,还以为是要去评院士的材料哩。究其原因,还是word里插入的图片太高质量了。就像现在的手机,拍一张就是十几MB。在北航的图书馆系统里明确提到了20MB的限制。 于是本站就结合地表代码能力最强的ai——claude,写了个网页,用于上传之后自动删除word文档里的图片,这样可以显著减少文档的体积。 DOCX图片移除工具 | 开源小站出品 常见问题解答 (1)为什么需要移除Word文档中的图片? 移除Word文档中的图片有多种用途:减小文件大小、提取纯文本内容、准备用于文本分析、消除敏感图片信息、优化文档用于某些不支持图片的系统等。(2)这个工具会上传我的文档到服务器吗? 不会。本工具完全在您的浏览器中运行,所有的文档处理都在本地完成,不会将您的文档上传到任何服务器,这保证了您的文档隐私和安全。(3)处理后的文档会保留原始格式吗? 是的,本工具只会移除文档中的图片,会保留文字内容、段落格式、表格、列表等其他格式元素。(4)有文件大小限制吗? 由于处理在浏览器中进行,大文件可能会受到浏览器性能的限制。一般来说,100MB以内的文档可以顺利处理。如果遇到问题,可以尝试将大文档分割成小文档处理。(5)支持哪些Word文档格式? 目前仅支持.docx格式(Office 2007及以上版本)。不支持旧版.doc格式文件。 -
Python代码混淆实战指南:保护源码的常见方法与开源工具推荐 本文将深入解析实用的Python代码混淆技术,并推荐5个GitHub明星开源项目,助您构建多层级源码保护体系。本文详解Python代码保护的6大混淆技术,包含名称混淆、字符串加密、控制流混淆等实现代码,推荐5个GitHub热门开源混淆工具,助力开发者保护核心算法与商业逻辑。 Python代码为何需要保护? Python作为解释型语言,源码以明文形式分发存在三大风险: 核心算法被竞争对手直接复制 敏感API密钥和配置信息泄露 商业逻辑被逆向工程破解 代码混淆通过以下方式提升安全防护: 降低代码可读性(名称混淆) 隐藏关键数据(字符串加密) 干扰逻辑分析(控制流混淆) 增加逆向工程成本(多层混淆) 6大核心技术详解 2.1 名称混淆实战 手动重命名(基础版) # 原始代码 def calculate_price(quantity, unit_price): return quantity * unit_price # 混淆后 def a(b, c): return b * cAST自动重命名(进阶版) 使用Python标准库ast实现自动化变量替换: # 名称混淆核心代码 class RenameTransformer(ast.NodeTransformer): def __init__(self): self.name_map = {} def generate_name(self): return ''.join(random.choices(string.ascii_letters, k=8)) def visit_FunctionDef(self, node): new_name = self.generate_name() self.name_map[node.name] = new_name node.name = new_name return node2.2 字符串加密方案 Base64动态解码 # 原始字符串 secret = "API_KEY_123" # 混淆后 secret = __import__("base64").b64decode("QVBJX0tFWV8xMjM=").decode()XOR异或加密(增强安全性) def xor_encrypt(text, key): return bytes([b ^ key for b in text.encode()]) encrypted = xor_encrypt("TopSecret", 0x55) # 解密时使用相同密钥异或2.3 控制流混淆工具 推荐使用BlankOBF插入无效逻辑分支: pip install blankobf blankobf -i input.py -o output.py混淆效果: def original_func(): while True: if 1 == 1: # 永真条件 # 真实逻辑 breakGitHub热门开源工具推荐 工具名称核心技术安装命令使用示例White-ObfuscateAST级名称/字符串混淆pip install white-obfuscatewhite-obfuscate src.py -o dest.pyPyArmor商业级代码加密pip install pyarmorpyarmor obfuscate script.pyKramer多层控制流混淆pip install kramerkramer --input src.py --output dest.pyHyperion单文件混淆打包pip install hyperionhyperion obfuscate src.py -o dest.pyOxyry Python Obfuscator在线混淆服务访问官网网页端直接操作四、综合防护最佳实践 4.1 多工具组合方案 # 第一步:基础混淆 pyminifier --obfuscate src.py > step1.py # 第二步:字符串加密 python string_obfuscator.py step1.py > step2.py # 第三步:控制流混淆 blankobf -i step2.py -o final.py4.2 效果验证 原始代码: def process_data(data): api_key = "AKIAEXAMPLE" return encrypt(data, api_key)混淆后: def a(b): c = __import__("base64").b64decode("QUtJQUVYQU1QTEU=").decode() while True: if 1: return d(b,c) break五、安全建议与注意事项 多层防护原则:至少组合使用名称混淆+字符串加密 性能平衡:控制流混淆可能使性能下降10%-30% 持续更新:定期更新混淆策略应对新逆向工具 法律合规:遵循GPL等开源协议要求 动态防护:结合Cython编译、代码签名等方案 -
Qt Designer独立安装包Windows版下载指南 | 官方原版一键安装教程 本文为开发者提供Qt Designer官方独立安装包的Windows版直链下载资源,解决通过PyQt/PySide附带安装的繁琐流程。该exe安装包仅30MB,支持自定义安装路径,无需配置开发环境即可获得完整UI设计功能。包含详细的安装步骤、界面预览,帮助开发者快速获取轻量级Qt界面设计工具。 在网上找了很多,发现大家使用Qt Designer一般都是安装PyQt或者PySide时顺便安装的,然后通过命令行弹出来。实际上,Qt Designer有独立的安装包,而且不大,可以直接安装,这里我就分享一下。 下载地址 Qt Designer Setup.zip - 蓝奏云下载 exe文件非常小,只有三十几MB。 exe文件图片 下载后按照正常的软件下一步下一步安装即可,可以将其安装在D盘。安装后可以在菜单列表中看到: 菜单列表图片 界面预览 打开后就是下面这个界面。和使用pip安装的pyqt tools是一样的。本质上他就是一个UI设计界面工具。 界面预览图片 -
破除玩客云刷机超时难题!Armbian固件直刷包与Amlogic USB Burning工具版本完美搭配指南 本文针对玩客云刷Armbian系统时频繁出现的97%超时报错问题,深度解析固件校验机制导致卡顿的技术原理,提供适配的Armbian线刷包(桌面版/最小化版)和经过超时补丁优化的Amlogic USB Burning Tool v2.2.0工具。内含上海交大云盘高速下载资源、DLL文件替换指南及B站视频教程,助您彻底解决大文件校验超时痛点,完成从系统烧录到HDMI桌面配置的全流程操作。开源开发者必备的ARM设备刷机实战手册。 刷机超时问题 今天,小栈收到了宋哥邮寄过来的玩客云,里面一开始就是安装了系统的,但是宋哥忘了账号和密码,于是需要重新刷机: 玩客云硬件图片 小栈试了很多次,发现刷Armbian都会出现超时的问题。因为固件烧录后设备会计算sha1校验值,所以有时候大一点的固件就有可能校验超过150秒,尤其是在烧录完root或system分区,由于这部分占用空间很大,所以很容易校验超时而卡97%报错。 卡97%报错图片 Armbian的刷机包 Armbian的刷机包可以直接去Github上下载,有一点需要注意,要后缀带burn的才是线刷包。 hzyitc/armbian-onecloud - Github下载 Armbian的刷机包 - Github图片 这里小栈也分享了目前自己在用的安装包,用的是交大云盘分享的: 桌面版:Armbian-unofficial_25.05.0-trunk_Onecloud_bookworm_current_6.12.17_xfce_desktop.burn.img.xz 提取码: 9f85 最小版:Armbian-unofficial_25.05.0-trunk_Onecloud_bookworm_current_6.12.17_minimal.burn.img.xz 提取码: njh7 Amlogic USB Burning Tool不超时版本 下载地址:Amlogic USB Burning Tool v2.2.0 (含超时补丁).zip 提取码: ml9c 安装步骤:先安装exe文件,例如安装在D:\Program Files (x86)\Amlogic\USB_Burning_Tool目录下,然后将UsbRomDrv.dll放到这个文件夹下面。 Amlogic软件安装图片 刷机教程 刷机教程可以看B站视频,已经亲测有效: 唯一的区别就是导入的直刷包不同,其他流程完全一模一样,刷机完成后需要简单的配置,例如输入账号、密码、选择语言、地区等。 小栈用的是desktop版本,也就是桌面版,连接HDMI显示器之后,桌面如下: desktop版本桌面图片 -
纯静态前端图片压缩工具ImgUltraCompress:Vue+Three.js打造,近90%超高压缩率,支持本地化隐私安全处理(附在线演示+源码) 开源小站重磅推荐基于Vue 2.6+Three.js的纯静态前端图片压缩解决方案ImgUltraCompress。该工具采用浏览器本地处理技术,实现JPG/PNG/WebP格式86.7%压缩率突破,内置自适应算法平衡画质与体积,支持响应式跨设备操作和Web Worker多线程优化。项目集成Element UI组件库与自研压缩引擎,通过3D可视化交互界面提供0-100%滑杆精准控制,已部署可即用的在线演示系统并开放完整源码下载。特别包含隐私安全处理机制、批量压缩功能和黄金比例预设,满足开发者网站优化与论文复现双重需求。 下载地址 ImgUltraCompress_HTML.zip - 蓝奏云网盘下载 下载地址图片 本站部署效果 开源小站已经完成了对这个工具的部署,有需要的朋友可以免费使用: 在线图片压缩工具 - 大幅度高质量免费优化JPG/PNG/WebP图片大小 | 开源小站 网页部署图片 核心功能亮点 在保证画质的前提下减小图片体积,显著提升网页加载速度,节省存储空间与带宽成本。 采用自适应压缩算法(如lrz.bundle.js),在压缩率与清晰度间取得平衡 压缩的程度可以使用滑动条控制,0-100%自由滑动条控制压缩强度(默认推荐60%黄金比例) 浏览器本地处理技术,文件不上传服务器,可以确保隐私安全,放心使用即可。 完美兼容PC/手机/Pad设备,响应式设计自动适配屏幕 拖拽上传+点击选择双模式,3秒完成压缩流程,支持批量处理 Tips:本站提供的压缩包已经对资源进行了本地化处理! 技术架构 前端框架:Vue 2.6 + Element UI组件库 压缩引擎:lrz.bundle.js+自研优化算法 视觉效果:Three.js实现背景3D线条动效 性能优化:Web Worker多线程处理避免界面卡顿 压缩效果实验 小栈使用了两张截图来做实验,两张图片都是小栈的截图,其中png图片为745KB,jpg图片为590KB。 做实验的图片 把两个图片上传之后: 完成压缩下载即可图片 使用默认的压缩率压缩之后大小如上,关于效果个人觉得还是很不错的,对于网页图片来说完全够用。 都按99kb计算的话,可以简单计算一下压缩率: 对于PNG图片:(745 - 99)/ 745 = 86.7% 对于JPG图片:(590 - 99)/ 590 = 83% -
(可API调用)无需联网即可使用基于深度学习识别的OCR工具Umi-OCR,内置高效率的离线OCR引擎 本文深入解析了Umi-OCR这一基于深度学习的离线OCR开源工具,重点突出其无需联网、支持API调用、兼容多平台的核心优势。工具内置Paddle/Rapid双引擎,提供截图OCR、批量文档处理、二维码生成解析等实用功能,并通过详细的Python代码示例演示了PDF整本转TXT的自动化流程。文章涵盖从软件下载安装、命令行操作到HTTP接口调用的完整教程,并针对常见硬件兼容性问题(如奔腾/赛扬CPU支持)、系统报错(OpenGL配置、DLL缺失等)提供专业解决方案,为开发者提供开箱即用的高效OCR技术方案。 特别注意:Paddle版性能好,但不兼容奔腾、赛扬、凌动CPU。Rapid兼容绝大部分硬件。下面我以Paddle版为例,进行一个简单的使用效果测试。 下载安装包 蓝奏云:https://hiroi-sora.lanzoul.com/s/umi-ocr GitHub:https://github.com/hiroi-sora/Umi-OCR/releases/latest 下载软件的代码图片 解压软件 双击exe之后就会让你选择一个解压目录,可以新建一个文件夹来存储解压后的。 解压软件图片 解压之后如图: 解压之后如图图片 主要功能 截图OCR: 截图OCR图片 批量OCR: 批量OCR图片 批量文档: 批量文档图片 二维码: 二维码图片 命令行API调用 如图,必须允许HTTP服务才能使用命令行(默认开启)。主机选择 仅本地 就行了。 允许HTTP服务图片 一些基本操作: 弹出主窗口:umi-ocr --show 隐藏主窗口:umi-ocr --hide 关闭软件:umi-ocr --quit 鼠标截屏 umi-ocr --screenshot 范围截屏 umi-ocr --screenshot screen=0 rect=x,y,w,h 范围截屏控制参数: screen: 要截图的显示器编号(多个显示器时有效),从0开始。缺省为0。 rect: 截图范围矩形框,x坐标,y坐标,w宽度,h高度。缺省为全屏。 注意: 这两个参数的前面无需加--。 这两个参数至少要填一个,才能触发范围截图。没有任一参数时,执行鼠标截屏。 示例1:截取第1个显示器的全屏 umi-ocr --screenshot screen=0示例2:截取第2个显示器,从左上角 (50,100) 开始,大小为 300x200 的矩形区域 umi-ocr --screenshot screen=1 rect=50,100,300,200粘贴图片 umi-ocr --clipboard 指定路径 指定路径:umi-ocr --path "D:/xxx.png" 可传入文件夹的路径。将搜索文件夹中所有图片(包括嵌套子文件夹),并输出所有识别结果。 可传入多个路径。请用双引号""包裹单个路径,不同路径间用空格 隔开。 指定多个路径 示例:umi-ocr --path "D:/img1.png" "D:/img2.png" "D:/image/test" 提示: 多图识别时,耗时较长;一次命令结束前不要输入下一个命令。 对于截屏、粘贴、路径指令,OCR参数(如识别语言,是否复制到剪贴板、是否弹出主窗口)采用截图OCR标签页的设定。如果不希望命令行任务弹出主窗口,请在截图OCR标签页中关闭该选项。 二维码指令 识别二维码:umi-ocr --qrcode_read "D:/xxx.png" 与OCR指令一致,二维码识别的指令也支持传入多个图片&文件夹路径。 生成二维码:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg" 默认的图片宽高为最小适配长度。也可以在指令后方加上数字,手动指定图片宽高: 例,同时指定宽高为128像素:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg" 128 例,宽128,高256像素:umi-ocr --qrcode_create "文本内容" "D:/输出图片.jpeg" 128 256 命令行结果输出 复制到剪贴板 --clip 输出到文件(覆盖) --output "file.txt" 输出到文件(追加) --output_append "file.txt" 也可以使用箭头符号: "-->" 等价于 --output "-->>" 等价于 --output_append 例: umi-ocr --screenshot --clip umi-ocr --screenshot --output test.txt umi-ocr --screenshot "-->" test.txtHTTP接口手册 HTTP接口手册 - Github 具体有点太多了,可以自行查看官方文档。 Python将整本pdf转为txt的示例 这里我写一个Python的代码,用来把pdf提取成txt。这是基于HTTP做的。 import os import json import time import requests class UmiOCRProcessor: """Umi-OCR HTTP接口处理器""" def __init__(self, base_url="http://127.0.0.1:1224", download_dir="./download"): """ 初始化OCR处理器 :param base_url: API基础地址 :param download_dir: 文件下载保存目录 """ self.base_url = base_url self.download_dir = download_dir self.headers = {"Content-Type": "application/json"} self.task_id = None # 当前任务ID def upload_file(self, file_path, options=None): """ 上传文件并启动OCR任务 :param file_path: 待识别文件路径 :param options: 任务参数(字典格式) :return: 任务ID """ print("=======================================") print("===== 1. 上传文件,获取任务ID =====") url = f"{self.base_url}/api/doc/upload" print("== 请求地址:", url) # 默认参数设置 if options is None: options = {"doc.extractionMode": "mixed"} options_json = json.dumps(options) # 第一次尝试上传 with open(file_path, "rb") as file: response = requests.post(url, files={"file": file}, data={"json": options_json}) # 处理上传失败的情况(非ASCII文件名问题) res_data = self._check_response(response) if res_data["code"] == 101: print("[警告] 检测到文件上传失败:错误码 == 101") file_name = os.path.basename(file_path) file_prefix, file_suffix = os.path.splitext(file_name) temp_name = f"temp{file_suffix}" print(f"尝试使用临时文件名 {temp_name} 替代原文件名 {file_name}") # 使用临时文件名重试上传 with open(file_path, "rb") as file: response = requests.post( url, files={"file": (temp_name, file)}, data={"json": options_json}, ) res_data = self._check_response(response) self.task_id = res_data["data"] print("任务ID:", self.task_id) return self.task_id def poll_task_status(self, interval=1): """ 轮询任务状态直到完成 :param interval: 轮询间隔(秒) """ if not self.task_id: raise ValueError("没有有效的任务ID") print("===================================================") print("===== 2. 轮询任务状态直到OCR任务完成 =====") url = f"{self.base_url}/api/doc/result" print("== 请求地址:", url) request_data = { "id": self.task_id, "is_data": True, "format": "text", "is_unread": True, } while True: time.sleep(interval) response = requests.post(url, data=json.dumps(request_data), headers=self.headers) res_data = self._check_response(response) # 打印处理进度 processed = res_data["processed_count"] total = res_data["pages_count"] print(f" 处理进度: {processed}/{total}") # 打印实时数据 if res_data["data"]: print(f"{res_data['data']}\n========================") # 检查任务是否完成 if res_data["is_done"]: if res_data["state"] != "success": raise RuntimeError(f"任务执行失败: {res_data['message']}") print("OCR任务处理完成") break def generate_download_link(self, file_types=None, ignore_blank=False): """ 生成结果文件下载链接 :param file_types: 需要生成的文件类型列表 :param ignore_blank: 是否忽略空白页 :return: (下载链接, 文件名) """ if not self.task_id: raise ValueError("没有有效的任务ID") print("======================================================") print("===== 3. 生成目标文件,获取下载链接 =====") url = f"{self.base_url}/api/doc/download" print("== 请求地址:", url) # 默认文件类型列表 if file_types is None: file_types = [ "txt", "txtPlain", "jsonl", "csv", "pdfLayered", "pdfOneLayer", ] request_data = { "id": self.task_id, "file_types": file_types, "ingore_blank": ignore_blank, # 注意:历史版本可能需要保留拼写错误 } response = requests.post(url, data=json.dumps(request_data), headers=self.headers) res_data = self._check_response(response) return res_data["data"], res_data["name"] def download_file(self, url, filename): """ 下载结果文件 :param url: 下载链接 :param filename: 保存文件名 """ print("===================================") print("===== 4. 下载目标文件 =====") print("== 请求地址:", url) # 创建下载目录 if not os.path.exists(self.download_dir): os.makedirs(self.download_dir) save_path = os.path.join(self.download_dir, filename) # 执行下载并显示进度 with requests.get(url, stream=True) as response: response.raise_for_status() total_size = int(response.headers.get("content-length", 0)) downloaded = 0 log_interval = 10_485_760 # 每10MB打印进度 with open(save_path, "wb") as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) downloaded += len(chunk) if downloaded >= log_interval: log_interval += 10_485_760 progress = (downloaded / total_size) * 100 print( f" 下载进度: {downloaded//1_048_576}MB | " f"总进度: {progress:.2f}%" ) print(f"文件下载完成,保存路径: {save_path}") def cleanup_task(self): """清理服务器上的任务数据""" if not self.task_id: raise ValueError("没有有效的任务ID") print("============================") print("===== 5. 清理任务 =====") url = f"{self.base_url}/api/doc/clear/{self.task_id}" print("== 请求地址:", url) response = requests.get(url) res_data = self._check_response(response) print("任务数据清理完成") @staticmethod def _check_response(response): """统一检查响应结果""" response.raise_for_status() res_data = json.loads(response.text) if res_data["code"] != 100: raise RuntimeError(f"API请求失败: {res_data}") return res_data # 使用示例 if __name__ == "__main__": # 初始化处理器 processor = UmiOCRProcessor(download_dir="./下载结果") try: # 步骤1:上传文件 task_id = processor.upload_file("XXXXX.pdf") # 步骤2:轮询任务状态 processor.poll_task_status() # 步骤3:生成下载链接 download_url, filename = processor.generate_download_link() # 步骤4:下载文件 processor.download_file(download_url, filename) # 步骤5:清理任务 processor.cleanup_task() print("\n======================\n处理流程完成") except Exception as e: print(f"\n发生错误: {str(e)}") 最终的识别结果: 识别结果图片 错误排查手册 详细内容请见: https://github.com/hiroi-sora/Umi-OCR/issues/447 ================================ 弹窗报错 Cannot find Py_Main() in …… 解决方法1: 下载安装VC运行库,重启系统,测试Umi-OCR能否正常运行。 https://aka.ms/vs/17/release/vc_redist.x64.exe 解决方法2: 使用这个bat文件代替 Umi-OCR.exe 来启动软件。双击它即可。 UmiOCR-data/RUN_GUI.bat 注意1:通过bat启动时,部分功能受限,将无法使用命令行指令和创建快捷方式(开始菜单、开机自启等)。如有需要,请参考后面【手动放置快捷方式】条目。 注意2:不要移动bat的位置。 ================================ 手动放置快捷方式 如果因为某些原因,软件自身无法创建快捷方式;请手动创建并将快捷方式放置到如下目录: 开始菜单目录: C:\ProgramData\Microsoft\Windows\Start Menu 开机自启目录: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup ================================ 弹窗报错 Failed to create OpenGL context …… 下载运行库: https://github.com/hiroi-sora/Umi-OCR_v2/files/13167436/opengl32sw_64.zip 解压,将其中的dll文件放置于: UmiOCR-data/site-packages/PySide2/ ================================ 弹窗报错 Umi-OCR.exe 已停止工作 此问题常见于:软件已经在win10使用过,然后原封不动复制到win7上,导致配置冲突。 删除下述配置文件即可: UmiOCR-data/.pre_settings ================================ 应用程序无法正常启动(0xc0000142) 或者:[Error] OCR init fail.l. Argd: {'enable_mkldnn': True... 此问题大概率是:CPU不支持AVX指令集。 请换用 PaddleOCR 之外的插件或软件版本。比如: 方法1:更换使用 Umi-OCR_Rapid 。 方法2:额外导入 RapleOCR插件 。 ================================ 弹出黑框控制台窗口,【错误】Umi-OCR Error 找不到指定的程序 OSError 可能的发生条件: win7早期版本,缺少系统补丁(尤其是KB2533623) 其他原因,导致 Python 3.8 无法在该系统中运行。 修复方法: 推荐方法:使用系统检查更新(控制面板 → 系统和安全 → Windows Update → 检查更新),安装所有更新。 另一种方法:单独下载安装 KB2533623补丁 ,重启系统即可。不过,微软官方渠道已经关闭了该补丁的下载链接,您可能只能从第三方网站下载补丁,请务必注意安全。 ================================ 保存PDF时 “已停止工作” 文档识别,能识别出文字,能保存为txt等文件。但如果选择保存为双层可搜索PDF,则最后导出文件时弹窗报错: Umi-OCR.exe 已停止工作 查看问题详细信息: 问题事件名称:BEX64 故障模块名称:ucrtbase.DLL 故障模块版本:10.0.10240.16390 异常偏移:00000000064399 异常代码:c0000417可能的发生条件:win7早期版本,缺少系统补丁(尤其是 KB4534310、KB3042058) 修复方法: 注意!由于 KB4534310 依赖前置补丁,因此 不能 单独下载安装该补丁。 您必须使用系统检查更新(控制面板 → 系统和安全 → Windows Update → 检查更新),安装所有缺失的更新,直到下面这个项目安装完毕: 2020-01 适用于基于 x64 的系统的 Windows 7 月度安全质量汇总 (KB4534310) ================================ 丢失api-ms-win-crt-runtime-l1-1-0.dll 打开软件时,弹出错误弹窗: Umi-OCR.exe-系统错误 无法启动此程序,因为计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll 。尝试重新安装该程序以解决此问题。 可能的发生条件:缺少VC运行库。 修复方法:安装VC运行库: https://aka.ms/vs/17/release/vc_redist.x64.exe