Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

Python提取PDF部分区域文字的方法

发表于 2024-01-09 | 更新于 2024-05-24

最近遇到一个需求,需要提取PDF部分区域的文字,具体方法如下:

  1. 提取PDF中目标内容所在区域
  2. 提取或识别目标区域内容

为了快速验证方法的可行性,使用Python结合PyMuPDF库进行开发。

环境配置

PyMuPDF介绍

PyMuPDF是一个高性能的Python库,用于PDF(和其他)文档的数据提取、分析、转换和操作。

依赖环境

  • python 3.8.5,可在windows7上运行,python 3.9以后版本不支持windows7
  • numpy==1.24.4
  • pandas==2.0.3
  • PyMuPDF==1.23.8
  • PyMuPDFb==1.23.7
  • python-dateutil==2.8.2
  • pytz==2023.3.post1
  • six==1.16.0
  • tzdata==2023.4

虚拟环境

1
2
3
4
5
6
7
8
mkdir pdf_extract
cd pdf_extract
python -m venv env
env\Scripts\activate.bat
pip install pymupdf
pip install pandas
pip freeze > requirement.txt
pip download -d packages -r requirement.txt

离线迁移

创建envConfig.bat批处理文件,一键执行离线环境配置。

1
2
3
python -m venv env
call env\Scripts\activate.bat
pip install --no-index --find-links=packages -r requirement.txt

具体实现

1
2
3
4
5
6
7
8
9
10
11
import fitz # imports the pymupdf library
pdfDoc = fitz.open("test.pdf") # open a document
page = pdfDoc[0]
mat = fitz.Matrix(1, 1) # 1.5表示放大1.5倍
rect = page.rect
#print(rect)
clip = fitz.Rect(0.22*rect.width, 0.19*rect.height,0.35*rect.width, 0.40*rect.height)
pix = page.get_pixmap(matrix=mat, alpha=False, clip=clip)
pix.save("test.png")
a_text = page.get_text(clip=clip)
print(a_text)

参考链接

  1. Python截图PDF,在指定区域并提取文本,by 快学Python.
  2. pymupdf doc,by pymupdf.

IP监控分析的方法

发表于 2024-01-07 | 更新于 2024-01-11

公司内网IP地址资源有限,同时又存在很多分配后的IP长期不使用的情况。为提高IP地址资源的利用效率,需要监控IP的使用情况,统计IP的活动情况,收回长期不上线的IP地址资源,以便重新利用。需要解决的技术难点主要有三个方面:

  • 扫描网络存活主机的方法。
  • 每日定时扫描网络存活主机的方法。
  • 统计IP活动情况的方法。

扫描网络存活主机

扫描网络存活主机可使用以下nmap命令:

1
nmap -P0 192.168.1.1/24

-P0 (无ping) 该选项可解决主机防火墙开启了禁Ping选项而无法被发现的问题,缺点是主机发现的速度将很慢。

1
2
nmap -sn -PS135 172.16.1.128 -vvv -n --disable-arp-ping
#-n 禁用dns解析

注意nmap扫局域网存活主机都会预先进行arp扫描,在这里禁用了端口扫描,意味着nmap只会进行存活扫描,当nmap进行arp扫描后发现主机存活就不会进行后续操作,wireshark也就抓不到包,所以使用–disable-arp-ping禁用arp扫描。

被扫描主机可能开启防火墙,如何绕过防火墙判断主机是否存活,请参考:

  • Nmap抓包分析与绕过Windows防火墙扫内网存活主机
  • Nmap Ping 扫描(防火墙 Bypass)

定时扫描网络存活主机

目前倾向于使用Python在代码中定时调用nmap命令扫描存活主机。一日之内可扫描三次:上午、下午、晚上各一次。

可参考以下链接:

  • 让 Python 程序定时执行的 8 种姿势~

目前倾向于利用调度模块schedule实现定时任务。

统计IP活动情况

主要统计IP地址的未上线的天数。

设置Python脚本开机自启动

1
2
3
d:  #如果需要开机自启动的python程序在c盘,不需要这一行程序;如果需要自启动的python程序在d盘(或其他盘),需要先切换到d盘(或其他盘)
cd path #path为你所要开机自启动的python程序所在的文件夹
python xxx.py #xxx.py为path文件夹内需要自启动的python程序

