使用Python在PDF中绘制多种图形的操作示例

 更新时间:2025年11月23日 15:44:05   作者:大丸子  
在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重要,本文将基于免费的Free Spire.PDF for Python,一步步示范如何在同一页PDF中绘制多种常见图形,需要的朋友可以参考下

在进行 PDF 自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求。然而在许多实际业务场景中,能够在 PDF 中灵活绘制图形同样至关重要。例如技术报告需要示意线条和流程节点,简易统计图需要用到扇形或色块,而某些表单或自动化文档则需要定制背景区域、标注或分隔元素。

Python 本身的图形绘制并不直接面向 PDF,但借助专业的 PDF 库,我们可以高效完成各种图形的渲染。本文将基于免费的 Free Spire.PDF for Python,一步步示范如何在同一页 PDF 中绘制多种常见图形,包括线条、扇形、矩形(含渐变)、椭圆等。

1. 环境准备

通过 pip 安装:

pip install spire.pdf.free

Spire.PDF 提供 PdfDocumentPdfPageBasePdfPenPdfBrush 等常用对象,能轻松实现绘图、文本、图像等内容的组合输出。

2. 创建 PDF 文档与页面

首先创建文档、添加页面,并保存当前画布状态(以便在绘制完一组图形后恢复环境):

from spire.pdf.common import *
from spire.pdf import *

# 创建 PDF 文档
doc = PdfDocument()
page = doc.Pages.Add()

# 保存绘图状态
state = page.Canvas.Save()

3. 在 PDF 中绘制不同类型的图形

以下代码将在一个 PDF 页面中 按顺序分段绘制所有图形

Python 在 PDF 页面绘制图形示例代码

from spire.pdf import *

# 创建 PDF 文档
doc = PdfDocument()
page = doc.Pages.Add()

# 保存绘图环境
state = page.Canvas.Save()

# ========== 1. 绘制线条(实线 + 虚线) ==========
pen1 = PdfPen(PdfRGBColor(Color.get_SteelBlue()), 2.2)
x, y = 50.0, 40.0
length = 350.0

# 实线
page.Canvas.DrawLine(pen1, x, y, x + length, y)

# 虚线线条
y += 25.0
pen1.DashStyle = PdfDashStyle.DashDot
pen1.DashPattern = [2.0, 3.0, 1.0]
page.Canvas.DrawLine(pen1, x, y, x + length, y)


# ========== 2. 绘制三个饼图扇形 ==========
pen2 = PdfPen(PdfRGBColor(Color.get_Maroon()), 1.8)

# 扇形 1
page.Canvas.DrawPie(pen2, 40.0, 90.0, 110.0, 110.0, 270.0, 230.0)

# 扇形 2
page.Canvas.DrawPie(pen2, 170.0, 90.0, 110.0, 110.0, 360.0, 260.0)

# 扇形 3
page.Canvas.DrawPie(pen2, 300.0, 90.0, 110.0, 110.0, 180.0, 330.0)


# ========== 3. 矩形(边框、线性渐变、放射渐变) ==========
# 空心矩形
pen3 = PdfPen(PdfRGBColor(Color.get_SaddleBrown()), 2.0)
page.Canvas.DrawRectangle(
    pen3,
    RectangleF(PointF(40.0, 220.0), SizeF(130.0, 95.0))
)

# 线性渐变矩形
linear = PdfLinearGradientBrush(
    PointF(200.0, 220.0),
    PointF(320.0, 300.0),
    PdfRGBColor(Color.get_LimeGreen()),
    PdfRGBColor(Color.get_Goldenrod())
)
page.Canvas.DrawRectangle(
    linear,
    RectangleF(PointF(200.0, 220.0), SizeF(130.0, 95.0))
)

# 放射渐变矩形
radial = PdfRadialGradientBrush(
    PointF(360.0, 220.0), 90.0,
    PointF(470.0, 300.0), 90.0,
    PdfRGBColor(Color.get_OrangeRed()),
    PdfRGBColor(Color.get_DodgerBlue())
)
page.Canvas.DrawRectangle(
    radial,
    RectangleF(PointF(360.0, 220.0), SizeF(130.0, 95.0))
)


# ========== 4. 椭圆(空心 + 实心) ==========
pen4 = PdfPens.get_CadetBlue()

# 空心椭圆
page.Canvas.DrawEllipse(pen4, 60.0, 350.0, 130.0, 85.0)

# 实心椭圆
brush = PdfSolidBrush(PdfRGBColor(Color.get_CadetBlue()))
page.Canvas.DrawEllipse(brush, 230.0, 350.0, 130.0, 85.0)


# 恢复状态
page.Canvas.Restore(state)

# 保存文件
doc.SaveToFile("Drawing_Shapes.pdf")
doc.Close()
doc.Dispose()

绘制结果预览

4. 关键绘图对象与概念解析

为了更好地理解这些图形的绘制机制,这里对关键对象进行说明。

(1)PdfPen:绘制线条、边框的核心工具

PdfPen 决定线条的颜色、粗细、样式:

  • PdfPen(color, width):创建笔对象
  • pen.DashStyle:虚线、点线等
  • pen.DashPattern:自定义线段 / 间隔模式

在工程制图或示意图中十分常用。

(2)PdfBrush:绘制填充内容

  • PdfSolidBrush —— 实心颜色
  • PdfLinearGradientBrush —— 线性渐变(适合高亮效果)
  • PdfRadialGradientBrush —— 放射渐变(常用于聚焦或球形效果)

这类 Brush 在制作图表、色块、背景强调时非常好用。

(3)Canvas:图形绘制的承载对象

常用方法包括:

  • DrawLine()
  • DrawPie()
  • DrawRectangle()
  • DrawEllipse()

所有图形绘制操作都需要通过 page.Canvas 执行。

5. 典型应用场景

(1)自动生成分析报告中的图形示意

无需依赖 Excel 或图表工具,直接在 PDF 输出关键图形。

(2)制作数据可视化的简图(轻量级)

例如:

  • 仪表盘的小型饼图
  • 简单色块图

适用于快速展示。

(3)PDF 表单的界面元素绘制

矩形、线条、渐变能用于:

  • 字段背景
  • 模块分割线
  • 输入区域框架

让 PDF 表单更美观。

6. 总结

通过本文的示例,你已经了解如何使用 Spire.PDF for Python 在一页 PDF 中绘制多类图形,并掌握了 PdfPenPdfBrush 及多种渐变画刷的基本用法。这些绘图能力不仅能用于生成示意线条、图表元素和背景色块,也能扩展到更加复杂的文档可视化需求。

借助这些核心对象,你可以自由组合线条、填充、渐变和形状,构建具有良好视觉结构的自动化 PDF 内容。如果需要进一步增强效果,还可以加入文本标注、图像、坐标系或自定义多边形等元素,使文档更加完整专业。

以上就是使用Python在PDF中绘制多种图形的操作示例的详细内容,更多关于Python PDF绘制多种图形的资料请关注脚本之家其它相关文章!

相关文章

  • Python的numpy库下的几个小函数的用法(小结)

    Python的numpy库下的几个小函数的用法(小结)

    这篇文章主要介绍了Python的numpy库下的几个小函数的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python使用Tesseract库识别验证

    python使用Tesseract库识别验证

    这篇文章主要为大家详细介绍了python使用Tesseract库识别验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python实现ModBusRTU客户端方式

    python实现ModBusRTU客户端方式

    这篇文章主要介绍了python实现ModBusRTU客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python 操作SQLite数据库详情

    Python 操作SQLite数据库详情

    这篇文章主要介绍了Python 操作SQLite数据库,SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中,下面来看看详细内容,需要的朋友可以参考一下
    2021-11-11
  • Python之打印日志库(logging)

    Python之打印日志库(logging)

    这篇文章主要介绍了Python之打印日志库(logging),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • pycharm指定python路径过程详解

    pycharm指定python路径过程详解

    这篇文章主要介绍了Pycharm指定python路径过程图解,文中通过示例代码介绍的非常详细,对大家的学习具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • 10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径

    10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径

    这篇文章主要介绍了10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • pytorch+torchvision+python版本对应及环境安装

    pytorch+torchvision+python版本对应及环境安装

    本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,以确保与PyTorch兼容,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • python3 MKL库 安装使用教程

    python3 MKL库 安装使用教程

    这篇文章主要介绍了python3 MKL库 安装使用教程的相关资料,需要的朋友可以参考下
    2023-11-11
  • Pytorch 解决自定义子Module .cuda() tensor失败的问题

    Pytorch 解决自定义子Module .cuda() tensor失败的问题

    这篇文章主要介绍了Pytorch 解决自定义子Module .cuda() tensor失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论