当前位置:

首页 > 编程开发 > 使用 Python 在 PDF 中绘制线条、矩形和自定义图形

使用 Python 在 PDF 中绘制线条、矩形和自定义图形

日常工作里,PDF 是文档分发和存档的“铁打”格式——跨平台打开,排版不乱。但光有文字往往不够,很多时候需要在文档里加一些视觉元素:比如画条分隔线、标个矩形区域、加个形状装饰。不管是给报表做区域划分,还是给设计稿画原型元素,编程绘制图形都是一项基础又实用的能力。 这篇就来聊聊,怎么用 Python

日常工作里,PDF 是文档分发和存档的“铁打”格式——跨平台打开,排版不乱。但光有文字往往不够,很多时候需要在文档里加一些视觉元素:比如画条分隔线、标个矩形区域、加个形状装饰。不管是给报表做区域划分,还是给设计稿画原型元素,编程绘制图形都是一项基础又实用的能力。

这篇就来聊聊,怎么用 Python 在 PDF 里画出常见的图形:直线、矩形、椭圆,还有更复杂的自定义路径。

为什么需要编程绘制图形

通过代码在 PDF 里画图,和手动操作比起来,有几个明显的好处:

  • 精确控制 — 坐标、尺寸、颜色、透明度都能用参数精确定义,不用怕手抖拖歪了。
  • 批量生成 — 配合循环和条件判断,一次性生成大量带图形的文档,效率拉满。
  • 动态内容 — 根据数据源自动调整图形的位置和样式,做报表和模板特别顺手。

环境准备

这里用 Spire.PDF 这个库来创建 PDF 和画图。安装很简单:

 复制代码pip install Spire.PDF

这个库覆盖了 PDF 的完整操作,包括页面管理、图形绘制、文字渲染,该有的都有。

绘制基本图形

Spire.PDF 通过 PdfCanvas 对象提供了一系列绘制方法,所有绘图都在页面的画布(Canvas)上进行。画布用坐标系定位,原点在页面左下角,单位是点(1 点 = 1/72 英寸)。

绘制直线

画直线是最基本的操作,用 DrawLine() 方法指定起点和终点坐标就行。

 复制代码from spire.pdf.common import *
from spire.pdf import *# 创建 PDF 文档
doc = PdfDocument()
page = doc.Pages.Add()# 保存画布状态
state = page.Canvas.Sa ve()# 创建画笔(黑色,线宽 1 点)
pen = PdfPen(PdfRGBColor(Color.get_Black()), 1.0)# 绘制一条从 (50, 100) 到 (400, 100) 的水平线
page.Canvas.DrawLine(pen, 50.0, 100.0, 400.0, 100.0)# 绘制一条从 (50, 100) 到 (225, 300) 的斜线
pen2 = PdfPen(PdfRGBColor(Color.get_Red()), 1.0)
page.Canvas.DrawLine(pen2, 50.0, 100.0, 225.0, 300.0)# 恢复画布状态
page.Canvas.Restore(state)# 保存文档
doc.Sa veToFile("DrawLines.pdf")
doc.Close()

PdfPen 是画线条的核心工具,决定了线条的颜色和宽度。DrawLine() 前两个参数是起点坐标,后两个是终点坐标。一个小建议:每次绘制前后用 Sa ve()Restore() 保存和恢复画布状态,这样能避免后续操作影响之前的绘图设置,算是个好习惯。

绘制虚线

实际开发中,虚线常用来分隔区域或标注范围。设置画笔的 DashStyleDashPattern 属性就能搞定。

 复制代码# 创建红色画笔,线宽 3 点
pen = PdfPen(PdfRGBColor(Color.get_Red()), 3.0)# 设置虚线样式
pen.DashStyle = PdfDashStyle.Dash
pen.DashPattern = [1, 4, 1]  # 虚线模式:1点实线、4点空白、1点实线# 绘制虚线
page.Canvas.DrawLine(pen, 50.0, 200.0, 400.0, 200.0)

PdfDashStyle 枚举提供了预定义的虚线样式(Dash、Dot、DashDot 等),而 DashPattern 允许自定义更精细的虚线模式——数组里的数字交替表示实线和空白的长度,灵活度很高。

绘制矩形

矩形是文档标注里最常用的形状之一,可以只画边框,也可以带填充色。

 复制代码# 绘制矩形边框
