关于 pdf-look-scanned
通过渲染和调整页面,为 PDF 添加纸质扫描效果的命令行脚本。它还可根据来源 PDF 及指定的裁剪和放置坐标替换签名。
主要功能
- 01为 PDF 添加扫描图像效果
- 02调整分辨率和图像质量
- 03设置噪点、模糊、旋转与对比度
- 04从来源 PDF 提取签名
- 05在指定位置清除并替换签名
适用场景
- 01为 PDF 制作纸质扫描外观
- 02调整文档扫描纹理和清晰度
- 03替换目标 PDF 中的签名图像
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ vladmdgolam/ agent-skills --skill pdf-look-scanned安装后在 Claude Code 中输入/pdf-look-scanned确认已加载。
附带文件scripts/make_scanned.py
详细介绍
PDF 仿扫描效果
让 PDF 看起来像纸质扫描件,并可选择替换签名。
依赖项
pip3 install pillow pdf2image img2pdf numpy
还需要 poppler(提供 pdftoppm):
- macOS:
brew install poppler - Ubuntu/Debian:
apt install poppler-utils - Fedora/RHEL:
dnf install poppler-utils - Arch:
pacman -S poppler - Windows:
conda install -c conda-forge poppler,或从 poppler 发布页下载
快速开始
运行 scripts/make_scanned.py 使用核心功能。查看脚本的 --help 了解所有选项。
简单的扫描效果
python3 scripts/make_scanned.py document.pdf
调整扫描质量
DPI 和质量越低,画面越粗糙,越像廉价扫描仪扫描的效果:
python3 scripts/make_scanned.py document.pdf --dpi 150 --quality 75 --noise 7
DPI 越高,扫描效果越清晰,文件也越大:
python3 scripts/make_scanned.py document.pdf --dpi 300 --quality 92
替换签名
查找签名坐标
替换签名前,需要确定裁剪坐标和放置坐标。所有坐标均为页面尺寸的比例(0.0-1.0)。
- 将源 PDF 转换为图像并目视检查,找到签名区域
- 反复裁剪,只保留签名笔迹(不包含文字或表格线)
- 在目标 PDF 中,找到要清除的区域(旧的数字签名)以及要粘贴签名的位置
使用以下 Python 代码片段交互式地查看坐标:
from pdf2image import convert_from_path
from PIL import Image
pages = convert_from_path("document.pdf", dpi=200)
page = pages[0] # 0-indexed
w, h = page.size
# Crop a region and save for inspection
crop = page.crop((int(w*0.5), int(h*0.4), int(w*0.8), int(h*0.6)))
import tempfile, os
crop.save(os.path.join(tempfile.gettempdir(), "crop_test.png"))
替换一个签名
python3 scripts/make_scanned.py contract.pdf \
--sig-pdf signatures.pdf \
--sig-page 1 --sig-crop 0.41,0.33,0.62,0.42 \
--sig-target 25 --sig-clear 0.61,0.41,0.85,0.52 --sig-place 0.62,0.415
替换多个不同的签名
每组 --sig-page、--sig-crop、--sig-target、--sig-clear、--sig-place 参数都会添加一项替换操作。它们按位置一一对应:
python3 scripts/make_scanned.py contract.pdf \
--sig-pdf signatures.pdf \
--sig-page 1 --sig-crop 0.41,0.33,0.62,0.42 \
--sig-target 25 --sig-clear 0.61,0.41,0.85,0.52 --sig-place 0.62,0.415 \
--sig-page 2 --sig-crop 0.40,0.335,0.62,0.39 \
--sig-target 27 --sig-clear 0.61,0.635,0.85,0.72 --sig-place 0.60,0.655
签名参数
| 参数 | 说明 |
|---|---|
--sig-pdf | 包含真实签名的源 PDF |
--sig-page N | 源 PDF 中的页码(从 1 开始计数) |
--sig-crop L,T,R,B | 用于提取签名的裁剪框(比例) |
--sig-target N | 要替换签名的目标页码(从 1 开始计数) |
--sig-clear L,T,R,B | 用于将旧签名涂白的区域(比例) |
--sig-place X,Y | 粘贴新签名的左上角位置(比例) |
--sig-size F | 签名宽度占页面宽度的比例(默认值:0.11) |
--sig-dpi N | 渲染源签名 PDF 使用的 DPI(默认值:350) |
扫描效果参数
| 参数 | 默认值 | 效果 |
|---|---|---|
--dpi | 200 | 渲染分辨率。值越低,画面越粗糙 |
--quality | 85 | JPEG 压缩质量。值越低,瑕疵越多 |
--noise | 5.0 | 高斯噪声标准差。值越高,噪声越多 |
--blur | 0.6 | 高斯模糊半径。值越高,画面越柔和 |
--rotation | 0.7 | 最大旋转角度 |
--contrast-min | 0.88 | 最低对比度(值越低,褪色感越强) |
--contrast-max | 0.95 | 最高对比度 |
替换签名的工作流
用户提供 PDF 和单独的签名来源文件时:
- 检查依赖项是否已安装(
pillow、pdf2image、img2pdf、numpy、poppler) - 检查源签名 PDF——转换为图像,确定哪些页面有签名
- 提取签名——反复裁剪以保留笔迹,并确认没有混入文字
- 检查目标 PDF——找到带有数字签名的页面,记录“Подпись:”或“Signature:”标签的位置
- 确定坐标——清除区域必须覆盖旧签名,但不能侵入标签;放置位置应紧接标签之后
- 使用所有参数运行脚本
- 验证输出——目视检查签名所在页面,如有需要,调整坐标
- 检查元数据——对输出运行
exiftool,确保没有残留软件痕迹
常见问题:
- 裁剪框过紧:签名笔画边缘会被裁掉
- 清除区域过宽:会侵入“Подпись:”/“Signature:”标签或周围文字
- 签名过大或过小:调整
--sig-size(合同中通常为 0.11) - 源 PDF 是手机拍摄的照片:使用更高的
--sig-dpi(350+)和更高的笔迹阈值
评论
支持 Markdown