创意网站页面设计网上怎么做网站
2026/4/4 3:35:02 网站建设 项目流程
创意网站页面设计,网上怎么做网站,华为通用软件开发工程师待遇,南宁小程序制作Day 44#xff1a;【99天精通Python】操作 PDF (PyPDF2) - 文档处理的屠龙刀 前言 欢迎来到第44天#xff01; 在办公自动化领域#xff0c;除了 Word 和 Excel#xff0c;PDF 是最常见的文件格式。它的特点是所见即所得#xff0c;在任何设备上打开格式都不会…Day 44【99天精通Python】操作 PDF (PyPDF2) - 文档处理的屠龙刀前言欢迎来到第44天在办公自动化领域除了 Word 和 ExcelPDF是最常见的文件格式。它的特点是所见即所得在任何设备上打开格式都不会乱。但这也导致它很难编辑。你是否遇到过这些需求把 10 个 PDF 文件合并成一个。把一个几百页的 PDF拆分成单独的章节。从 PDF 中提取文本内容虽然效果不一定完美。给 PDF 加密或添加水印。Python 提供了多个 PDF 处理库其中最流行、最轻量级的是PyPDF2。今天我们就来掌握这把处理 PDF 的屠龙刀。本节内容安装 PyPDF2读取 PDF 信息页数、元数据提取文本内容拆分 PDF 页面合并多个 PDF加密与解密 PDF一、安装 PyPDF2注意PyPDF2 在 3.0 版本后 API 有较大变动如PdfFileReader改名为PdfReader。本教程使用最新的 3.x 版本。pipinstallPyPDF2二、读取 PDF 信息我们需要一个测试文件sample.pdf。fromPyPDF2importPdfReader# 1. 打开 PDFreaderPdfReader(sample.pdf)# 2. 获取总页数print(f总页数:{len(reader.pages)})# 3. 获取元数据 (作者、标题等)metareader.metadataprint(f标题:{meta.title})print(f作者:{meta.author})2.1 提取文本 (Extract Text)# 获取第一页pagereader.pages[0]# 提取文本textpage.extract_text()print(text)注意PDF 的本质是排版指令而不是文本流。如果 PDF 是扫描件全是图片或者使用了特殊编码的字体提取出来的可能是乱码或空字符串。对于扫描件需要使用 OCR 技术如pytesseract这超出了 PyPDF2 的能力范围。三、拆分 PDF (Split)假设我们要把每一页单独保存为一个 PDF 文件。fromPyPDF2importPdfReader,PdfWriter readerPdfReader(sample.pdf)fori,pageinenumerate(reader.pages):# 创建一个写入器writerPdfWriter()# 将当前页添加到写入器writer.add_page(page)# 保存文件filenamefpage_{i1}.pdfwithopen(filename,wb)asf:writer.write(f)print(f已保存:{filename})四、合并 PDF (Merge)把多个 PDF 合并成一个。PyPDF2 提供了更高级的PdfMerger类比手动add_page更方便。fromPyPDF2importPdfMergerimportos# 获取所有要合并的文件files[report_part1.pdf,report_part2.pdf,report_part3.pdf]mergerPdfMerger()forpdfinfiles:# append 可以直接追加文件merger.append(pdf)# 保存合并结果merger.write(report_final.pdf)merger.close()print(合并完成)进阶插入到指定位置# 把 part2 插在 part1 的第 2 页之后merger.append(part1.pdf)merger.merge(2,part2.pdf)# 在索引2的位置插入五、加密与解密5.1 给 PDF 加密码fromPyPDF2importPdfReader,PdfWriter readerPdfReader(sample.pdf)writerPdfWriter()# 将所有页复制到 writerforpageinreader.pages:writer.add_page(page)# 设置密码writer.encrypt(123456)# 保存withopen(locked.pdf,wb)asf:writer.write(f)5.2 读取加密的 PDF如果直接读取加密文件会抛出错误或获取不到内容。readerPdfReader(locked.pdf)ifreader.is_encrypted:print(文件已加密尝试解密...)# 尝试解密 (返回 True/False)ifreader.decrypt(123456):print(f解密成功页数:{len(reader.pages)})else:print(密码错误)六、实战练习PDF 工具箱编写一个命令行工具根据用户输入实现合并或拆分功能。importosfromPyPDF2importPdfReader,PdfWriter,PdfMergerdefsplit_pdf(filename):拆分 PDF 的每一页try:readerPdfReader(filename)base_nameos.path.splitext(filename)[0]fori,pageinenumerate(reader.pages):writerPdfWriter()writer.add_page(page)outputf{base_name}_p{i1}.pdfwithopen(output,wb)asf:writer.write(f)print(f拆分完成共{len(reader.pages)}个文件。)exceptExceptionase:print(f拆分失败:{e})defmerge_pdfs(file_list,output_namemerged.pdf):合并多个 PDFmergerPdfMerger()try:forpdfinfile_list:ifos.path.exists(pdf):merger.append(pdf)else:print(f跳过不存在的文件:{pdf})merger.write(output_name)print(f合并完成:{output_name})exceptExceptionase:print(f合并失败:{e})finally:merger.close()if__name____main__:print(1. 拆分 PDF)print(2. 合并 PDF)choiceinput(请选择: )ifchoice1:pathinput(请输入要拆分的 PDF 路径: )split_pdf(path)elifchoice2:pathsinput(请输入要合并的 PDF 路径 (用逗号分隔): ).split(,)# 去除空白paths[p.strip()forpinpaths]merge_pdfs(paths)七、常见问题Q1提取的文本是乱码这通常是因为 PDF 缺少字体映射表CMap或者是图片型 PDF。解决方案PyPDF2 搞不定。尝试pdfplumber库提取效果更好或者pytesseractOCR 识别。Q2合并后文件体积变大PDF 内部可能包含重复的字体或图片资源。合并时 PyPDF2 有时无法完美去重。可以使用 Acrobat Pro 进行优化或者尝试pikepdf库。Q3如何旋转页面# 顺时针旋转 90 度page.rotate(90)八、小结PyPDF2读取 PdfReader写入 PdfWriter合并 PdfMergerlen(pages) 页数pages[0].extract_text() 文本decrypt() 解密add_page() 添加页encrypt() 加密write() 保存append() 追加文件merge() 插入文件关键要点拆分Reader读Writer写。合并直接用PdfMerger最快。局限性对文本提取支持有限不适合处理扫描件。九、课后作业奇偶拆分编写程序将一个 PDF 拆分成两个文件odd.pdf包含第 1,3,5… 页和even.pdf包含第 2,4,6… 页。页面旋转矫正读取一个 PDF将所有页面旋转 180 度倒立并保存为新文件。水印添加 (挑战)结合 Day 42 (Pillow) 和 PyPDF2。先用 Pillow 生成一张透明的水印图片转为 PDF然后将水印 PDF 与目标 PDF 的每一页进行合并Overlay。提示page.merge_page()。下节预告Day 45进阶篇总结与展望- 我们的进阶之旅即将画上句号。明天我们将复盘进阶篇的核心知识体系并为接下来的重头戏——实战篇 (数据分析与Web开发)做好准备系列导航上一篇Day 43 - 发送邮件smtplib下一篇Day 45 - 进阶篇总结与展望待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询