具体实现

参考链接

  1. Nmap扫描结果保存到本地并提取ip,by ~Echo.
  2. nmap命令扫描存活主机,by qingfenghaha.
  3. Nmap,by wikipedia.
  4. nmap用法解析,by wikipeida.
  5. Python中匹配IP的正则表达式,by bro.
  6. 让 Python 程序定时执行的 8 种姿势~,by 随风.
  7. Python 定时任务最佳实践,by guoweikuang​.
  8. Windows 设置 Python 脚本开机自启的一些心得,by Hsinyan.
  9. 设置python程序开机自启动,by ego782140379.
  10. Nmap抓包分析与绕过Windows防火墙扫内网存活主机,by 合天网安实验室.
  11. Nmap Ping 扫描(防火墙 Bypass),by 一叶知安.

如何成为卓越的大学教师读书笔记

发表于 2023-12-27

学生学习得遇名师是一种幸运,那么怎样成为这样的名师呢?

怎样才算“卓越”

卓越的教师知道学生怎样学习吗?

卓越的教师是如何备课的?

卓越的教师对学生有什么期望?

卓越的教师如何驾驭课堂?

卓越的教师如何对待学生?

卓越的教师如何评估学生和自己?

从卓越的教师身上我们能够学到什么?

参考链接

  1. 如何成为卓越的大学教师,by 肯•贝恩.

深入理解QT编码技巧

发表于 2023-12-24

Qt代码采用面向对象的方法进行编程,要理解Qt代码,理解其各种机制,应从Qt的祖先类开始。

QObject分析

请参考:

  • 深入了解Qt(一)之QObject

元对象系统(Meta-Object System)

请参考:

  • 深入了解Qt(二)之元对象系统(Meta-Object System)

元signal和slot

  • 深入了解Qt(三)之元signal和slot

QWidget分析

请参考:

  • 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)

参考链接

  1. 深入了解Qt(一)之QObject,by RunningSnail.
  2. 深入了解Qt(二)之元对象系统(Meta-Object System),by RunningSnail.
  3. 深入了解Qt(三)之元signal和slot,by RunningSnail.
  4. 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽),by 诺谦.

加密狗破解原理与方法分析

发表于 2023-12-14

加密狗是目前流行的一种软件加密工具。它是插在计算机接口上的软硬件结合的软件加密产品。一般有USB口和并口两种,又称USB加密狗和并口加密狗,目前流行的一般是USB加密狗,并口加密狗在前几年的时候用得比较多。

工作原理

举个例子说明单片机算法的使用。 比如一段程序中有这样一句:A=Fx(3)。程序要根据常量3来得到变量A的值。于是,我们就可以把原程序这样改写:A=Fx(DogConvert(1)-12342)。那么原程序中就不会出现常量3,而取之以DogConvert(1)-12342。这样,只有软件编写者才知道实际调用的常量是3。而如果没有加密狗,DogConvert函数就不能返回正确结果,结果算式A=Fx(DogConvert(1)-12342)结果也肯定不会正确。这种使盗版用户得不到软件使用价值的加密方式,要比一发现非法使用就警告、中止的加密方式更温和、更隐蔽、更令解密者难以琢磨。此外,加密狗还有读写函数可以用作对加密狗内部的存储器的读写。于是我们可以把上算式中的12342也写到软件加密狗的存储器中去,令A的值完全取决于DogConvert()和DogRead()函数的结果,令解密难上加难。

破解方法

  • 一种是通过硬件克隆或者复制
  • 一种是通过SoftICE等Debug工具调试跟踪解密
  • 一种是通过编写拦截程序修改软件和加密狗之间的通讯

目前最常用的免加密狗补丁破解则就是属于第三种破解方式。

参考链接

  1. 加密狗工作原理和破解方法简介,by 阿湯哥.
  2. [转帖]加密狗破解经验分享,by Jayce189.
  3. 加密狗原理及如何对抗破解,by 唯赛科技.

QT自定义控件及使用方法

发表于 2023-11-30 | 更新于 2023-12-13

Qt自带控件有时候不满足个性化的需求,需要自定义控件。如果自定义控件比较通用,最好在QT Designer下显示,以方便使用。最后介绍在Qt Creator中测试验证自定义控件。

Qt Creator编写自定义控件

