简单粗暴的翻译英文pdf
背景:看书的时候经常遇到英文pdf,没有合适的翻译软件可以快速翻译全书。这里提供一个解决方案。
Step 1
- 打开英文pdf
- CTRL+A全选文字
- CTRL+C复制
- 打开记事本
- CTRL+V复制
- 保存为data.txt
Step 2
写一个C++脚本
// ToolPdf2Html.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <cstring>
#include <vector>
#include <unordered_map>
#include <fstream>
#include <iostream>
#include <sstream>
#include <windows.h>//pdf->txt->html (edge translate)
static void ReadFileContentsByte(std::string filename, std::vector<char>& data)
{std::fstream fin;fin.open(filename, std::ios::in | std::ios::binary);if (!fin.is_open()){return;}//const int LENGTH = 1000;fin.seekg(0, std::ios::end);long int size = fin.tellg();fin.seekg(0, std::ios::beg);data.resize(size, 0);char temp;long i = 0;while ((temp = fin.get()) != EOF){//str.push_back((char)temp);if (i >= size) {std::cout << i << "/" << size << std::endl;exit(0);}data[i] = temp;i++;//std::cout << (byte)temp;}fin.close();
}static void ReadFileContentsLines(std::string filename, std::vector<std::string>& data)
{std::fstream fin;fin.open(filename, std::ios::in | std::ios::binary);if (!fin.is_open()){return;}std::string line;while (std::getline(fin, line)){data.push_back(line);}fin.close();
}static void WriteFileContentsByte(std::string filename, std::string& data)
{std::fstream fout;fout.open(filename, std::ios::out);if (!fout.is_open()){std::cout << "no open file " << filename << std::endl;return;}fout << data;fout.close();
}static std::string Number2Stri(int value)
{std::string str;std::stringstream ss;ss << value;ss >> str;return str;
}int main(int argc, char *argv[])
{std::cout << "Hello World!\n";std::string filepath = "data.txt";if (argc > 1) {filepath = argv[1];}std::cout << "filepath=" << filepath.c_str() << std::endl;std::vector<std::string> data;ReadFileContentsLines(filepath, data);std::cout << "data.size=" << data.size() << std::endl;//每100行分割成一个htmlstd::string htmlHead ="<!DOCTYPE html>\n""<html>\n""<head>\n""<meta charset = \"utf-8\">\n""<title>The C++ Programming Language</title>\n""</head>\n""<body>\n";std::string htmlEnd ="</body> </html>";std::string htmlPrevious ="<br/><br/><a href=\"a.hmtl\">上一个</a>";std::string htmlNext =" <a href=\"a.hmtl\">下一个</a>";int len = data.size();std::string output = htmlHead;WIN32_FIND_DATA findData;HANDLE hFind = FindFirstFile(L"output\\*", &findData);if (hFind == INVALID_HANDLE_VALUE) {std::cout << "文件夹不存在" << std::endl;if (CreateDirectory(L"output", NULL)) {std::cout << "文件夹创建成功" << std::endl;}else {std::cout << "文件夹创建失败,错误代码:" << GetLastError() << std::endl;}}else {FindClose(hFind);std::cout << "文件夹存在" << std::endl;}const int singleLen = 50;for (int i = 0; i < len; ++i) {//std::cout << i << ":" << data[i] << std::endl;if (i != 0 && i % singleLen == 0) { { //saveint index = i / singleLen;//test//if (index > 10) {// break;//}if (index == 1) {}else {output += "<br/><br/><a href=\"index" + Number2Stri((i - 1) / singleLen) + ".html\">Previous</a> ";}output += Number2Stri(i / singleLen);if ((index + 1) * singleLen >= len) {}else {output += " <a href=\"index" + Number2Stri(index + 1) + ".html\">Next</a>";}output += htmlEnd;std::string filep = "output/index" + Number2Stri(index) + ".html";std::cout << "write to " << filep.c_str() << std::endl;// std::cout << "output to " << output.c_str() << std::endl;WriteFileContentsByte(filep, output);output = htmlHead;}}output += data[i] + "<br/>";}std::cout << "finish." << std::endl;
}
- 脚本会读入data.txt
- 按行处理,每50行生成一个html
- 命令行运行脚本
ToolPdf2Html.exe data.txt
- 在output文件夹下生成一堆html
Step 3
用微软的Edge浏览器打开html,浏览器自动翻译英文

