【人工智能学习-01-01】20250419《数字图像处理》复习材料的word合并PDF,添加页码

前情提要

 20250419今天是上师大继续教育人工智能专升本第一学期的第一次线下课。

三位老师把视频课的内容提炼重点再面授。(我先看了一遍视频,但是算法和图像都看不懂,后来就直接挂分刷满时间,不看了)

今天是面对面授课,听不懂我也要聚精会神听,感觉能听懂一点点了。

 

第二位女老师讲授数字图像处理,没有说太多的理论,而是鼓励学生多练习图像处理的代码,获得一定的需求。

1、推荐了飞棠学习网站

2、介绍最新人工智能算法代码

2025

2019

3、介绍一些数字图像处理的实用案例。

 

背景需求:

随后老师分享了部分考试提纲内容,希望学员通过背诵记忆,通过理论考试。

下载后我发现word比较多,而且不是按序排列(第一章、第五章),一个个打开查看不方便。所以我想做成一个PDF

把序号改成第1章、第2章,把题目设置01、把答案写02,这样就能完全按照顺序排列

第1次询问deepseek

 

第一次生成结果

打开后的确是按顺序排列的,供幼56页,但是我发现底部没有页码,这样容易遗失

第2问:如何PDF添加页码

把生成的修改代码(包括页码)运行后,添加页码的部分出现问题

第3问:把出现的错误的截图+源代码一起写入deep seek

AI发现了问题成因,并重新写代码

最终代码

'''
上师大继续教育人工智能-数字图像处理复习题合并+pdf页码
deepseek,阿夏
20250419
'''import os
from docx2pdf import convert
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import iodef convert_docx_to_pdf(input_folder):"""将指定文件夹中的所有DOCX文件转换为PDF"""for filename in os.listdir(input_folder):if filename.lower().endswith('.docx'):docx_path = os.path.join(input_folder, filename)try:print(f"正在转换: {filename}")convert(docx_path, docx_path.replace('.docx', '.pdf'))print(f"转换完成: {filename}")except Exception as e:print(f"转换 {filename} 时出错: {e}")def create_page_num_pdf(page_num, total_pages, pagesize):"""创建包含页码的单个PDF页面"""packet = io.BytesIO()# 确保pagesize是float类型if hasattr(pagesize, '__iter__'):pagesize = (float(pagesize[0]), float(pagesize[1]))else:pagesize = lettercan = canvas.Canvas(packet, pagesize=pagesize)# 设置页码文本 (底部居中)text = f"{page_num}/{total_pages}"width, height = pagesizecan.setFont("Helvetica", 10)  # 设置字体和大小can.drawCentredString(width / 2, 20, text)  # 在底部居中位置绘制页码can.save()packet.seek(0)return PdfReader(packet)def add_page_numbers(input_pdf_path, output_pdf_path):"""为PDF文件添加页码"""reader = PdfReader(input_pdf_path)writer = PdfWriter()total_pages = len(reader.pages)for page_num in range(total_pages):# 获取原始页面page = reader.pages[page_num]# 获取页面尺寸并确保是float类型if '/MediaBox' in page:media_box = page['/MediaBox']pagesize = (float(media_box[2]), float(media_box[3]))else:pagesize = letter  # 默认使用letter尺寸# 创建带页码的PDFpage_num_pdf = create_page_num_pdf(page_num + 1, total_pages, pagesize)# 将原始页面与页码合并page.merge_page(page_num_pdf.pages[0])writer.add_page(page)# 保存带页码的PDFwith open(output_pdf_path, "wb") as output_pdf:writer.write(output_pdf)def merge_pdfs(input_folder, output_folder, output_filename='20250419(合并打印版本)数字图像处理考试.pdf'):"""合并指定文件夹中的所有PDF文件并添加页码"""# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_folder)merger = PdfWriter()pdf_files = []# 收集所有PDF文件for filename in os.listdir(input_folder):if filename.lower().endswith('.pdf'):pdf_path = os.path.join(input_folder, filename)pdf_files.append(pdf_path)if not pdf_files:print("没有找到PDF文件可合并")return# 按文件名排序pdf_files.sort()# 合并PDFfor pdf in pdf_files:try:reader = PdfReader(pdf)for page in reader.pages:merger.add_page(page)print(f"已添加: {os.path.basename(pdf)}")except Exception as e:print(f"添加 {pdf} 时出错: {e}")# 保存临时合并PDFtemp_output_path = os.path.join(output_folder, 'temp_' + output_filename)final_output_path = os.path.join(output_folder, output_filename)try:with open(temp_output_path, "wb") as temp_pdf:merger.write(temp_pdf)# 为合并后的PDF添加页码add_page_numbers(temp_output_path, final_output_path)print(f"合并完成并添加页码,保存为: {final_output_path}")# 删除临时文件os.remove(temp_output_path)except Exception as e:print(f"保存合并PDF时出错: {e}")finally:passdef main():path = r'D:\人工智能(专升本)\04 202502第一学期\06线下课\20250419 02数字图像处理\数字图像处理考试'input_folder = os.path.join(path, '02处理后')output_folder = path# 第一步:转换所有DOCX为PDFprint("开始转换DOCX文件为PDF...")convert_docx_to_pdf(input_folder)# 第二步:合并所有PDF并添加页码print("\n开始合并PDF文件并添加页码...")merge_pdfs(input_folder, output_folder)if __name__ == '__main__':main()

 

这次完全成功了

有页码,而且是我想要的那种带有总数(56)的页码

成果运用:发班级群共享

 

 

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

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

相关文章

AI写代码工具分享:Cursor 高效使用攻略与实战秘籍

