一文詳解如何使用Python向PDF精確添加文本
PDF 文檔的版式特性使其適用于輸出不可變格式的報告與合同。但若要在此類文檔中插入或修改文本,常規(guī)方式難以實現(xiàn)。借助Python,我們可以高效地向 PDF 添加文本,實現(xiàn)從文檔生成到內(nèi)容管理的自動化流程。
本文將從以下方面介紹Python實現(xiàn)PDF中文本的添加:
本文使用的方法需要用到免費的Free Spire.PDF for Python,可通過pip安裝:
pip install spire.pdf.free
新建PDF并添加段落文本
在構(gòu)建系統(tǒng)報告或生成模板文檔時,通常需要從空白頁插入一段段文本,保持排版一致性。
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ù)細節(jié)說明:
PdfTrueTypeFont
可嵌入外部字體文件,適用于需要控制字體兼容性的場景;RectangleF
定義文本區(qū)域邊界(支持自定義段落框);DrawString()
支持超出區(qū)域自動換行;- 使用
PdfStringFormat
設(shè)定水平方向與垂直方向的對齊方式。
生成的PDF文檔:
向現(xiàn)有PDF中插入文本內(nèi)容
當你已有一份PDF文件,但希望在某一頁添加標記或文字說明,例如審批標語、狀態(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ù)細節(jié)說明:
PdfFontFamily.TimesRoman
屬于 PDF 標準內(nèi)置字體(無需嵌入);- 坐標
PointF(x, y)
單位為磅(1 pt ≈ 0.3528 mm),以頁面左上角為 (0,0); - 無需設(shè)置區(qū)域框時,適用于短文本、標簽插入、動態(tài)蓋章等場景。
修改的PDF文檔:
復(fù)雜格式設(shè)置:添加透明旋轉(zhuǎn)水印文本
在文檔審閱或內(nèi)部版本發(fā)布場景中,常見的做法是添加一個帶透明度與旋轉(zhuǎn)角度的水印文字,以提示機密性或防止誤傳播。Spire.PDF 提供了畫布狀態(tài)保存、旋轉(zhuǎn)、透明度控制等接口,可用于實現(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())) # 測量文本大小以便居中放置 size = font.MeasureString(text) x = (page.Canvas.ClientSize.Width - size.Width) / 2 y = (page.Canvas.ClientSize.Height - size.Height) / 2 # 保存當前畫布狀態(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,因此需偏移) 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ù)細節(jié)說明:
- 使用
SetTransparency(0.3)
設(shè)置文本透明度,增強水印效果但不遮擋內(nèi)容; TranslateTransform()
將畫布原點移動至文本中心;RotateTransform(-45)
實現(xiàn)對角線旋轉(zhuǎn),常用于“CONFIDENTIAL”或“DRAFT”類水?。?/li>- 水印文本使用
DrawString()
繪制,PointF(-size.Width / 2, -size.Height / 2)
保證以中心為參考點; - 通過
Canvas.Save()
與Canvas.Restore()
管理局部畫布狀態(tài),避免影響頁面中其他元素。
修改后的PDF文檔:
總結(jié)
通過 Spire.PDF for Python,你可以使用簡潔的 Python 代碼在 PDF 中添加各類文本,功能包括:
功能項 | 方法與說明 |
---|---|
從零創(chuàng)建文檔 | PdfDocument.Pages.Add() + DrawString() |
插入文本到現(xiàn)有文檔 | LoadFromFile() + PointF 定位文本插入點 |
控制排版樣式 | 使用 RectangleF + PdfStringFormat 控制對齊與區(qū)域 |
行文本支持 | 文本中添加 \n,自動換行渲染 |
字體與顏色控制 | 支持 TrueType 與 標準字體,自定義顏色 RGB |
這些操作覆蓋了 PDF 文本添加的主要應(yīng)用場景,從文檔批量生成到人工標注支持,適合用于自動歸檔、審批流程、內(nèi)容輸出等業(yè)務(wù)場景。
到此這篇關(guān)于一文詳解如何使用Python向PDF精確添加文本的文章就介紹到這了,更多相關(guān)Python PDF添加文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3 面向?qū)ο骭_類的內(nèi)置屬性與方法的實例代碼
這篇文章主要介紹了python3 面向?qū)ο骭_類的內(nèi)置屬性與方法的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11python實現(xiàn)多人聊天服務(wù)器以及客戶端
這篇文章主要為大家詳細介紹了python實現(xiàn)多人聊天服務(wù)器以及客戶端,帶圖形化界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07python GUI庫圖形界面開發(fā)之PyQt5 UI主線程與耗時線程分離詳細方法實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5 UI主線程與耗時線程分離詳細方法實例,需要的朋友可以參考下2020-02-02MediaPipe API實現(xiàn)骨骼識別功能分步講解流程
MediaPipe是用于構(gòu)建多模態(tài)(例如視頻、音頻或任何時間序列數(shù)據(jù))、跨平臺(即eAndroid、IOS、web、邊緣設(shè)備)應(yīng)用ML管道的框架。這篇文章主要介紹了MediaPipe API實現(xiàn)骨骼識別功能分步流程2022-09-09python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過采樣和欠采樣)
今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過采樣和欠采樣),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02使用Django開發(fā)簡單接口實現(xiàn)文章增刪改查
這篇文章主要介紹了使用Django開發(fā)簡單接口實現(xiàn)文章增刪改查,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05