一文詳解如何使用Python向PDF精確添加文本
PDF 文檔的版式特性使其適用于輸出不可變格式的報(bào)告與合同。但若要在此類文檔中插入或修改文本,常規(guī)方式難以實(shí)現(xiàn)。借助Python,我們可以高效地向 PDF 添加文本,實(shí)現(xiàn)從文檔生成到內(nèi)容管理的自動(dòng)化流程。
本文將從以下方面介紹Python實(shí)現(xiàn)PDF中文本的添加:
本文使用的方法需要用到免費(fèi)的Free Spire.PDF for Python,可通過pip安裝:
pip install spire.pdf.free
新建PDF并添加段落文本
在構(gòu)建系統(tǒng)報(bào)告或生成模板文檔時(shí),通常需要從空白頁插入一段段文本,保持排版一致性。
from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \
PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment
# 創(chuàng)建新的PDF文檔并添加頁面
pdf = PdfDocument()
page = pdf.Pages.Add()
# 待插入的文本內(nèi)容
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.")
# 設(shè)置字體、畫刷(顏色)和排版區(qū)域
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)
# 添加文字內(nèi)容
page.Canvas.DrawString(text, font, brush, layout_area, string_format, False)
# 保存并關(guān)閉
pdf.SaveToFile("output/new.pdf")
pdf.Close()
技術(shù)細(xì)節(jié)說明:
PdfTrueTypeFont可嵌入外部字體文件,適用于需要控制字體兼容性的場(chǎng)景;RectangleF定義文本區(qū)域邊界(支持自定義段落框);DrawString()支持超出區(qū)域自動(dòng)換行;- 使用
PdfStringFormat設(shè)定水平方向與垂直方向的對(duì)齊方式。
生成的PDF文檔:

向現(xiàn)有PDF中插入文本內(nèi)容
當(dāng)你已有一份PDF文件,但希望在某一頁添加標(biāo)記或文字說明,例如審批標(biāo)語、狀態(tài)說明等,可以使用如下方式:
from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfFont, PdfFontFamily
# 加載已有PDF文檔
pdf = PdfDocument()
pdf.LoadFromFile("PDF.pdf")
page = pdf.Pages[0]
# 設(shè)置字體、顏色和插入位置
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)
# 保存結(jié)果
pdf.SaveToFile("output/ModifiedPDF.pdf")
pdf.Close()
技術(shù)細(xì)節(jié)說明:
PdfFontFamily.TimesRoman屬于 PDF 標(biāo)準(zhǔn)內(nèi)置字體(無需嵌入);- 坐標(biāo)
PointF(x, y)單位為磅(1 pt ≈ 0.3528 mm),以頁面左上角為 (0,0); - 無需設(shè)置區(qū)域框時(shí),適用于短文本、標(biāo)簽插入、動(dòng)態(tài)蓋章等場(chǎng)景。
修改的PDF文檔:

復(fù)雜格式設(shè)置:添加透明旋轉(zhuǎn)水印文本
在文檔審閱或內(nèi)部版本發(fā)布場(chǎng)景中,常見的做法是添加一個(gè)帶透明度與旋轉(zhuǎn)角度的水印文字,以提示機(jī)密性或防止誤傳播。Spire.PDF 提供了畫布狀態(tài)保存、旋轉(zhuǎn)、透明度控制等接口,可用于實(shí)現(xiàn)這種復(fù)雜的格式需求。
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]
# 設(shè)置水印文本內(nèi)容
text = "Internal Use Only"
# 設(shè)置字體樣式與大小
font = PdfTrueTypeFont("Arial", 40.0, PdfFontStyle.Bold, True)
# 設(shè)置畫刷顏色為深紅色
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkRed()))
# 測(cè)量文本大小以便居中放置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2
# 保存當(dāng)前畫布狀態(tài)
state = page.Canvas.Save()
# 設(shè)置透明度
page.Canvas.SetTransparency(0.3)
# 平移至文本中心位置
page.Canvas.TranslateTransform(x + size.Width / 2, y + size.Height / 2)
# 旋轉(zhuǎn)文本(-45度斜著顯示)
page.Canvas.RotateTransform(-45.0)
# 繪制文本水?。ㄗ笊辖菫槠鹗键c(diǎn),因此需偏移)
page.Canvas.DrawString(text, font, brush, PointF(-size.Width / 2, -size.Height / 2))
# 恢復(fù)畫布狀態(tài)
page.Canvas.Restore(state)
# 保存文檔
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()
技術(shù)細(xì)節(jié)說明:
- 使用
SetTransparency(0.3)設(shè)置文本透明度,增強(qiáng)水印效果但不遮擋內(nèi)容; TranslateTransform()將畫布原點(diǎn)移動(dòng)至文本中心;RotateTransform(-45)實(shí)現(xiàn)對(duì)角線旋轉(zhuǎn),常用于“CONFIDENTIAL”或“DRAFT”類水??;- 水印文本使用
DrawString()繪制,PointF(-size.Width / 2, -size.Height / 2)保證以中心為參考點(diǎn); - 通過
Canvas.Save()與Canvas.Restore()管理局部畫布狀態(tài),避免影響頁面中其他元素。
修改后的PDF文檔:

總結(jié)
通過 Spire.PDF for Python,你可以使用簡(jiǎn)潔的 Python 代碼在 PDF 中添加各類文本,功能包括:
| 功能項(xiàng) | 方法與說明 |
|---|---|
| 從零創(chuàng)建文檔 | PdfDocument.Pages.Add() + DrawString() |
| 插入文本到現(xiàn)有文檔 | LoadFromFile() + PointF 定位文本插入點(diǎn) |
| 控制排版樣式 | 使用 RectangleF + PdfStringFormat 控制對(duì)齊與區(qū)域 |
| 行文本支持 | 文本中添加 \n,自動(dòng)換行渲染 |
| 字體與顏色控制 | 支持 TrueType 與 標(biāo)準(zhǔn)字體,自定義顏色 RGB |
這些操作覆蓋了 PDF 文本添加的主要應(yīng)用場(chǎng)景,從文檔批量生成到人工標(biāo)注支持,適合用于自動(dòng)歸檔、審批流程、內(nèi)容輸出等業(yè)務(wù)場(chǎng)景。
到此這篇關(guān)于一文詳解如何使用Python向PDF精確添加文本的文章就介紹到這了,更多相關(guān)Python PDF添加文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3 面向?qū)ο骭_類的內(nèi)置屬性與方法的實(shí)例代碼
這篇文章主要介紹了python3 面向?qū)ο骭_類的內(nèi)置屬性與方法的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
python實(shí)現(xiàn)多人聊天服務(wù)器以及客戶端
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多人聊天服務(wù)器以及客戶端,帶圖形化界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
python GUI庫(kù)圖形界面開發(fā)之PyQt5 UI主線程與耗時(shí)線程分離詳細(xì)方法實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5 UI主線程與耗時(shí)線程分離詳細(xì)方法實(shí)例,需要的朋友可以參考下2020-02-02
MediaPipe API實(shí)現(xiàn)骨骼識(shí)別功能分步講解流程
MediaPipe是用于構(gòu)建多模態(tài)(例如視頻、音頻或任何時(shí)間序列數(shù)據(jù))、跨平臺(tái)(即eAndroid、IOS、web、邊緣設(shè)備)應(yīng)用ML管道的框架。這篇文章主要介紹了MediaPipe API實(shí)現(xiàn)骨骼識(shí)別功能分步流程2022-09-09
python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過采樣和欠采樣)
今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過采樣和欠采樣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
使用Django開發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查
這篇文章主要介紹了使用Django開發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

