python创建pdf水印,希望根据文本长度调整水印字体大小,避免超出页面

为了根据文本长度动态调整水印字体大小,可以先测量文本长度,然后根据页面宽度和高度动态计算合适的字体大小。以下是修改后的代码:

python 复制代码
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib import colors

def create_watermark(watermark_text, watermark_pdf_path):
    chinese_font_path = "MSYH.TTC"  # 替换为中文字体路径
    pdfmetrics.registerFont(TTFont("微软雅黑", chinese_font_path))  # 注册字体
    c = canvas.Canvas(watermark_pdf_path, pagesize=letter)
    width, height = letter

    # Function to calculate font size based on text length and page size
    def calculate_font_size(text, max_width, max_height):
        # Start with a large font size
        font_size = 60
        while font_size > 10:  # Minimum font size to avoid being too small
            c.setFont("微软雅黑", font_size)
            text_width = c.stringWidth(text, "微软雅黑", font_size)
            if text_width <= max_width * 0.8:  # Allow some margin
                return font_size
            font_size -= 2  # Decrease font size step by step
        return font_size

    # Calculate maximum diagonal space for the rotated text
    max_diagonal_space = ((width ** 2 + height ** 2) ** 0.5) * 0.7  # Allow some margin
    font_size = calculate_font_size(watermark_text, max_diagonal_space, max_diagonal_space)

    # Set transparency (optional)
    c.setFillColor(colors.grey, alpha=0.3)

    # Rotate the canvas to draw diagonal text
    c.saveState()
    c.translate(width / 2, height / 2)
    c.rotate(45)
    c.setFont("微软雅黑", font_size)
    c.drawCentredString(0, 0, watermark_text)
    c.restoreState()

    c.save()

# 示例调用
create_watermark("这是一个水印", "watermark.pdf")

修改点:

  1. 添加 calculate_font_size 函数,用于根据文本长度动态计算字体大小。
  2. 将文本限制在页面对角线的 70% 内,以保证水印不会超出页面。
  3. 在循环中逐步减小字体大小,直到文本宽度符合要求。

运行该代码时,可以根据不同长度的水印文本动态调整字体大小,从而适配页面尺寸。

相关推荐
Q26433650231 小时前
【有源码】基于Hadoop生态的大数据共享单车数据分析与可视化平台-基于Python与大数据的共享单车多维度数据分析可视化系统
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
计算机毕业设计木哥2 小时前
计算机毕设选题推荐:基于Hadoop和Python的游戏销售大数据可视化分析系统
大数据·开发语言·hadoop·python·信息可视化·spark·课程设计
小蕾Java2 小时前
PyCharm 2025:使用图文教程!
ide·python·pycharm
至此流年莫相忘2 小时前
配置Python环境之Conda
python·conda
cooldream20092 小时前
深入解析 Conda、Anaconda 与 Miniconda:Python 环境管理的完整指南
开发语言·python·conda
B站计算机毕业设计之家2 小时前
多模态项目:Python人脸表情系统 CNN算法 神经网络+Adaboost定位+PyQt5界面 源码+文档 深度学习实战✅
python·深度学习·神经网络·opencv·yolo·计算机视觉·情绪识别
大模型真好玩3 小时前
LangGraph实战项目:从零手搓DeepResearch(一)——DeepResearch应用体系详细介绍
人工智能·python·mcp
Goona_3 小时前
PyQt批量年龄计算工具:从身份证到指定日期的周岁处理
python·小程序·交互·pyqt
B站_计算机毕业设计之家3 小时前
Python+Flask+Prophet 汽车之家二手车系统 逻辑回归 二手车推荐系统 机器学习(逻辑回归+Echarts 源码+文档)✅
大数据·人工智能·python·机器学习·数据分析·汽车·大屏端
MoRanzhi12034 小时前
SciPy傅里叶变换与信号处理教程:数学原理与Python实现
python·机器学习·数学建模·数据分析·信号处理·傅里叶分析·scipy