給純小白的Python操作 PDF 筆記

一、文件基礎

  1. 打開與關閉

    • 推薦用 with open(path, mode, encoding='utf-8') as f:,自動完成 close(),避免泄露文件句柄。
    • 常見模式:'r' 讀,'w' 寫覆蓋,'a' 追加,'rb'/'wb' 二進制。
    • Windows 默認編碼為 GBK,Linux/Mac 為 UTF-8;跨平臺腳本務必顯式指定 encoding。
  2. 文本讀寫

    • f.read() 一次讀全部;f.readline() 逐行;f.readlines() 得列表。
    • 追加寫入:with open('test.txt','a',encoding='utf-8') as f: f.write('xxx')
  3. 路徑與編碼錯誤

    • 絕對路徑:C:/Users/...(正斜杠或雙反斜杠)。
    • 相對路徑:以腳本所在目錄為基準,可用 os.path.join() 拼接。
    • 遇到 UnicodeDecodeError 時,嘗試 encoding='utf-8-sig''gbk'

二、PDF 處理(PyPDF2 + pdfplumber 組合拳)

  1. 環境準備
   pip install PyPDF2 pdfplumber pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 讀取文字
   import pdfplumberwith pdfplumber.open('demo.pdf') as pdf:for page in pdf.pages:print(page.extract_text())
  1. 讀取表格
   all_tables = []with pdfplumber.open('demo.pdf') as pdf:for p in pdf.pages:for table in p.extract_tables():all_tables.extend([row for row in table if any(row)])df = pd.DataFrame(all_tables)df.to_excel('pdf_table.xlsx', index=False, header=False)
  1. 合并 PDF(PyPDF2)
   from PyPDF2 import PdfMergermerger = PdfMerger()for pdf in ['1.pdf', '2.pdf']:merger.append(pdf)merger.write('merged.pdf')merger.close()
  1. 添加水印(注意層級順序)
   from PyPDF2 import PdfFileReader, PdfFileWriterbase = PdfFileReader('src.pdf')watermark = PdfFileReader('water.pdf').getPage(0)writer = PdfFileWriter()for i in range(base.getNumPages()):page = base.getPage(i)# 先底層內容,后水印;若水印被文字遮擋,可調整水印透明度或在生成水印 PDF 時放到底層page.mergePage(watermark)   # mergePage 會把兩頁疊加,watermark 在上層writer.addPage(page)with open('res_watermarked.pdf', 'wb') as f:writer.write(f)

課堂踩坑:水印蓋字 → 在水印 PDF 里把文字透明度降低或置底后再合并。

  1. Word → PDF(Windows 專用,pypiwin32)
   import win32com.client as win32word = win32.Dispatch('Word.Application')doc = word.Documents.Open(r'C:\abs\path\template.docx')doc.ExportAsFixedFormat('template.pdf', 17)  # 17=pdfdoc.Close(); word.Quit()

三、實戰小結

  • 文件操作牢記 with+encoding;PDF 處理分清 pdfplumber(讀取)與 PyPDF2(編輯)。
  • 合并、加水印前先用小文件調試,避免一次性加載大 PDF 導致內存爆炸。
  • 路徑/編碼問題優先排查打印 os.getcwd() 與顯式 encoding。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93899.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue使用vue-cropper實現圖片裁剪之單圖裁剪

vue制作的pc系統中(如若依系統),需要實現按照固定尺寸進行裁剪后再進行圖片上傳,以下代碼講述的是實現單張圖片裁剪上傳。1.第一步需要安裝vue-croppernpm install vue-cropper2.第二步在需要的頁面進入代碼引入import {VueCropper} from "vue-crop…

后臺管理系統-5-vue3之子路由渲染首頁及卡片容器和表格容器實現

文章目錄 1 子路由的實現 1.1 router/index.js 1.2 views/Home.vue(首頁) 1.3 Main.vue 2 左上方的卡片 2.1 分欄間隔(Layout布局) 2.2 卡片容器(el-card) 2.3 整體代碼Home.vue 3 左下方的table(靜態實現) 3.1 準備數據 3.2 渲染表格(el-table) 3.3 整體代碼Home.vue 4 附錄 子…

在CentOS系統中查詢已刪除但仍占用磁盤空間的文件

在CentOS系統中查詢已刪除但仍占用磁盤空間的文件在CentOS系統中查詢已刪除但仍占用磁盤空間的文件1. 檢查磁盤整體使用情況2. 查找被刪除但仍被進程占用的文件3. 釋放磁盤空間4. 替代方案(不終止進程)注意事項補充工具在CentOS系統中查詢已刪除但仍占用…

正點原子【第四期】Linux之驅動開發學習筆記-1.1 Linux驅動開發與裸機開發的區別

前言: 本文是根據嗶哩嗶哩網站上“正點原子【第四期】手把手教你學Linux系列課程之 Linux驅動開發篇”視頻的學習筆記,該課程配套開發板為正點原子alpha/mini Linux開發板。在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內…

Android SystemServer 中 Service 的創建和啟動方式

今天導師給我將講了一些如何新建一個系統服務,以及如何去初始化。 Android SystemServer 中 Service 的創建和啟動方式 在 Android 系統中,SystemServer 是系統服務的核心進程,負責啟動和管理各種系統服務。以下是 SystemServer 中服務創建和…

SQL SERVER中位數

