一键导出PDF中的每一页
MAC专属,其他系统请先自行导出再往下看加水印部分
加水印python脚本
from PIL import Image, ImageDraw, ImageFont
from pathlib import Path
import math
# ----------------- 可配置参数 -----------------
WATERMARK_TEXT = "本材料仅供XXXX内部参阅" # 水印文字
OPACITY = int(255 * 0.32) # 40% 透明度
ANGLE = 30 # 斜着的角度 (度)
FONT_SIZE = 48 # 字体大小
FONT_PATH = "/System/Library/Fonts/STHeiti Medium.ttc" # 字体文件路径(Mac 示例)
PADDING = 600 # 每次水印文本之间的间隔像素
# ------------------------------------------------
font = ImageFont.truetype(FONT_PATH, FONT_SIZE)
def add_watermark(img_path: Path):
"""在单张图片上添加斜向平铺水印"""
img = Image.open(img_path).convert("RGBA")
w, h = img.size
# 为防止旋转裁切,创建对角线长度的正方形画布
diag = int(math.hypot(w, h))
watermark_layer = Image.new("RGBA", (diag, diag), (255, 255, 255, 0))
draw = ImageDraw.Draw(watermark_layer)
# 计算一次文字的大小
bbox = draw.textbbox((0, 0), WATERMARK_TEXT, font=font)
text_w, text_h = bbox[2] - bbox[0], bbox[3] - bbox[1]
# 平铺水印文字
for x in range(0, diag, text_w + PADDING):
for y in range(0, diag, text_h + PADDING):
draw.text((x, y), WATERMARK_TEXT, font=font, fill=(0, 0, 0, OPACITY))
# 旋转水印层
watermark_layer = watermark_layer.rotate(ANGLE, expand=True)
# 裁剪中心区域,与原图匹配
x0 = (watermark_layer.width - w) // 2
y0 = (watermark_layer.height - h) // 2
watermark_cropped = watermark_layer.crop((x0, y0, x0 + w, y0 + h))
# 合并
combined = Image.alpha_composite(img, watermark_cropped)
combined = combined.convert("RGB")
out_path = img_path.with_name(f"watermarked_{img_path.name}")
combined.save(out_path, "JPEG", quality=95)
print(f"✅ {img_path.name} ➜ {out_path.name}")
def main():
# 处理当前目录所有 .jpg / .jpeg 文件
for p in Path('.').iterdir():
if p.suffix.lower() in {'.jpg', '.jpeg'} and not p.name.startswith('watermarked_'):
add_watermark(p)
if __name__ == "__main__":
main()