mcpField
P
pdf-look-scanned

pdf-look-scanned

github.com/vladmdgolam文档处理950 次安装2 周前更新
代码仓库

关于 pdf-look-scanned

通过渲染和调整页面,为 PDF 添加纸质扫描效果的命令行脚本。它还可根据来源 PDF 及指定的裁剪和放置坐标替换签名。

主要功能

  1. 01为 PDF 添加扫描图像效果
  2. 02调整分辨率和图像质量
  3. 03设置噪点、模糊、旋转与对比度
  4. 04从来源 PDF 提取签名
  5. 05在指定位置清除并替换签名

适用场景

  1. 01为 PDF 制作纸质扫描外观
  2. 02调整文档扫描纹理和清晰度
  3. 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)。

  1. 将源 PDF 转换为图像并目视检查,找到签名区域
  2. 反复裁剪,只保留签名笔迹(不包含文字或表格线)
  3. 在目标 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)

扫描效果参数

参数默认值效果
--dpi200渲染分辨率。值越低,画面越粗糙
--quality85JPEG 压缩质量。值越低,瑕疵越多
--noise5.0高斯噪声标准差。值越高,噪声越多
--blur0.6高斯模糊半径。值越高,画面越柔和
--rotation0.7最大旋转角度
--contrast-min0.88最低对比度(值越低,褪色感越强)
--contrast-max0.95最高对比度

替换签名的工作流

用户提供 PDF 和单独的签名来源文件时:

  1. 检查依赖项是否已安装(pillow、pdf2image、img2pdf、numpy、poppler)
  2. 检查源签名 PDF——转换为图像,确定哪些页面有签名
  3. 提取签名——反复裁剪以保留笔迹,并确认没有混入文字
  4. 检查目标 PDF——找到带有数字签名的页面,记录“Подпись:”或“Signature:”标签的位置
  5. 确定坐标——清除区域必须覆盖旧签名,但不能侵入标签;放置位置应紧接标签之后
  6. 使用所有参数运行脚本
  7. 验证输出——目视检查签名所在页面,如有需要,调整坐标
  8. 检查元数据——对输出运行 exiftool,确保没有残留软件痕迹

常见问题:

  • 裁剪框过紧:签名笔画边缘会被裁掉
  • 清除区域过宽:会侵入“Подпись:”/“Signature:”标签或周围文字
  • 签名过大或过小:调整 --sig-size(合同中通常为 0.11)
  • 源 PDF 是手机拍摄的照片:使用更高的 --sig-dpi(350+)和更高的笔迹阈值

评论

支持 Markdown