在Qt Creator编写自定义控件可使用 “Qt4 设计师自定义控件” 模板工程,具体可参考:

  • Qt创建Qt Designer自定义控件及使用

需要注意的是:

  • 自定义控件的编译器应选择与编译生成Qt Creater应用的编译器相同。例如:在Windows平台,一般使用MSVC 32位编译器。当然可以不一定完全相同,例如MSVC 2015 32位编译器和MSVC 2017 32位编译器编译的自定义控件DLL可以通用。
  • 自定义控件类的声明中不需要使用 QDESIGNER_WIDGET_EXPORT 导出宏,否则后面使用自定义控件时将报错。

Qt Designer显示自定义控件

自定义控件编译链接后的Release目录中,将产生自定义控件的dll,将该dll拷贝至Qt Creator的插件目录,例如:

  • D:\Qt\Qt5.12.0\Tools\QtCreator\bin\plugins\designer

之后重启Qt Creator,创建Qt Widgets Application,打开Qt Designer,在其自定义窗口部件中即可发现自定义控件的图标。此外还需将自定义控件的头文件放到编译器的include目录,以msvc为例:

  • D:\Qt\Qt5.12.0\5.12.0\msvc2017\include\MyLabel\mylabel.h

Qt Creator测试自定义控件

打开Qt Creator,创建Qt Widgets Application 应用,打开Qt Designer,使用自定义控件,然后编译链接,将报如下错误:

1
mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall MyLabel::MyLabel(class QWidget *)" (??0MyLabel@@QAE@PAVQWidget@@@Z),该符号在函数 "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z) 中被引用

其原因是没有将自定义控件包含到测试自定义控件的工程中。

  • 拷贝mylabel.h、mylabel.cpp、mylabel.pri到新建工程目录下,在新建工程pro文件中添加include(mylabel.pri)
  • 右键工程清除、执行qmake、重新构建应该就解决该编译链接错误了

参考链接

  1. Qt创建Qt Designer自定义控件及使用,by BrokenRainK.
  2. Qt Designer 插件测试报错问题,by 翻滚的雪球.
  3. QCalendarWidget - How to Highlight Dates,by stackoverflow.

信息系统项目管理师教程读书笔记

发表于 2023-11-14 | 更新于 2023-12-24

记录信息系统项目管理师的相关知识。

十二个项目管理原则

  • 勤勉、尊重和关心他人
  • 营造协作的项目管理团队环境
  • 促进干系人有效参与
  • 聚焦于价值
  • 识别、评估和响应系统交互
  • 展现领导力行为
  • 根据环境进行裁剪
  • 将质量融入到过程和成果中
  • 驾驭复杂性
  • 优化风险应对
  • 拥抱适应性和韧性
  • 为实现目标而驱动变革

五大过程组

  • 启动过程组
  • 规划过程组
  • 执行过程组
  • 监督过程组
  • 收尾过程组

十大知识域

  • 项目整合管理
  • 项目范围管理
  • 项目进度管理
  • 项目成本管理
  • 项目质量管理
  • 项目资源管理
  • 项目沟通管理
  • 项目风险管理
  • 项目采购管理
  • 项目干系人管理

八大绩效域

  • 干系人绩效域
  • 团队绩效域
  • 开发方法和生命周期绩效域
  • 规划绩效域
  • 项目工作绩效域
  • 交付绩效域
  • 测量绩效域
  • 不确定性绩效域

项目生命周期

  • 启动项目
  • 组织与准备
  • 执行项目工作
  • 结束项目

参考链接

  1. 信息系统项目管理师教程,by ruankao.

教学设计原理读书笔记

发表于 2023-11-14 | 更新于 2023-12-28

教学系统导论

教学设计导论

加涅的学习理论主要倾向于用信息加工的模式来解释学习活动,他认为学习过程是信息的接受和使用过程,学习是主体和环境相互作用的结果。其理论的一大特点是注重实际应用,能够很好地将学习理论研究的结果运用于教学实践。

