讲义打印 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, 空间利用率最高,最小的字也算勉强可以辨识。

评论

此博客中的热门博文

保研复盘

托福备考记录

5.14 日记