通过上一页和下一页翻页
相关文章:
简单粗暴的翻译英文pdf
背景:看书的时候经常遇到英文pdf,没有合适的翻译软件可以快速翻译全书。这里提供一个解决方案。 Step 1 打开英文pdfCTRLA全选文字CTRLC复制打开记事本CTRLV复制保存为data.txt Step 2 写一个C脚本 // ToolPdf2Html.cpp : 此文件包含 "main&quo…...
UDP和TCP协议比较,TOE技术
如今在某些方面TCP超越UDP的主要原因如下 在硬件层面的TOE(TCP Offload Engine)功能,将越来越多的TCP功能卸载到网卡上。它极大地提升了TCP的性能,使其在高吞吐量场景下的表现更为出色。近年TCP的拥塞控制算法实现了显著进步。这些新算法显著提高了TCP在…...
第十三节 huggingface的trainner解读与Demo
文章目录 前言一、trainer和TrainingArguments训练与预测完整Demo1、数据构建2、TrainingArguments构建3、Trainer初始化4、模型训练5、模型推理6、完整demo代码7、完整运行结果二、辅助函数1、yield返回内容2、迭代器中断恢复迭代demo3、yield from结构4、torch.Generator()的…...
GO: json 处理
需要引入"encoding/json"包 json解析到map jsonStr : "{\"a\":\"test\",\"b\":\"testb\"}" var dat map[string]string err : json.Unmarshal([]byte(jsonStr), &dat) if err nil {fmt.Println(dat) }结果…...
HarmonyOS开发案例:【生活健康app之实现打卡功能】(2)
实现打卡功能 首页会展示当前用户已经开启的任务列表,每条任务会显示对应的任务名称以及任务目标、当前任务完成情况。用户只可对当天任务进行打卡操作,用户可以根据需要对任务列表中相应的任务进行点击打卡。如果任务列表中的每个任务都在当天完成则为…...
Mockito框架,帮助创建模拟对象进行测试的利器
在现代软件开发中,单元测试作为确保代码质量和可靠性的重要环节,已逐渐成为开发流程中不可或缺的一部分。为了让单元测试更加灵活、独立,开发者们通常使用 Mocking(模拟)框架来替代真实对象,从而更好地模拟…...
Spring Boot的工作原理
文章目录 前言一、Spring Boot的核心原理二、Spring Boot的工作原理1.创建SpringApplication对象2.调用实例的run方法 总结 前言 在上一篇《初识SpringBoot并构建第一个SpringBoot项目》的学习后,我们对Spring Boot有了基本了解。现在,我们将通过学习Sp…...
单点登录和统一身份认证的区别
在工作过程中,总被问到单点登录和统一身份认证的问题。笔者打算尝试用更通俗的方式解释统一身份认证(Unified Identity Authentication)和单点登录(Single Sign-On,简称SSO)之间的区别。 1.定义࿱…...
革新机器人任务规划:TREE-PLANNER引领高效、准确的机器人动作生成新趋势
DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言 任务规划在机器人技术中扮演着至关重要的角色。它涉及到为机器人设计一系列中级动作(技能),使其能够完成复杂的高级任…...
【数据分析面试】42.用户流失预测模型搭建(资料数据分享)
题目 保持高的客户留存率可以稳定和提到企业的收入。因此,预测和防止客户流失是在业务中常见的一项数据分析任务。这次分享的数据集包括了电信行业、银行、人力资源和电商行业,涵盖了不同业务背景下的流失预测数据。 后台回复暗号(在本文末…...
5.13号模拟前端面试10问
1.介绍箭头函数和普通函数的区别 箭头函数和普通函数在JavaScript中有一些重要的区别。以下是关于这些区别的详细解释: 语法结构上的差异: 箭头函数使用更简洁的语法,它不需要使用function关键字,而是使用一个箭头(…...
学习使用jQuery将光标移动到textarea的末尾
学习使用jQuery将光标移动到textarea的末尾 代码 代码 $(document).ready(function(){var textarea $(#your-qipa-id); // 替换为你的textarea IDtextarea.focus(); // 将焦点设置到textarea// 获取textarea的值的长度var len textarea.val().length;// 使用setSelectionRan…...
【送书福利第七期】你好!Java(文末送书)
文章目录 编辑推荐内容简介作者简介目录前言/序言 编辑推荐 适读人群 :程序员;相关院校师生 本书以轻松幽默的语言,从零开始介绍Java语言。书名来源于编程语言中最经典的Hello World程序,寓意带读者从入门到精通。 书中每章都设有总结与扩展…...
申贷时,银行级大数据自己能查到吗?
随着金融风控的不断健全,大数据作为辅助的风控工具正在被越来越多的银行和机构使用。在进行申贷时,银行通常会进行大数据查询,以便评估申请人的信用状况。那么,这些大数据自己能查到吗?接下来本文就为大家详细介绍一下࿰…...
【SVN-TortoiseSVN】SVN 的简介与TortoiseSVN 安装使用教程
目录 🌞前言 🌊1. SVN 的简介 🌍1.1 SVN是什么 🌍1.2 SVN 工作原理 🌍1.3 TortoiseSVN 术语及定义 🌊2. TortoiseSVN 安装与汉化 🌊3. SVN 基本操作-TortoiseSVN 🌍3.1 浏览…...
5.13学习日志
Pytorch 神经网络基础 1.模型构造 1》层和块 块可以描述单个层,由多个层组成的组件或者模型本身 块由类表示,类的任何子类都必须定义一个将其输入转换为输出的前向传播函数。为了计算梯度,块必须具有反向传播函数 自定义块: …...
8种常见的CMD命令
1.怎么打开CMD窗口 步骤1:winr 步骤2:在弹出的窗口输入cmd,然后点击确认,就会出现一个cmd的窗口 2.CMD的8种常见命令 2.1盘符名称冒号 说明:切换盘的路径 打开CMD窗口这里默认的是C盘的Users的27823路径底下…...
版本控制工具之Git的基础使用教程
Git Git是一个分布式版本控制系统,由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化,也是开发者协作编写代码的工具。 本文将介绍 Git 的基础原理、用法、操作等内容。 一、基础概念 1.1 版本控制系统 版本控制系统&#x…...
五子棋对战(网页版)
目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…...
在 Ubuntu系统中,可以使用以下几种方法查看网络速率
1 使用终端命令:可以使用ifconfig命令查看网络接口的信息,包括网络接口名称、IP地址、子网掩码等。也可以使用nload命令查看网络流量和传输速率。 2 使用网络监控工具:例如nethogs,可以更加直观地查看网络吞吐量。 3 使用网络测…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