加涅认为学习的典型模式是学习与记忆的信息加工模式。在这一模式中,外界环境中的刺激通过感受器转变为神经信息到达感觉记录器,其中部分被感觉登记了的信息进入到短时记忆。短时记忆里的信息经过编码贮存在长时记忆里,当信息需要使用时,通过检索,从长时记忆中提取出来。信息被提取后有的直接通向反应发生器,有的又回到短时记忆,在短时记忆中对提取出的信息进行核实确认,合适的则通向反应发生器,反之回到长时记忆中进行再次提取。这些成功提取出来的信息最终通过效应器作用于环境。除此以外,该模式还包括执行控制和预期两个部分,它们影响着信息加工的整个过程,是信息加工模式中的重要结构,其中执行控制与知觉策略起着调节和控制作用,预期(动机)起着学习定向作用。

设计教学系统

典型的教学系统设计模型:

  • ADDIE模型:分析(analysis)、设计(design)、开发(development)、实施(implementation)和评价(evaluation)。

学习和教学的基本过程

教学的结果

学习的类型

  • 智慧技能
  • 认知策略
  • 信息
  • 态度
  • 动作技能

学习者

设计教学

确定表现性目标

学习任务分析

设计教学顺序

教学事件

教学即经过设计的、外在于学习者的一套支持内部学习过程的事件。设计教学事件是用来激活信息加工过程,或者至少和信息加工过程同时发生并支持加工过程的。

教学事件:

  1. 引起注意
  2. 告知学习目标
  3. 激起对习得的先决性能的回忆
  4. 呈现刺激材料
  5. 提供学习指导
  6. 引出行为表现
  7. 提供行为表现正确性的反馈
  8. 测量行为表现
  9. 促进保持和迁移

技术-潜在用途

单节课的设计

备课的步骤:

  1. 陈述课的目标及其类型(即学习领域);
  2. 列出打算使用的教学事件;
  3. 列出每一个教学事件赖以完成的媒体、材料及活动;
  4. 注明每个所选事件中教师或培训者的作用和各种活动(教学的处方)。

测量学生的行为表现

评价类型:

  • 标准参照评价,例如目标参照测验
  • 常模参照评价,例如常模参照测验

教学传输系统

集体学习环境

在线学习

教学评价

评价活动贯穿整个教学系统设计过程,包括实施与维护阶段。教学系统评价至少包括以下五种类型:

  • 教学材料评价
  • 教学系统设计过程的质量评论
  • 学习者对教学的反应的测量
  • 学习者在学习目标上的成就测量
  • 教学效果的估计

参考链接

  1. 教学设计原理(第五版修订本),by douban.
  2. 加涅信息加工模式,by baidu.

Java开发运行环境配置

发表于 2023-11-06 | 更新于 2024-03-03

想了解一下Java后端开发,故记录一下Java开发运行环境配置。

Java安装配置

JDK安装完毕后,重点要配置 JAVA_HOME、PATH、CLASSPATH 三个环境变量,请参考Win10下 Java环境变量配置。

  • JAVA_HOME 配置
1
2
# 示例
C:\Java\jdk1.8.0_91
  • PATH 配置
1
2
# 示例
%Java_Home%\bin;%Java_Home%\jre\bin;
  • CLASSPATH 配置
1
2
# 示例
.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar

OpenJDK与JDK区别

OpenJDK和Oracle JDK之间最大的区别是许可。OpenJDK 是完全开源的Java,采用GNU 通用公共许可证。Oracle JDK需要在Oracle二进位代码许可协定下获得商业许可。

JDK版本选择

JDK的两个大版本是Oracle JDK和Open JDK,都属于Oracle。Oracle收购了SUN。Oracle JDK是Oracle基于免费的商业许可证版本。Open JDK是Oracle在开源许可证下的免费版本。

LTS(Long-term Support)即长期支持。目前可选的JDK LTS版本主要有:8、11、17、21。

推荐使用JDK LTS17。因为如果需求要用的SpringBoot3版本的话,那也必须要使用JDK17及以上版本了。

Spring Initializr

Spring Initializr 从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的Maven或Gradle构建说明文件。

使用 Spring Initializr 创建项目的步骤如下:

  1. 打开浏览器,在浏览器地址栏输入 https://start.spring.io 地址。

目前 Spring Initializr 只支持 Sprint Boot 3以上,JDK 17以上,不便于在Win7上开发。需要创建支持 Sprint Boot 2 和 JDK 1.8版本的项目,具体方法请参考:

  • Did spring initializr stop support for spring boot 2.X?
  • Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project
  1. 下载Spring Initializr创建的 Spring Boot 脚手架项目,解压缩,修改目录中的 pom.xml。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  ...

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>