有11家門店數據,要求每天所有門店的各個指標的中位數1.第一種做法,使用PERCENTILE_CONT() 函數 SQL SERVER 2012 版本及以上PERCENTILE_CONT 函數簡介PERCENTILE_CONT 是 SQL 中的窗口函數,用于計算連續百分位數&#…

【java中springboot引入geotool】

學習目標: 在Spring Boot項目中引入GeoTools庫,可以按照以下步驟進行:理解GeoTools庫的基本信息和用途 GeoTools是一個開源的Java庫,用于處理地理信息系統(GIS)數據。它提供了對空間數據的讀取、寫入、查詢…

多項目開發環境:如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu)

如何使用update-alternatives管理多版本Java JDK?(Windows、Mac、Ubuntu) 📖 摘要 在實際開發中,往往會遇到既要維護老項目又要跟進新特性的場景,這就需要在一臺機器上同時安裝并切換多個Java JDK版本。本…

力扣57:插入區間

力扣57:插入區間題目思路代碼題目 給你一個 無重疊的 ,按照區間起始端點排序的區間列表 intervals,其中 intervals[i] [starti, endi] 表示第 i 個區間的開始和結束,并且 intervals 按照 starti 升序排列。同樣給定一個區間 newInterval […

KVM虛擬化技術解析:從企業應用到個人創新的開源力量

1 .KVM:開源虛擬化的核心引擎 KVM(Kernel-based Virtual Machine)作為Linux內核原生集成的開源虛擬化模塊,徹底改變了現代數據中心的虛擬化格局。它通過將Linux內核轉變為Type-1型虛擬機監控器(Hypervisor)…

28.Linux :通過源代碼編譯安裝lamp

Linux :通過源代碼編譯安裝lamp 區別特性源代碼編譯安裝yum 安裝安裝方式從源代碼編譯構建預編譯的二進制包自定義程度高度可定制有限定制性能優化可針對特定硬件優化通用優化依賴管理手動解決依賴關系自動解決依賴安裝復雜度復雜,需技術經驗簡單&#x…

應用控制技術

一、 應用特征識別技術1.傳統行為檢測技術1.1 五元組檢測原理1.2 配置思路1.3 效果展示需求背景21.4 傳統行為檢測的缺陷無法識別應用層內容:若應用更換端口(如QQ改用隨機端口)或偽裝協議(如HTTPS加密),傳統…

當MySQL的int不夠用了

關于int的長度很多時候看到int(8)這樣的定義,其實這是工具導出的不專業。int是范圍,不是長度。在開發有了共識(知道這個長度不算數,要看范圍)以后,上來就是所有的類型都是bigint。int的范圍int的取值范圍是…

讓AI學會“邊做邊想“:ReAct的實戰指南

小智的求職困境有個叫小智的AI助手,它剛從"大語言模型大學"畢業,滿懷信心地去應聘一家咨詢公司的智能助理職位。面試官問:"北京和上海哪個城市人口更多?"小智立刻回答:"根據我的知識&#xf…

vue優化有哪些手段?

vue本身存在的方法 v-if 和v-show 的合理運用,頻繁使用的組件使用v-show,不頻繁的使用v-if,來減少dom的渲染路由懶加載 采用()>import(index.vue)當路由被訪問的時候才回去加載使用keep-alive緩存頁面,減少沒必要的重復渲染同時也可以減少服務器的壓力使用computed緩存數據,…

【圖像算法 - 14】精準識別路面墻體裂縫:基于YOLO12與OpenCV的實例分割智能檢測實戰(附完整代碼)

摘要: 裂縫是結構健康的重要隱患,傳統人工巡檢耗時耗力且易遺漏。本文將帶您利用當前最先進的YOLO12實例分割模型,構建一個高效、準確、更高精度的裂縫檢測系統。我們將從數據準備、模型訓練到結果可視化,手把手實現一個完整的項目…

“讓機器人更智慧 讓具身體更智能”北京世界機器人大會行業洞察

2025年8月8日,世界機器人大會在北京盛大開幕。本屆大會以“讓機器人更智慧 讓具身體更智能”為主題,由中國電子學會、世界機器人合作組織主辦,包括開幕式、閉幕式、論壇等。同期舉辦世界機器人博覽會、世界機器人大賽等活動,打造了…

PHP如何使用JpGraph生成折線圖?

JpGraph是一個功能強大的PHP圖表庫,它通過封裝GD庫函數,為開發者提供了簡單高效的數據可視化解決方案。作為專門用于繪制統計圖的面向對象庫,JpGraph支持創建折線圖、柱狀圖、餅圖等20余種圖表類型,并能自動處理坐標軸、刻度、圖例…

超級云平臺:重構數字生態的“超級連接器“

在數字經濟浪潮席卷全球的今天,企業數字化轉型已從"選擇題"變為"必答題"。然而,傳統云服務模式因技術壁壘高、資源分散、協同效率低等問題,讓許多企業在數字化轉型中陷入"上云易、用云難"的困境。 在此背景下,一種以"全域資源整合+智能…

https如何保證傳遞參數的安全

HTTPS 并非直接“加密參數”,而是通過一整套加密傳輸機制,確保客戶端與服務器之間所有通信內容(包括 URL 參數、表單數據、Cookie 等)在傳輸過程中不被竊聽、篡改或偽造。其核心安全保障來自以下技術實現: 一、核心加密…