用Python向PDF添加文本:精確插入文本到PDF文檔

PDF 文檔的版式特性使其適用于輸出不可變格式的報告與合同。但若要在此類文檔中插入或修改文本,常規方式難以實現。借助Python,我們可以高效地向 PDF 添加文本,實現從文檔生成到內容管理的自動化流程。

本文將從以下方面介紹Python實現PDF中文本的添加:

文章目錄

    • 新建PDF并添加段落文本
    • 向現有PDF中插入文本內容
    • 復雜格式設置:添加透明旋轉水印文本
    • 總結


本文使用的方法需要用到免費的Free Spire.PDF for Python,可通過pip安裝:

pip install spire.pdf.free

新建PDF并添加段落文本

在構建系統報告或生成模板文檔時,通常需要從空白頁插入一段段文本,保持排版一致性。

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment# 創建新的PDF文檔并添加頁面
pdf = PdfDocument()
page = pdf.Pages.Add()# 待插入的文本內容
text = ("The purpose of this document is to provide an overview of the company’s financial highlights for the fiscal year 2024. ""It includes revenue trends, operational costs, and net income summaries. ""The following sections will outline each metric in more detail.")# 設置字體、畫刷(顏色)和排版區域
font = PdfTrueTypeFont("Arial", 14.0, PdfFontStyle.Regular, True)
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0))  # 黑色文本
layout_area = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
string_format = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)# 添加文字內容
page.Canvas.DrawString(text, font, brush, layout_area, string_format, False)# 保存并關閉
pdf.SaveToFile("output/new.pdf")
pdf.Close()

📌 技術細節說明:

  • PdfTrueTypeFont 可嵌入外部字體文件,適用于需要控制字體兼容性的場景;
  • RectangleF 定義文本區域邊界(支持自定義段落框);
  • DrawString() 支持超出區域自動換行;
  • 使用 PdfStringFormat 設定水平方向與垂直方向的對齊方式。

生成的PDF文檔:
Python新建PDF并插入文本


向現有PDF中插入文本內容

當你已有一份PDF文件,但希望在某一頁添加標記或文字說明,例如審批標語、狀態說明等,可以使用如下方式:

from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfFont, PdfFontFamily# 加載已有PDF文檔
pdf = PdfDocument()
pdf.LoadFromFile("PDF.pdf")
page = pdf.Pages[0]# 設置字體、顏色和插入位置
font = PdfFont(PdfFontFamily.TimesRoman, 12.0, PdfFontStyle.Bold)
brush = PdfSolidBrush(PdfRGBColor(0, 128, 0))  # 深綠色
location = PointF(130.0, 90.0)# 插入文本
page.Canvas.DrawString("Verified by QA Department", font, brush, location)# 保存結果
pdf.SaveToFile("output/ModifiedPDF.pdf")
pdf.Close()

📌 技術細節說明:

  • PdfFontFamily.TimesRoman 屬于 PDF 標準內置字體(無需嵌入);
  • 坐標 PointF(x, y) 單位為磅(1 pt ≈ 0.3528 mm),以頁面左上角為 (0,0);
  • 無需設置區域框時,適用于短文本、標簽插入、動態蓋章等場景。

修改的PDF文檔:
Python載入PDF插入文本


復雜格式設置:添加透明旋轉水印文本

在文檔審閱或內部版本發布場景中,常見的做法是添加一個帶透明度與旋轉角度的水印文字,以提示機密性或防止誤傳播。Spire.PDF 提供了畫布狀態保存、旋轉、透明度控制等接口,可用于實現這種復雜的格式需求。

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF
from spire.pdf.common import Color# 加載已有PDF文檔
pdf = PdfDocument()
pdf.LoadFromFile("input1.pdf")
page = pdf.Pages[0]# 設置水印文本內容
text = "Internal Use Only"# 設置字體樣式與大小
font = PdfTrueTypeFont("Arial", 40.0, PdfFontStyle.Bold, True)# 設置畫刷顏色為深紅色
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkRed()))# 測量文本大小以便居中放置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2# 保存當前畫布狀態
state = page.Canvas.Save()# 設置透明度
page.Canvas.SetTransparency(0.3)# 平移至文本中心位置
page.Canvas.TranslateTransform(x + size.Width / 2, y + size.Height / 2)# 旋轉文本(-45度斜著顯示)
page.Canvas.RotateTransform(-45.0)# 繪制文本水印(左上角為起始點,因此需偏移)
page.Canvas.DrawString(text, font, brush, PointF(-size.Width / 2, -size.Height / 2))# 恢復畫布狀態
page.Canvas.Restore(state)# 保存文檔
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()

