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

ops/2025/1/16 14:22:30/

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

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 colorsdef 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 sizedef calculate_font_size(text, max_width, max_height):# Start with a large font sizefont_size = 60while font_size > 10:  # Minimum font size to avoid being too smallc.setFont("微软雅黑", font_size)text_width = c.stringWidth(text, "微软雅黑", font_size)if text_width <= max_width * 0.8:  # Allow some marginreturn font_sizefont_size -= 2  # Decrease font size step by stepreturn font_size# Calculate maximum diagonal space for the rotated textmax_diagonal_space = ((width ** 2 + height ** 2) ** 0.5) * 0.7  # Allow some marginfont_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 textc.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. 在循环中逐步减小字体大小,直到文本宽度符合要求。

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


http://www.ppmy.cn/ops/150575.html

相关文章

Unity3D 移动端CPU端性能调优详解

前言 在Unity3D开发中&#xff0c;特别是在移动端&#xff0c;性能优化至关重要。CPU主要负责逻辑运算、物理计算和碰撞检测等核心任务。优化CPU性能不仅能提升游戏的流畅度&#xff0c;还能减少电量消耗和发热问题。本文将详细介绍Unity3D移动端CPU端的性能调优技术&#xff…

DATACOM-防火墙-复习-实验

防火墙 概述配置实验参考 概述 与路由器对比 路由器防火墙功能寻址、流量转发、路由流量控制、安全区域隔离防护硬件-相较于路由器&#xff0c;多了SPU&#xff0c;用于DDoS攻击防范/匹配会话/状态检测/认证策略/安全策略/NAT 策略/内容安全带宽策略等 发展 安全区域 防火墙…

用sklearn运行分类模型,选择AUC最高的模型保存模型权重并绘制AUCROC曲线(以逻辑回归、随机森林、梯度提升、MLP为例)

诸神缄默不语-个人CSDN博文目录 文章目录 1. 导入包2. 初始化分类模型3. 训练、测试模型&#xff0c;绘图&#xff0c;保存指标 1. 导入包 from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier, GradientBoostingClass…

SEO优化与版权保护:提升WordPress网站内容安全和价值

保护网站内容不仅仅是为了防止盗窃&#xff0c;更重要的是确保你的网站能够在搜索引擎中占据有利位置。通过结合SEO优化和版权保护&#xff0c;你可以提升网站的内容安全性&#xff0c;并进一步提升其在搜索引擎中的价值。 1. 版权保护如何影响SEO 版权保护对SEO有直接影响。…

2501,wtl显示html

原文 在MFC程序中有专门封装的CHTMLView来显示超文本文件,如果在对话框中显示网页可用CDHTMLDialog,甚至可实现多页超文本向导风格的对话框,但是在WTL中却没有单独封装超文本的对应控件,这是因为COM组件的使用和编写本来就是ATL的强项,WTL扩展的是ATL欠缺的桌面应用的功能部分…

风水算命系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…

基于php求职招聘系统设计

基于php求职招聘系统设计 摘要 随着社会信息化时代的到来&#xff0c;如今人们社会的生活节奏普遍加快&#xff0c;人们对于工作效率的要求也越来越高&#xff0c;企业 举办招聘会耗时耗财&#xff0c;个人参加招聘会漫无目的寻找不到“方向”&#xff0c;网络搜索工作量目的…

【C++学习篇】红黑树 从入门到进阶

目录 1.红黑树的概念 1.1红黑树的规则 1.2红黑树的效率 2. 红黑树的实现 2.1 红黑树的结构 2.2红黑树的插入 2.2.1红黑树插入&#xff0c;旋转的一些细节 2.2.1.1 u&#xff08;uncle&#xff09;不存在 &#xff0c;c为p的左孩子&#xff08;单旋变色&#xff09; 2.2.…