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

embedded/2025/1/16 19:20:36/

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

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/embedded/154462.html

相关文章

【HTML+CSS+JS+VUE】web前端教程-36-JavaScript简介

JavaScript介绍 JavaScript是一种轻量级的脚本语言&#xff0c;所谓脚本语言&#xff0c;指的是它不具备开发操作系统的能力&#xff0c;而是用来编写控制其他大型应用程序的“脚本” JavaScript是一种嵌入式语言&#xff0c;它本身提供的核心语法不算很多 为什么学习JavaScri…

智能家居企业如何通过设计师渠道打造第二曲线?

随着智能家居行业的迅速发展和消费者需求的不断升级&#xff0c;企业的营销策略也在不断变化。传统的B2C营销模式逐渐让位于更加精细化、定制化的B2B2C模式&#xff0c;其中设计师渠道的开发与合作&#xff0c;成为智能家居企业布局市场、提升品牌影响力的关键。 智能家居推广的…

HTTP 范围Range请求

引言 在现代Web应用中&#xff0c;HTTP范围请求是一种重要的技术&#xff0c;允许客户端请求资源的部分内容&#xff0c;而不是整个资源。这对于大型文件的传输尤其有用&#xff0c;如视频流、断点续传下载等。本文将深入探讨HTTP范围请求的工作原理、实现方法和应用场景。 H…

c#删除文件和目录到回收站

之前在c上遇到过这个问题&#xff0c;折腾许久才解决了&#xff0c;这次在c#上再次遇到这个问题&#xff0c;不过似乎容易了一些&#xff0c;亲测代码如下&#xff0c;两种删除方式都写在代码中了。 直接上完整代码&#xff1a; using Microsoft.VisualBasic.FileIO; using Sy…

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表&#xff0c;我们会发现需要开通WPS会员才能使用合并功能&#xff1b; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢&#xff1f; 1、首先我们要看excel后缀是 .xlsx 还是 .xls &#xff1b;如果是.xlsx 那么 我们需要修改为 .xls 注…

Python----Python高级(面向对象:对象,类,属性,方法)

一、面向对象简介 Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。 Python中&#xff0c;一切皆对象。python数据类型、函数等&#xff0c;都是对象。 面向对象&…

多云架构下JuiceFS实现一致性与低延迟数据分发的深度解析

多云架构下JuiceFS实现一致性与低延迟数据分发的深度解析 一、JuiceFS在多云架构中的角色与优势 1. JuiceFS简介 JuiceFS是一个高性能的分布式文件系统&#xff0c;专为云原生环境设计&#xff0c;支持多种公有云和私有云的对象存储服务。它通过将数据存储在对象存储中&…

【C#设计模式(23)——模板方法模式(Template Method Pattern)】

前言 在抽象类中封装算法的结构&#xff0c;具体的实现步骤由子类定义&#xff0c;从而达到不改变算法结构的&#xff0c;允许子类重定义方法内容。代码 public abstract class Teamplate {public void TeamplateMethod(){Step1();Step2();Step3();}protected abstract void …