分享:如何将两张pdf重叠在一起

这个帖子是一个分享,把一个pdf插入到另一个pdf里,并且能精确的控制插入的坐标,不是

  1. 把两个pdf文件的页面合并成一个pdf
  2. 把多个pdf页面并排摆放,类似word的每版打印x页

这个需求比较小众,比较准确的描述应该叫给pdf添加水印(watermark),如果用合并、插入之类的关键词去搜索的话在网上很难找到,常见的pdf工具也没有这种功能。

我的方法不一定最好,本贴算是抛砖引玉。

使用的工具:cpdf

下载地址:

插入方法( 默认两个pdf都只有1页):

cpdf.exe -stamp-on watermark.pdf -topleft "10 20" original.pdf -o output.pdf

-stamp-on:插入的pdf会显示在上方,根据你的需求,也可以换成-stamp-under

watermark.pdf:插入的pdf,一般是面积比较小的,当然两个文件的页面一样大也没问题

-topleft "10 20":指定插入的坐标,距左上角水平10pt,垂直20pt,所有可选的坐标选项如下:

-top 10
-topleft 10
-topleft "10 20"
-topright 10
-topright "10 20"
-left 10
-bottomleft 10
-bottomleft "10 20"
-bottom 10
-bottomright 10
-bottomright "10 20"
-right 10
-center

original.pdf:被插入的pdf,一般是面积大的那个,最终输出的页面尺寸也和它是一样的

-o output.pdf:指定输出的文件路径

如果original.pdf有多页

上述命令会向所有页都插入watermark.pdf。如果你只需要在部分页插入,可以在original.pdf后加一个range选项,可选的格式如下:

1,2,7-end:第1页、第2页、第7页到最后一页

1-16odd:1到16页中的奇数页,也就是1、3、5……13、15页

˜3-˜1:倒数第3页到倒数第1页,也就是最后3页

如何计算插入的坐标

首先需要注意坐标的单位是pt(点),它的换算方法是 72 pt = 1 inch = 25.4 mm

如果你的pdf阅读器可以显示坐标,这对你应该不成问题;没有的话也可以用笨方法,通过反复尝试慢慢调坐标。当然也可以先用上面的方法往original.pdf插入坐标轴,然后所需要的坐标就一目了然了。这个文件里有我画好的网格,相邻两条细线的距离是10pt,粗线的距离是50pt

grid.pdf (2.3 KB)

为什么会有这种需求

pdf通常作为其他格式的最终输出结果,一般是不建议直接编辑的。但平常经常要和pdf文件打交道,难免还是会遇到需要往已有的pdf上添加内容的场合,需要的人自然能想到应用场景

为什么不用……

  1. Adobe Acrobat/Foxit PDF Editor/……:太大了不想装;并且命令行工具有天然的优势:适合批量处理。不管是给多个pdf添加相同的水印,还是不同的水印,或者是奇数页、偶数页用不同的水印,命令行都有办法处理,而gui工具则不一定有这种灵活性
  2. python(pypdf):不想装python环境
2 个赞

还真不知道可以这样,我自己能想到的解决方案是

  • 把PDF页导出成300 PPI的高清图片
  • 用PS以图片编辑的方式进行编辑
  • 把图片转换回PDF

而且,一般来说,需要编辑的情况,都会留Word原本,所以,确实是一个需求,但是也确实很小众

这种功能让ai写个web来处理?

pdftk 也是可以的。比如,要将 水印.pdf 叠加到 原文件.pdf 上,可执行如下命令:

pdftk 原文件.pdf multistamp 水印.pdf output 输出文件.pdf

这样操作就变成位图了

pdftk没法控制坐标

位图就位图,没什么不好,300PPI,可以保证清晰度了。而且你通过水印,以图片形式添加进去的页面,同样不能编辑

而且,这种需求很少见,所以,能解决问题就好,还不用依赖任何额外的库或者包

直接放到adobo ai就行,可以保留PDF编辑格式

:globe_showing_americas: mark

:white_check_mark: Using cpdf (Recommended)

cpdf -stamp-on base.pdf overlay.pdf \
-pos-left 100 -pos-bottom 200 \
-scale 0.5 \
-o output.pdf

:check_mark: What this does:

  • Inserts overlay.pdf into base.pdf

  • Positions it at (x=100, y=200)

  • Scales it to 50% size


:brain: Key Point

:backhand_index_pointing_right: This is called PDF stamping (not merging)


:high_voltage: One-line summary

Use -stamp-on + position (-pos-left, -pos-bottom) + scale

1 个赞

这个关键词很准确,直接就搜到了成熟的解决方案了: Add a watermark to a PDF. Add text or image to a PDF

表示下感谢

我的操作习惯是这样:如果需要做这种水印效果,我会先用 Libreoffice 等软件创建一个和目标 PDF 文件尺寸一致的文档,然后在这个文档上绘制水印,并保存为水印图案 PDF 文档。最后直接将两份文档叠加,不考虑控制坐标的问题。个人感觉这样操作更加直观。