📌 技術細節說明:

  • 使用 SetTransparency(0.3) 設置文本透明度,增強水印效果但不遮擋內容;
  • TranslateTransform() 將畫布原點移動至文本中心;
  • RotateTransform(-45) 實現對角線旋轉,常用于“CONFIDENTIAL”或“DRAFT”類水印;
  • 水印文本使用 DrawString() 繪制,PointF(-size.Width / 2, -size.Height / 2) 保證以中心為參考點;
  • 通過 Canvas.Save()Canvas.Restore() 管理局部畫布狀態,避免影響頁面中其他元素。

修改后的PDF文檔:
Python插入文本到PDF并精確控制位置和格式


總結

通過 Spire.PDF for Python,你可以使用簡潔的 Python 代碼在 PDF 中添加各類文本,功能包括:

功能項方法與說明
? 從零創建文檔PdfDocument.Pages.Add() + DrawString()
? 插入文本到現有文檔LoadFromFile() + PointF 定位文本插入點
? 控制排版樣式使用 RectangleF + PdfStringFormat 控制對齊與區域
? 多行文本支持文本中添加 \n,自動換行渲染
? 字體與顏色控制支持 TrueType標準字體,自定義顏色 RGB

這些操作覆蓋了 PDF 文本添加的主要應用場景,從文檔批量生成到人工標注支持,適合用于自動歸檔、審批流程、內容輸出等業務場景。


📚 更多PDF編輯教程,請訪問:
Spire.PDF for Python 教程中心

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

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

相關文章

Quick API:賦能能源行業,化解數據痛點

隨著全球能源結構的轉型和數字化的深入推進,能源行業正面臨前所未有的機遇與挑戰。海量的實時數據、復雜的業務系統、以及對數據安全和高效利用的迫切需求,都成為了能源企業在數字化轉型道路上的核心痛點。本文將深入探討麥聰Quick API如何憑借其獨特優勢…

Google Chrome V8< 13.6.86 類型混淆漏洞

【高危】Google Chrome V8< 13.6.86 類型混淆漏洞 漏洞描述 Google Chrome 是美國谷歌&#xff08;Google&#xff09;公司的一款Web瀏覽器&#xff0c;V8 是 Google 開發的高性能開源 JavaScript 和 WebAssembly 引擎&#xff0c;廣泛應用于 Chrome 瀏覽器和 Node.js 等環…

力扣經典算法篇-23-環形鏈表(哈希映射法,快慢指針法)

1、題干 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評測系統內部使用整數 pos 來表示鏈表尾連接到鏈表中的位置&…

HarmonyOS DevEco Studio 小技巧 42 - 鴻蒙單向數據流

在鴻蒙應用開發中&#xff0c;狀態管理是構建響應式界面的核心支柱&#xff0c;而 單向數據流&#xff08;Unidirectional Data Flow, UDF&#xff09;作為鴻蒙架構的重要設計原則&#xff0c;貫穿于組件通信、狀態更新和界面渲染的全流程。本文將結合鴻蒙 ArkUI 框架特性&…

【LeetCode 3136. 有效單詞】解析

目錄LeetCode中國站原文原始題目題目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;講解化繁為簡&#xff1a;如何優雅地“盤”邏輯判斷題第一部分&#xff1a;算法思想 —— “清單核對”與“一票否決”第二部分&#xff1a;代碼實現 —— 清晰…

前端面試專欄-算法篇:24. 算法時間與空間復雜度分析

&#x1f525; 歡迎來到前端面試通關指南專欄&#xff01;從js精講到框架到實戰&#xff0c;漸進系統化學習&#xff0c;堅持解鎖新技能&#xff0c;祝你輕松拿下心儀offer。 前端面試通關指南專欄主頁 前端面試專欄規劃詳情 算法時間與空間復雜度分析&#xff1a;從理論到實踐…

bash中||與的區別

在 Bash 中&#xff0c;|| 和 && 是兩種常用的邏輯操作符&#xff0c;用于控制命令的執行流程。它們的核心區別如下&#xff1a;1. ||&#xff08;邏輯 OR&#xff09; 作用&#xff1a;如果前一個命令失敗&#xff08;返回非零退出碼&#xff09;&#xff0c;則執行后…

OpenCV實現感知哈希(Perceptual Hash)算法的類cv::img_hash::PHash

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 PHash是OpenCV中實現感知哈希&#xff08;Perceptual Hash&#xff09;算法的類。該算法用于快速比較圖像的視覺相似性。它將圖像壓縮為一個簡短的…

數據庫遷移人大金倉數據庫

遷移前的準備工作 安裝官方的kdts和KStudio工具 方案說明 一、數據庫遷移&#xff1a;可以使用kdts進行數據庫的按照先遷移表結構、后數據的順序遷移&#xff08;kdts的使用可以參考官方文檔&#xff09; 其他參考文檔 人大金倉官網&#xff1a;https://download.kingbase…

