讲义打印 workflow 记录
这学期深度学习这门课是开卷考试,可以带纸质资料。但是问题在于上课基本都是 reference 的 UMich 大学这门课的课件,跟课本关系不大。理论上把课件打印出来就行,但是拿到的课件是 PDF 格式,且原 PPT 的每一页带有出现动画的都被分成了好几个页面(效果见 PPspliT)。总共加起来 700+ 页的课件不可能全打印出来。所以有了如下的 workflow:
1. 使用带书签功能的 PDF 阅读器(我用的是 Okular),把重点的页面手工标记出来,得到页码序号。用截图工具和 OCR 把序号拿出来。
2. 使用 pdftk cat 命令把这些序号对应的页面单拎出来。如:
pdftk 课序12-598_WI2022_lecture13-目标检测.pdf cat 3 8 20 25 26 33 37 43 53 59 61 64 67 70 73 86 88 90 output out12-13.pdf
3. 使用 PDF-XChange Editor 把这些 PDF 导出为 png(也许有更好的软件,没细究)
4. 使用 ImageMagick montage 命令拼接 png 图片。由于量大,写一个 Python 脚本用来生成命令:
import os
def get_total_images(prefix):
# 获取当前目录中的所有文件
files = os.listdir('.')
# 过滤出以指定前缀命名的 PNG 文件
png_files = [f for f in files if f.startswith(prefix) and f.endswith('.png')]
# 统计文件数量
return len(png_files)
def generate_imagemagick_command(prefix, total_images):
# 生成文件名列表
file_list = [f"{prefix}_{i:02d}.png" for i in range(1, total_images + 1)]
# 每10个图像拼接成一个大图像
commands = []
for i in range(0, total_images, 10):
# 获取当前批次的图像文件
batch_files = file_list[i:i + 10]
# 生成输出文件名
output_file = f"a4_{prefix}_{i // 10 + 1}.png"
# 使用 ImageMagick 的 montage 命令拼接图像
command = [
'magick',
"montage",
*batch_files,
"-tile", "2x5",
"-geometry", "+0+0",
output_file
]
# 将命令转换为字符串并添加到命令列表
commands.append(" ".join(command))
return commands
# 使用示例
prefix = "out12-13"
total_images = get_total_images(prefix) # 假设总共有22张图像
commands = generate_imagemagick_command(prefix, total_images)
# 输出命令
for cmd in commands:
print(cmd)
5. 使用 ImageMagick 的 convert 命令把多个 png 转为一个 PDF.
convert a4_out3* a4_out4* a4_out5* a4_out9* a4_out10* a4_out12* out.pdf
最终效果是一张 A4 纸单面可以打印 2*5=10 页 PPT. 由于没有边框和 padding, 空间利用率最高,最小的字也算勉强可以辨识。
评论
发表评论