pen = PdfPen(PdfRGBColor(Color.get_Black()), 0.5)
# 参数:画笔、x、y、宽度、高度
page.Canvas.DrawRectangle(pen, 100.0, 150.0, 200.0, 120.0)# 绘制带填充色的矩形
pen2 = PdfPen(PdfRGBColor(Color.get_Black()), 1.0)
brush = PdfSolidBrush(PdfRGBColor(Color.get_OrangeRed()))
rect = RectangleF(PointF(100.0, 300.0), SizeF(200.0, 120.0))
page.Canvas.DrawRectangle(pen2, brush, rect)

DrawRectangle() 有两种常见用法:一种只画边框,接受画笔和位置参数;另一种同时画填充色,需要额外传入 PdfBrush 对象。PdfSolidBrush 是最常用的填充画刷,用单一颜色填满图形内部。

绘制椭圆

椭圆和圆形在流程图的辅助标注里比较常见,通过 DrawEllipse() 方法实现。

 复制代码# 绘制椭圆边框(以矩形边界定义椭圆范围)
pen = PdfPen(PdfRGBColor(Color.get_CadetBlue()), 1.0)
# 参数定义外接矩形的范围,椭圆会被绘制在该矩形内部
page.Canvas.DrawEllipse(pen, 220.0, 320.0, 100.0, 90.0)# 绘制填充椭圆
brush = PdfSolidBrush(PdfRGBColor(Color.get_CadetBlue()))
page.Canvas.DrawEllipse(brush, 380.0, 325.0, 80.0, 80.0)# 第三个和第四个参数分别控制水平半径和垂直半径
# 当两者相等时即为正圆
page.Canvas.DrawEllipse(brush, 100.0, 450.0, 50.0, 50.0)  # 这行会绘制一个正圆

椭圆本质上是由外接矩形定义的:外接矩形越接近正方形,椭圆就越接近正圆。这个思路和 HTML Canvas 里的椭圆绘制是相通的。

绘制自定义路径

对于五角星、多边形这类复杂形状,可以用 PdfPath 对象组合多条线段,再通过 DrawPath() 方法统一绘制。

 复制代码import math# 计算五边形的五个顶点
points = [None] * 5
for i in range(5):
    x = float(math.cos(i * 2 * math.pi / 5))
    y = float(math.sin(i * 2 * math.pi / 5))
    points[i] = PointF(x, y)# 创建路径并添加线段
path = PdfPath()
path.AddLine(points[2], points[0])
path.AddLine(points[0], points[3])
path.AddLine(points[3], points[1])
path.AddLine(points[1], points[4])
path.AddLine(points[4], points[2])# 绘制路径轮廓
pen = PdfPen(PdfRGBColor(Color.get_DeepSkyBlue()), 0.02)
page.Canvas.ScaleTransform(50.0, 50.0)
page.Canvas.TranslateTransform(5.0, 5.0)
page.Canvas.DrawPath(pen, path)# 绘制填充路径
brush = PdfSolidBrush(PdfRGBColor(Color.get_DeepSkyBlue()))
page.Canvas.DrawPath(pen, brush, path)

PdfPath 支持分段构建图形,通过 AddLine()AddArc()AddCurve() 等方法逐步组装。ScaleTransform()TranslateTransform() 用来对坐标系统进行缩放和平移,方便在不同位置画出相同形状。

控制图形透明度

透明度的控制能让图形叠加时产生更丰富的视觉效果。通过 SetTransparency() 方法可以设置后续绘制的透明度。

 复制代码# 设置透明度(参数范围 0.0~1.0,0.0 完全透明,1.0 不透明)
page.Canvas.SetTransparency(0.5, 0.5)# 在此之后绘制的图形将以 50% 透明度显示
pen = PdfPen(PdfRGBColor(Color.get_Black()), 1.0)
brush = PdfSolidBrush(PdfRGBColor(Color.get_Red()))
page.Canvas.DrawRectangle(pen, brush, RectangleF(PointF(200.0, 300.0), SizeF(200.0, 100.0)))# 设置不同的透明度
page.Canvas.SetTransparency(0.2, 0.2)
page.Canvas.DrawRectangle(pen, brush, RectangleF(PointF(300.0, 250.0), SizeF(200.0, 100.0)))

透明度在多层图形叠加时特别有用,比如在产品设计稿里区分不同层级的标注区域,效果很直观。

完整示例:综合绘制多种图形

下面这段代码把前面介绍的各种图形绘制操作整合到一个文档里,生成一个包含线条、矩形、椭圆和自定义路径的综合示例。

 复制代码from spire.pdf.common import *
from spire.pdf import *
import math# 创建文档
doc = PdfDocument()
page = doc.Pages.Add()# 保存画布状态
state = page.Canvas.Sa ve()# 1. 绘制直线
pen = PdfPen(PdfRGBColor(Color.get_Black()), 1.0)
page.Canvas.DrawLine(pen, 50.0, 50.0, 200.0, 50.0)# 2. 绘制虚线
pen_dash = PdfPen(PdfRGBColor(Color.get_Red()), 2.0)
pen_dash.DashStyle = PdfDashStyle.Dash
page.Canvas.DrawLine(pen_dash, 50.0, 80.0, 200.0, 80.0)# 3. 绘制矩形边框
pen_rect = PdfPen(PdfRGBColor(Color.get_Blue()), 1.0)
page.Canvas.DrawRectangle(pen_rect, 50.0, 120.0, 150.0, 100.0)# 4. 绘制填充矩形
pen_fill = PdfPen(PdfRGBColor(Color.get_Black()), 0.5)
brush_fill = PdfSolidBrush(PdfRGBColor(Color.get_OrangeRed()))
page.Canvas.DrawRectangle(pen_fill, brush_fill, 
    RectangleF(PointF(50.0, 250.0), SizeF(150.0, 100.0)))# 5. 绘制椭圆
brush_ellipse = PdfSolidBrush(PdfRGBColor(Color.get_CadetBlue()))
page.Canvas.DrawEllipse(brush_ellipse, 300.0, 120.0, 100.0, 80.0)# 6. 绘制正圆
page.Canvas.DrawEllipse(brush_ellipse, 300.0, 250.0, 60.0, 60.0)# 恢复画布状态
page.Canvas.Restore(state)# 保存
doc.Sa veToFile("ShapesDemo.pdf")
doc.Close()

输出文档预览:

总结

这篇介绍了用 Python 在 PDF 文档里绘制图形的基本方法,覆盖了直线、虚线、矩形、椭圆和自定义路径这些常见图形元素。在实际开发中,这些基础绘图能力可以组合应用到很多场景里——比如在报表里画表格线框、在设计稿里加标注框、在证书模板里加装饰线条,等等。

掌握了这些基础技巧之后,还可以继续探索更高级的绘图能力,比如渐变填充、图形变换和图层管理,来满足更复杂的文档处理需求。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

麒麟OS如何查看Python进程的运行状态
麒麟OS如何查看Python进程的运行状态

要想确认麒麟OS中Python程序的运行状态以及资源占用情况,我们可以这样做:用ps -ef | grep python来筛选进程;通过top命令,按P键排序查看实时负载;使用pgrep -f "script.py"精准获取PID;借助lsof -p PID验证文件打开状态。另外,还可以结合syst

Python在Debian上如何配置SSL证书
Python在Debian上如何配置SSL证书

在Debian系统上配置SSL证书通常涉及以下几个步骤:安装Web服务器:首先,你需要一个Web服务器,比如Apache或Nginx。这里以Apache为例。sudo apt updatesudo apt install apache2获取SSL证书:你可以从Let’s Encrypt免费获取SSL

统信UOS怎么安装Python开发环境
统信UOS怎么安装Python开发环境

要想让Python项目在统信UOS上正常运行,得先安装python3、python3-pip、python3-venv、python3-dev以及build-essential等组件。具体操作就是执行sudo apt install命令来一步到位完成安装,同时别忘了配置清华镜像源来给pip加速哦。在

纯Python方案实现中英文全文搜索
纯Python方案实现中英文全文搜索

在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。从简单的来说,搜索功能确实很简单,一个简单的select语句就可以实现数据的搜索。而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。对于简单的搜索功能来说,一个s

Mac如何取消通过Python脚本运行的关机程序
Mac如何取消通过Python脚本运行的关机程序

立即在终端输入sudo shutdown -c取消倒计时关机,成功后显示“Shutdown cancelled”;若存在pmset重复任务,需再执行sudo pmset repeat cancel清除。Mac因Python脚本执行了os.system("sudo shutdown -h +10")或

Pythonasyncio异步并发与多固定出口IP调度实战
Pythonasyncio异步并发与多固定出口IP调度实战

之前写过一篇同步场景下用 Python 管理多个固定出口 IP 的实践(ExitPool + requests/httpx),覆盖了健康检查、故障转移和连接池复用。但在实际业务中,越来越多的场景用 asyncio 做高并发采集或批量接口调用——异步事件循环下多出口的管理方式和同步场景完全不同:单线程

Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换
Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换

写在前面:为什么静态出口 IP 不是"买了就行"不少团队在引入静态出口 IP 产品时,第一反应往往是:“地址配上去,这事就算完了。”可真到了真实业务里,静态出口 IP 真正能体现价值的地方,往往不在分配这一步,而在分配之后怎么管:地址有没有漂移,质量是否达标,某一条线路突然不可用时怎么切换,连接层又

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。