uniapp 微信小程序Vue3項目使用內置組件movable-area封裝懸浮可拖拽按鈕(拖拽結束時自動吸附到最近的屏幕邊緣)

一、最終效果 二、具體詳情請看movable-area與movable-view官方文檔說明 三、參數配置 1、代碼示例 <TFab title"新建訂單" click"addOrder" /> // title:表按鈕文案 // addOrder:點擊按鈕事件四、組件源碼 <template><movable-area cl…

linux kernel為什么要用IS_ERR()宏來判斷指針合法性?

在 Linux 內核中&#xff0c;IS_ERR() 宏的設計與內核的錯誤處理機制和指針編碼規范密切相關&#xff0c;主要用于判斷一個“可能攜帶錯誤碼的指針”是否代表異常狀態。其核心目的是解決內核中指針返回值與錯誤碼的統一表示問題。以下從技術背景、設計邏輯和實際場景三個維度詳…

Cookie與Session:Web開發核心差異詳解

理解 Cookie 和 Session 的區別對于 Web 開發至關重要,它們雖然經常一起使用,但扮演著不同的角色。核心區別在于: Cookie:存儲在客戶端(用戶的瀏覽器)的數據片段。 Session:存儲在服務器端的數據結構,用于跟蹤特定用戶的狀態。 下面是詳細的對比: 特性CookieSession…

【相干、相參】 雷電名詞溯源

〇、廢話因緣 最近某些國產的微波制造公司總是提到一個概念【相干】【相參】【嚴格相參】等等概念層出不窮&#xff0c;讓人苦惱。 一、這玩意還是英文溯源吧 這幾個概念都聚焦在一個單詞【Coherence】&#xff1b;所以就是說兩個波形之間有某種聯系&#xff0c;不一定就是完全…

MYSQL練習2

一、對mydb11_stu庫進行查詢步驟1.創建mydb11_stu庫并使用2.創建score表和student表3.向兩張表插入數據student表&#xff1a;score表&#xff1a;4.完成查詢&#xff08;1&#xff09;分別查詢student表和score表的所有記錄&#xff08;2&#xff09;查詢student表的第2小到5條…

Spring Boot全局異常處理:打造堅如磐石的應用防線

引言在當今的軟件開發領域&#xff0c;隨著業務的日益復雜和系統規模的不斷擴大&#xff0c;Spring Boot 已成為 Java 開發中備受青睞的框架。它以其強大的功能、便捷的配置和快速的開發體驗&#xff0c;幫助開發者們高效地構建各種應用程序。在 Spring Boot 應用的開發過程中&…

藥品掛網價、藥品集采價格、藥品上市價格一鍵查詢!

相信許多人在查詢藥品價格時感到無從下手&#xff0c;那是因為對藥品定價機制和標準的不了解&#xff0c;醫院及藥店的藥品價格查詢可通過筆者之前的文章進行了解&#xff1a;如何查詢藥品的價格&#xff08;醫院&藥店&鄉鎮衛生院&#xff09;&#xff1f; 而今天筆者要…

【iOS】方法與消息底層分析

目錄 前言 方法的本質 向不同對象發送消息 發送實例方法 發送類方法 對象調用方法 實際執行是父類 向父類發送類方法 消息查找流程 開始查找 快速查找流程 慢速查找流程 動態方法決議 應用場景 優化方案 消息轉發機制 快速轉發流程 應用場景 慢速轉發流程 應…

如何通過 WebSocket 接口訂閱實時外匯行情數據(PHP 示例)

步驟 1&#xff1a;準備工作確保已安裝 PHP 和 Composer安裝 WebSocket 客戶端庫&#xff1a;composer require textalk/websocket步驟 2&#xff1a;編寫代碼訂閱行情以下是最簡可運行的 PHP 示例&#xff0c;訂閱 EUR/USD 的 1分鐘K線數據&#xff1a;<?phprequire vendo…

第十八篇 數據清洗:Python智能篩選與統計:從海量Excel數據中秒級挖掘,輔助決策!你的數據分析利器!

Excel 數據挖掘Excel篩選復雜&#xff0c;統計耗時&#xff0c;無法快速挖掘數據價值1.數據篩選核心&#xff1a;df.loc與df.iloc&#xff0c;精準定位你想要的數據1.1基于條件篩選&#xff1a;過濾數據中的不恰當因素1.2 多條件組合篩選&#xff1a;精確鎖定目標數據1.3字符串…

小木的機器學習日記——KNN

核心知識點總結與星級排序我為你梳理了這節課的精髓&#xff0c;并按照重要性進行了星級評定&#xff08;★★★★★為最高&#xff09;。★★★★★ 核心思想&#xff1a;回歸 (Regression) 到底是什么&#xff1f;是否關鍵&#xff1a;是必須了解&#xff1a;是必須記住&…