...

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>

Maven安装配置

Maven安装完毕后,重点要配置 MAVEN_HOME和PATH两个环境变量,请参考学Maven,这篇万余字的教程,真的够用了!。

Maven本地仓库配置

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

Maven 仓库有三种类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

1
2
3
4
5
6
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>

Maven常用命令说明

常用命令 中文含义 说明
mvn clean 清理 这个命令可以用来清理已经编译好的文件
mvn compile 编译 将 Java 代码编译成 Class 文件
mvn test 测试 项目测试
mvn package 打包 根据用户的配置,将项目打成 jar 包或者 war 包
mvn install 安装 手动向本地仓库安装一个 jar
mvn deploy 上传 将 jar 上传到私服

Gradle安装配置

请参考:

  • Gradle入门教程(IDEA使用)
  • Gradle 系列 (一)、Gradle相关概念理解,Groovy基础

在IDEA中创建Gradle项目时,会自动生成gradle文件夹,其中就包括gradle-wrapper.properties,IDEA默认使用gradle wrapper来创建项目,所以无需安装gradle也可以正常运行。gradle wrapper的优点之一就是可以自定义下载的gradle的版本,如果是团队协作的话,这个功能就非常方便,简单设置即可统一团队的构建工具版本。

当然,如果你想使用gradle的全局命令的话,还需要你自行修改环境变量配置,需要你到配置的gradle文件夹中找到wrapper文件夹一步步找到对应版本的bin文件夹,并添加到环境变量

gradle-wrapper.properties文件内容

1
2
3
4
5
6
7
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Tomcat安装配置

Apache Tomcat 是Java Servlet、JavaServer Pages (JSP)、Java表达式语言和Java的WebSocket技术的一个开源实现 ,通常我们将Tomcat称为Web容器或者Servlet容器 。其安装过程请参考:

  • 保姆级 tomcat 快速入门教程

参考链接

  1. Win10下 Java环境变量配置,by Tyhoo_Wu.
  2. 学Maven,这篇万余字的教程,真的够用了!,by 江南一点雨.
  3. Maven最全教程,看了必懂,by 小知​.
  4. Java之Maven【IDEA版】入门到精通(一篇文章精通系列),by 程序员小杰#.
  5. 快速入门Maven第一天(使用Maven构建普通项目和WEB项目),by 思冉.
  6. Gradle大战Maven,胜负已分?,by 爱科学的卫斯理.
  7. Maven学习总结(三)——使用Maven构建项目,by 苍青浪.
  8. Maven Available Plugins,by apache.
  9. SpringBoot+Vue前后端分离项目,maven package自动打包整合,by 露娜妹.
  10. OpenJDK下载安装前你应该要知道的5件事,by javase.
  11. Open JDK下载,by 晓之木初.
  12. Java中JDK8、JDK11、JDK17,该怎么选择?,by aliyun.
  13. Java版本历史,by wiki.
  14. JDK的两个大版本,为什么要选LTS,by 编程还未.
  15. Did spring initializr stop support for spring boot 2.X?,by stackoverflow.
  16. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project,by stackoverflow.
  17. 理解Maven中的SNAPSHOT版本和正式版本,by huangbowen.
  18. win7系统Tomcat8安装步骤,by x_Lyric.
  19. 保姆级 tomcat 快速入门教程,by 田维常.
  20. Groovy DSL 设计之道,by 花花子.
  21. Gradle 系列 (一)、Gradle相关概念理解,Groovy基础,by sweetying.

C#程序汉化方法

发表于 2023-10-26 | 更新于 2023-11-05

可使用dnspy工具对C#程序进行汉化。

简介

dnSpy 是一个调试器和 .NET 程序集编辑器。即使您没有任何可用的源代码,您也可以使用它来编辑和调试程序集。主要特点:

  • 调试 .NET 和 Unity 程序集
  • 编辑 .NET 和 Unity 程序集
  • 浅色和深色主题

参考链接

  1. 成为汉化工吧!特辑 - 使用dnsPy汉化.NET程序~初体验,by 花开开不开.
  2. dnSpy readme,by dnspy.
上一页1…789…52下一页

Jack Huang

519 日志
66 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse