You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在PDF文件中绘制矩形等形状?

在现有PDF中绘制形状的修改方案

你当前使用的reportlab的canvas组件已内置形状绘制能力,仅需要在can.save()执行前添加对应形状的绘制代码即可实现需求,无需调整现有代码的整体流程。

常用绘制API说明

  • 绘制矩形:调用can.rect(x, y, width, height, stroke=1, fill=0),参数说明:
    • x、y:矩形左下角的坐标,和你绘制文本的坐标体系一致
    • width、height:矩形的宽度和高度
    • stroke:是否显示边框,1为显示,0为隐藏
    • fill:是否填充矩形内部,1为填充,0为不填充
  • 配置样式:可以在绘制形状前调用以下方法调整外观:
    • can.setLineWidth(2):设置边框粗细为2pt
    • can.setStrokeColorRGB(1, 0, 0):设置边框颜色为红色,三个参数分别对应RGB通道的0-1取值
    • can.setFillColorRGB(0, 0, 1):设置填充颜色为蓝色,可额外加alpha参数设置透明度
  • 其他常用形状绘制:
    • 绘制直线:can.line(x1, y1, x2, y2),绘制从(x1,y1)到(x2,y2)的直线
    • 绘制圆形:can.circle(x, y, r, stroke=1, fill=0),x、y是圆心坐标,r是半径

完整修改后代码示例(适配你原有Python2环境)

# 给现有PDF添加文本和矩形
from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
# 原有添加文本逻辑
TXT="Sample Text"
can.drawString(300, 70, TXT) 

# 新增:绘制矩形示例
can.setLineWidth(2) 
can.setStrokeColorRGB(1, 0, 0) 
can.setFillColorRGB(0, 1, 0, alpha=0.3) 
# 左下角坐标(290,60),宽100高30,带边框和填充
can.rect(290, 60, 100, 30, stroke=1, fill=1) 

can.save()

# 后续原有合并逻辑不变
packet.seek(0)
new_pdf = PdfFileReader(packet)
existing_pdf = PdfFileReader(file("original.pdf", "rb"))
output = PdfFileWriter()
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
outputStream = file("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()

Python3适配说明

如果使用Python3环境,仅需做以下修改即可:

  • 将import StringIO替换为import io
  • 将packet = StringIO.StringIO()替换为packet = io.BytesIO()
  • 将所有file()文件读写方法替换为open()
  • 建议将停止维护的pyPdf替换为PyPDF2,导入语句改为from PyPDF2 import PdfFileWriter, PdfFileReader,其余调用逻辑不变。

内容的提问来源于stack exchange,提问作者BSFU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:30:00