写在前面 在软件开发领域,效率和生产力是永恒的追求。集成开发环境(IDE)作为开发者的核心工具,其能力直接影响着开发速度和质量。近年来,人工智能(AI)的浪潮席卷了各个行业,编程领域也不例外。Cursor IDE 正是这股浪潮中的佼佼者,它以 AI-First 的理念,在广受欢迎的…

守护进程编程

守护进程编程 守护进程的含义 定义 守护进程(Daemon Process)是在后台运行的进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程,它在系统后台运行,为系统或其他…

在复杂性的迷宫里寻找路标 —— 读《人月神话》有感

初读《人月神话》时,正值参与的第一个大型项目陷入泥潭:需求像不断膨胀的气球,团队规模从 10 人扩充到 30 人,进度却像被灌了铅的钟表,指针越来越沉重。布鲁克斯在书中写下的 "向进度落后的项目增加人力&#xff…

SpringCloud Alibaba微服务工程搭建

前言 在讲微服务工程的搭建之前,我们先分析下为什么要使用微服务呢? 1、单体应用的痛点 维护困难:代码臃肿,牵一发而动全身。扩展性差:无法按需扩展特定功能,只能整体扩容。技术栈僵化:难以引…

flutter json解析增强

依赖:xxf_json 反序列化兼容特征一览表 类型\是否兼容 int double num string bool int yes yes yes yes yes double yes yes yes yes yes num yes yes yes yes yes string yes yes yes yes yes bool yes yes yes yes yes 专业词语 .g…

Neo4j初解

Neo4j 是目前应用非常广泛的一款高性能的 NoSQL 图数据库,其设计和实现专门用于存储、查询和遍历由节点(实体)、关系(边)以及属性(键值对)构成的图形数据模型。它的核心优势在于能够以一种自然且…

学习MySQL的第十天

一、MySQL的数据类型 1.MySQL的数据类型 2.常见的数据类型的属性 二、整数类型 三、浮点类型 REAL默认就是DOUBLE。如果你把SQL模式设定为启用“REAL_AS_FLOAT”,那么,MySQL就认为REAL是FLOAT。如果要启用“REAL_AS_FLOAT”,可以通过以下SQL语句实现: SET sql_mode &…

ubuntu24.04上使用qemu+buildroot+uboot+linux+tftp+nfs模拟搭建vexpress-ca9嵌入式linux开发环境

1 准备工作 1.1 安装依赖工具 sudo apt-get update && sudo apt-get install build-essential git bc flex libncurses5-dev libssl-dev device-tree-compiler1.2 安装arm交叉编译工具链 sudo apt install gcc-arm-linux-gnueabihf安装之后,在终端输入ar…

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …

【PCIE配置空间】

1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith,RC还是EP? –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现;-…

Android 热点二维码简单示例

Android 热点二维码简单示例 一、前言 Android 原生设置有热点二维码分享功能,有些系统应用也会有这个需求。 下面看看是如何实现的。 本文是一个比较简单的内容。 二、热点二维码生成实现 1、效果 整个应用就一个普通的Activity,显示一个按钮和二维…

uv:重新定义Python开发效率的下一代工具链

在Python生态系统中,包管理和项目工具链的复杂性一直是开发者面临的一大挑战。从依赖管理、虚拟环境创建到多版本Python切换,传统的工具链(如pip、virtualenv、poetry等)虽然功能强大,但操作繁琐、性能不足的问题长期存…

T101D加固平板电脑:无人机地面站的高效智能控制核心

随着无人机技术在应急救援、农业监测、军事侦察等领域的广泛应用,对地面控制设备的要求也日益提高。鲁成伟业推出的T101D加固平板电脑凭借其高性能、强防护和专业化设计,成为无人机地面站的核心控制终端,为复杂环境下的作业提供了可靠支持。 …

Datawhale AI春训营】AI + 新能源(发电功率预测)Task1

赛题链接 官网 新能源发电功率预测赛题进阶方案 下面是ai给的一些建议 新能源发电功率预测赛题进阶方案 一、时序特性深度挖掘 1. 多尺度周期特征 # 分钟级周期编码 train[15min_index] (train[hour]*4 train[minute]//15)# 周周期特征 train[weekday] pd.to_datetime…

山东科技大学深度学习考试回忆

目录 一、填空(五个空,十分) 二、选择题(五个,十分) 三、判断题(五个,五分) 四、论述题(四个,四十分) 五、计算题(二个&#xff…

Redis线上操作最佳实践有哪些?

大家好,我是锋哥。今天分享关于【Redis线上操作最佳实践有哪些?】面试题。希望对大家有帮助; Redis线上操作最佳实践有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在使用 Redis 时,尤其是在生产环境中,合理…

mac中的zip文件压缩与压缩文件中指定目录删除

问题 在使用mac的图形界面压缩文件后,往往那个压缩文件中带有__MACOSX文件,但是,这个文件夹又是我们不需要的目录,所有,需要对mac图形化界面压缩后的文件目录进行删除,改如何做? 检查压缩文件…

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su ,命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…

深度学习-torch,全连接神经网路

3. 数据集加载案例 通过一些数据集的加载案例,真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd ​ ​ class MyCsvDataset(Dataset):def __init__(self, fil…

C++/Python实现RGB和HSI相互转换

1--C版本 #include <opencv2/opencv.hpp> #include <iostream> #include <cmath>// RGB to HSI cv::Vec3f RGBtoHSI(cv::Vec3b rgb) {float B rgb[0] / 255.0f;float G rgb[1] / 255.0f;float R rgb[2] / 255.0f;float num 0.5f * ((R - G) (R - B));f…