相关代码在这里,作为样例这里有一个生成好的 PDF 文件可以直接供下载
背景
自从我工作开始我就有一个 A5 尺寸的活页本,活页本的好处是里面纸张用完了可以只替换活页纸,而不需要再买新的记事本。另外也有很多给活页标准设计的花式替换纸,我从 2019 年开始便网购国誉(Kokuyo)的活页日历页,看起来是下面这个样子。因为个人在这方面还是更信任纸质媒介,我长期在上面会记录我的旅行计划,重要事件的时间点等等。
疫情期间因为居家办公自己买了个打印机之后,就开始思考能不能自己 DIY 印一套日历,这样就不用每年给国誉交钱了。不过疫情期间出行减少,这个东西的需求没有那么大了就搁置了下来。直到疫情过后,有时间折腾也有记录个人规划的需求,我便找时间简单实现了一个打印版本的活页。
整个事情大概分为下面几步:
- 用程序把每一个 A5 幅面(相当于半面月历)的内容导出到 HTML 网页;
- 找了个转换工具把 HTML 每一页导出成 PDF,并合并成连续的 A5 PDF;
- 由于我只有 A4 打印纸,所以使用 Adobe Reader 打印时的 “Booklet” 功能,把 A5 拼成 A4 小册子的顺序打印;
- 双面打印好之后手动裁切成 A5 尺寸并打孔。
最后自己做的月历表格效果如下图所示:
Step 1. 生成 PDF
这部分代码我放到了 Github 上面。下面的介绍很细节,不喜欢的可以直接跳到 Step 2。
首先生成每一页的内容;这里我非常丑陋地,用 Python 拼字符串拼了一个 HTML 网页出来。
然后需要把每一页的内容转换成 PDF,这里我随便找了个 Python 能调用的 PDF 库叫做 pdfkit
。当然这个库也只是调用外面的工具,你需要手动安装 wkhtmltopdf。在 ArchLinux 上有 AUR 支持所以难度不大。
之后把每一页的内容按顺序合并,也是调用了一个外部命令 pdfunite。这里有非常多的替代,也可以随便用其他工具搞定。这里有个给我自己用的小细节:我双面打印希望左右合在一起是一个月,而按照正常翻书顺序的话就需要前面预留一个空白的占位符。
最后生成的 PDF 效果如下:
Step 2. (可选)制作 Booklet
有这一步这是因为我自己的活页本是 A5 的而打印机更适合打印 A4 纸张,所以需要借用下 Adobe Reader 的 Booklet 小册子打印功能,这样打印完的内容直接从中心装订就是一本从左向右翻页的小册子。
Step 3. 裁剪打孔
在我这里打印出来的效果如下图左侧所示:
之后我使用普通的裁纸刀把这摞纸保持顺序从中间一分为二,之后用网上买的活页本专用的打孔机打孔即可。然后就是文章开头的效果图了:
总结
- 这种类型的活页本主要有三种尺寸:A5(20孔)、B5(26孔)和 A4(30孔);代码里假设用的是 A5 不过理论上区别不大;
- 我不擅长设计 / 排版,大家可以在我代码的基础上增加自己喜欢的 style / layout;
- 如果有条件还是用专门的切割设备效果会更好,我自己感觉裁纸刀一口气切太厚的东西容易翻车;
- 希望本文可以抛砖引玉,大家最终能够找到最适合自己的的纸质笔记体验。