很多手帐爱好者在入手 A7 窄版手帐本之后,遇到的第一个难题不是“写什么”,而是“内页怎么选”。市售内页大多是 A5、A6 通用规格,换到 A7 窄版之后,要么宽度对不上,要么打印出来还需要手动裁切。更麻烦的是,标准内页的版式固定,你想要的点阵、时间轴、周计划未必都在同一本活页里出现。这篇文章想解决的就是这件事:A7 窄版手帐本的内页选择逻辑,以及如何用代码自己生成一套完全贴合本子的内页模板。
我的判断很明确:A7 窄版的真正优势是“便携”和“快速记录”,但它的价值前提是内页设计足够贴近你的使用习惯。与其反复购买不同品牌的内页试错,不如用 HTML/CSS、Python 和脚本工具,按自己的需求生成模板,再打印成 PDF。这个思路同时适合两类人:一类是喜欢手写记录但找不到合适内页的普通人,另一类是本来就熟悉代码、希望把效率工具变成“可定制系统”的技术型用户。
下面会从 A7 窄版的内页类型对比开始,逐步讲清楚自建内页模板的完整流程,包括尺寸设定、网格计算、打印适配、批量生成和常见问题。所有示例代码都可以直接复制运行,你只需要一个浏览器、一个 Python 环境和一台支持 PDF 打印的打印机。
1. 这篇文章真正要解决的问题
先说一个常见场景:你买了一本 A7 窄版活页本,想用它做每天的待办清单。结果发现,市售的 A7 内页要么是普通的空白页,要么是宽度过宽的横线页,真正想要的“点阵 + 日期 + 任务勾选框”组合几乎找不到。于是你开始自己画线,每天花十分钟画表格,手帐反而变成了负担。
这个场景背后有三个真实痛点。第一,A7 窄版的规格不统一。同样叫 A7,不同品牌的活页本,内页高度可能是一致的,但宽度会因为装订方式不同而有几毫米差。买回来的通用内页,装进本子后总会多出一截,或者边缘被孔夹挡住。第二,版式设计带不来匹配感。空白页需要自己画网格,横线页的行距未必适合中文书写,点阵页的间距又可能太密。你需要的不是“一种”内页,而是“会随场景变化”的一组内页。第三,购买和试错成本高。一套品牌内页动辄几十元,买回来发现不合适,几乎等于浪费。
解决这个问题的思路,是把内页从“商品”变成“文件”。
换句话说,内页本质上就是一个需要精确尺寸和重复打印的 PDF。我们完全可以用代码定义尺寸、绘制网格、生成日期框,再批量输出。这样一来,A7 窄版手帐本的内页选择,就从“买什么”变成了“生成什么”。
这篇文章适合的读者有两类。第一类是你不想折腾代码,但想理解内页设计逻辑,将来买内页时知道该看哪些参数。第二类是你愿意在电脑上花半小时配置环境,之后每次都能用脚本生成新内页。无论哪类,读完都能少走一段弯路。
2. A7 窄版手帐本内页类型与适用场景
2.1 标准 A7 与 A7 窄版的尺寸关系
A 系列纸张的规格是国际标准,A7 的标准尺寸是 74mm × 105mm。窄版通常指宽度比标准更小,高度接近 105mm,但宽度可能在 70mm 左右,也可能是某种定制尺寸。不同品牌会基于标准比例做调整,所以自建内页的第一原则是:不要直接照抄别人模板里的像素值,而是先测量自己的内页实际尺寸。
测量方法很简单:用一把直尺量出内页的宽度和高度,精确到毫米。如果是活页本,还要注意打孔位置,通常左侧或上方会有孔位,模板中这块区域要留白,不能绘制内容。这一步决定了后续所有坐标系是否准确。
2.2 不同内页类型的使用场景
在开始生成模板前,先明确常见内页类型适合干什么。下面这张表可以作为选择参考:
| 内页类型 | 适合场景 | 不适合场景 | 推荐间距/规格 |
|---|---|---|---|
| 空白页 | 自由书写、手绘、思维导图 | 需要对齐表单时 | 无 |
| 横线页 | 连续笔记、日记、摘抄 | 自由排版 | 行距约 6.5mm - 7mm |
| 网格页 | 画图、排版、表格 | 纯文字长文书写 | 格距约 4mm - 5mm |
| 点阵页 | 子弹笔记、快速记录 | 需要完整线条时 | 点距约 4mm - 5mm |
| 时间轴页 | 日程管理、时间记录 | 不定期使用 | 时间间隔 30 分钟或 1 小时 |
| 周计划页 | 每周回顾、任务规划 | 需要高自由度 | 左右分栏或水平时间轴 |
| 任务清单页 | 每日待办、习惯打卡 | 需要长时间连续书写 | 顶部日期 + 勾选框列表 |
A7 窄版因为尺寸小,最适合的是点阵页、任务清单页和时间轴页。空白页在 A7 上会浪费面积,横线页如果行距设计不好,一行只能写四五个字,效率很低。点阵页之所以受欢迎,是因为它提供定位点但又不影响书写自由,在 A7 上可以实现“既能画盒子,又能写文字”的双重功能。
2.3 选择内页时最容易踩的坑
新手最常犯的错误,是把 A5 或 A6 内页的版式等比缩小到 A7。A7 的宽度有限,等比缩小后,页边距和行距都会变得过窄,写起来非常局促。更合理的做法是:缩小页面尺寸,但不缩小字体和行距。这就意味着,A7 内页不能简单复用 A5 的模板参数,需要重新设计比例。
比如,A5 横线页常见行距是 8mm,A7 上如果也保留 8mm,每页只有大约 13 行,看起来少了点,但实际书写舒适度远好于 5mm 行距。点阵页的点距也一样,A5 可以使用 5mm 网格,A7 建议使用 4mm 或 4.5mm,既能提供足够的定位点,又不会让点阵过于密集。
总之,A7 窄版内页的设计核心是“减法”:减少行数、减少列数、减少不必要的装饰,把有限空间留给真正需要的内容。
3. 环境准备与前置条件
如果你打算直接用现成模板打印,这一步可以跳过。但如果想自己生成,就需要准备一套非常轻量的开发环境。整个流程用到的工具都很常见,不涉及复杂框架。
3.1 基础工具清单
- 一台安装了现代浏览器的电脑,推荐 Chrome 或 Edge。可以用来直接打开 HTML 模板并打印。
- Python 3.8 或更高版本。用于运行生成 PDF 的脚本,版本请以实际安装为准,本文示例在 Python 3.10 环境下验证过。
- 一个文本编辑器,推荐 VS Code,不过任意能编辑文本的编辑器都可以。
- 一个 PDF 阅读器,用于检查生成结果。
- 打印机或支持打印的 PDF 导出服务。
3.2 Python 依赖安装
Python 主要用来调用 ReportLab 库生成 PDF。ReportLab 是一个成熟的开源 PDF 生成库,支持精确的坐标绘制。安装方式如下:
pip install reportlab如果你希望把 HTML/CSS 模板直接转成 PDF,也可以安装 WeasyPrint,它可以把网页模板渲染成 PDF,适合对排版有更高要求的情况。不过本文的核心示例使用 ReportLab,因为它在控制毫米级坐标时更直接。
pip install weasyprintWeasyPrint 在 Windows 上可能需要额外安装 GTK 运行库。如果遇到问题,可以先使用 ReportLab 方案,避免环境折腾。
3.3 测量本子与纸张
在写代码之前,必须确认三个参数:
- 内页宽度 W,单位毫米。
- 内页高度 H,单位毫米。
- 打孔区域的位置和大小,通常位于左侧或上方。
你可以用下面这个简单的纸片测试法:先打印一张标准 A7 纸张,裁切后放入本子,看看哪些区域被遮挡。然后把“可用区域”的左上角坐标和右下角坐标记录下来。后续所有模板设计都基于可用区域,而不是整张纸。
4. 核心流程拆解
自建 A7 窄版内页模板,整个流程可以拆成五个步骤:确定尺寸、设计元素、生成页面、导成 PDF、打印测试。下面逐个说明。
4.1 确定尺寸与页面方向
A7 窄版通常是竖版使用,少数人喜欢横版。竖版时,内页高度大于宽度,适合列表、日记和时间轴。横版时,宽度大于高度,适合横向时间轴或思维导图。在代码中,统一以毫米为单位定义页面大小,避免厘米与像素混用。
以竖版为例,假设你量出来的内页尺寸是 W=70mm,H=105mm,左侧打孔区宽度为 8mm,那么实际可用绘制区域就是:
- 左上角坐标:(8, 0)
- 右下角坐标:(70, 105)
如果使用 ReportLab,坐标原点在左下角,需要转换:底部为 0,顶部为 H。可绘制区域的左下角是 (8, 0),右上角是 (70, 105)。
4.2 设计网格与线条
网格设计决定了内页的视觉复杂度和书写自由度。最常用的三种网格是横线、点阵和方格。点阵可以用小圆点绘制,横线用水平线段绘制,方格则用矩形边界绘制。
在 A7 窄版上,我建议以 4mm 为基准间距。为什么是 4mm?因为中文常用字的高度大约在 3.5mm 到 4mm 之间,4mm 的行距既能保证书写清晰,又不会让页面显得太空。如果主要写英文或数字,可以放宽到 5mm。
4.3 增加日期与功能区
除了基础网格,内页还需要一些区域来记录日期、任务和优先级。常见做法是顶部保留一个 10mm 高的日期栏,左侧或者右侧留出 8mm 宽的状态标记区。这样一张 A7 内页就能同时承担“日期 + 任务清单 + 自由记录”的功能。
4.4 生成文件与打印
生成文件时,最好一次生成多页,每页对应一种内页类型。打印时,可以选择“实际大小”或“100% 缩放”,不要选择“适应页面”,否则尺寸会漂移。打印前先打印一张测试页,确认尺寸完全吻合,再批量打印。
5. 完整示例代码实现
下面给出三个可以直接使用的示例,分别覆盖 HTML/CSS 模板、Python 生成 PDF、以及结构化内页配置文件。示例代码都以 A7 窄版的常见尺寸为例,实际使用时请修改成你自己测量的参数。
5.1 示例一:用 HTML/CSS 制作 A7 点阵页模板
这个方法最适合浏览器直接打印,不需要安装 Python。创建一个文件a7_dotgrid.html,内容如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>A7 窄版点阵页</title> <style> :root { --page-width: 70mm; --page-height: 105mm; --dot-color: #c0c0c0; --dot-distance: 4mm; --margin-top: 8mm; --margin-right: 6mm; --margin-bottom: 6mm; --margin-left: 10mm; } * { box-sizing: border-box; margin: 0; padding: 0; } @page { size: 70mm 105mm; margin: 0; } body { width: var(--page-width); height: var(--page-height); display: flex; align-items: flex-start; justify-content: center; padding: var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left); background: #ffffff; } .dot-grid { width: 100%; height: 100%; background-image: radial-gradient(circle, var(--dot-color) 0.35mm, transparent 0.45mm); background-size: var(--dot-distance) var(--dot-distance); background-position: -0.2mm -0.2mm; } </style> </head> <body> <div class="dot-grid"></div> </body> </html>这段代码的核心是通过background-image的径向渐变模拟点阵。background-size控制点点之间的距离,也就是网格间距。如果你想要方格或横线,只需修改background-image的规则,例如用linear-gradient生成横线。
在浏览器中打开这个 HTML 文件,按Ctrl+P打印,纸型选择“A7”,边距设为“无”,缩放选“100%”,即可得到点阵页。注意,浏览器打印预览中如果显示尺寸有偏差,优先检查系统打印缩放设置。
5.2 示例二:用 Python + ReportLab 生成多页面 PDF
如果你需要一次性生成点阵页、横线页、任务清单页,推荐使用 Python。创建一个文件generate_a7_planner.py,内容如下:
from reportlab.lib.pagesizes import mm from reportlab.pdfgen import canvas # ===== 配置区,请改成你实测的尺寸 ===== PAGE_W = 70 * mm PAGE_H = 105 * mm MARGIN_LEFT = 10 * mm MARGIN_RIGHT = 6 * mm MARGIN_TOP = 8 * mm MARGIN_BOTTOM = 6 * mm DOT_DISTANCE = 4 * mm LINE_SPACING = 4 * mm OUTPUT_FILE = "a7_planner.pdf" pdf = canvas.Canvas(OUTPUT_FILE, pagesize=(PAGE_W, PAGE_H)) def draw_dot_grid(): x = MARGIN_LEFT while x <= PAGE_W - MARGIN_RIGHT: y = MARGIN_BOTTOM while y <= PAGE_H - MARGIN_TOP: pdf.circle(x, y, 0.2 * mm, stroke=0, fill=1) y += DOT_DISTANCE x += DOT_DISTANCE pdf.showPage() def draw_line_grid(): y = MARGIN_BOTTOM while y <= PAGE_H - MARGIN_TOP: pdf.line(MARGIN_LEFT, y, PAGE_W - MARGIN_RIGHT, y) y += LINE_SPACING pdf.showPage() def draw_task_page(): # 顶部日期栏 pdf.setStrokeColorRGB(0.2, 0.2, 0.2) pdf.rect(MARGIN_LEFT, PAGE_H - MARGIN_TOP - 12 * mm, PAGE_W - MARGIN_LEFT - MARGIN_RIGHT, 10 * mm, stroke=1, fill=0) # 日期栏文字 pdf.setFont("Helvetica", 8) pdf.drawString(MARGIN_LEFT + 2 * mm, PAGE_H - MARGIN_TOP - 7 * mm, "日期:____ / ____ / ____") # 任务行,勾选框用矩形表示 y = PAGE_H - MARGIN_TOP - 20 * mm line_height = 8 * mm while y > MARGIN_BOTTOM + line_height: pdf.rect(MARGIN_LEFT, y, 4 * mm, 4 * mm, stroke=1, fill=0) pdf.line(MARGIN_LEFT + 6 * mm, y + 2 * mm, PAGE_W - MARGIN_RIGHT, y + 2 * mm) y -= line_height pdf.showPage() # 按需生成:这里生成两种点阵页、两页横线、两页任务页 for _ in range(2): draw_dot_grid() for _ in range(2): draw_line_grid() for _ in range(2): draw_task_page() pdf.save() print(f"已生成:{OUTPUT_FILE}")这个脚本做了三件事。第一,draw_dot_grid用嵌套循环画点阵,坐标单位通过 ReportLab 自动换算为毫米。第二,draw_line_grid画横线,每 4mm 一条。第三,draw_task_page绘制一个带日期栏和任务勾选框的页面,适合每日待办。
运行命令:
python generate_a7_planner.py运行成功后,会在当前目录生成a7_planner.pdf。用 PDF 阅读器打开,检查页面大小是否为 70mm × 105mm。
5.3 示例三:用 JSON 配置批量生成多种内页
如果你想在不修改代码的情况下快速调整参数,可以把配置单独放到一个 JSON 文件里。创建planner_config.json:
{ "pageWidthMm": 70, "pageHeightMm": 105, "marginLeftMm": 10, "marginRightMm": 6, "marginTopMm": 8, "marginBottomMm": 6, "pages": [ {"type": "dot", "gridMm": 4, "count": 1}, {"type": "line", "lineSpacingMm": 4, "count": 1}, {"type": "task", "lineCount": 10, "count": 1} ] }然后写一个generate_from_config.py读取配置并调用 ReportLab。这里不展开全部代码,核心思路是:把配置项映射到上一节的绘图函数,用循环生成 PDF。这样做的好处是,你的内页参数可以像配置文件一样被版本管理,方便以后调整和共享。
5.4 如何在 Obsidian/Notion 中做“电子版 A7 内页”
如果你不喜欢打印,也可以用数字笔记软件模拟 A7 窄版的布局。下面是一个 Markdown 模板,可以复制到 Obsidian 中作为每日笔记模板:
# 📅 {{date}} ## 今日重点 - [ ] ## 时间轴 - 09:00 - 10:00 - 11:00 - 14:00 - 16:00 ## 速记 -这套布局和 A7 窄版内页的逻辑一致:顶部日期,中间任务清单,下方自由记录。虽然不是纸本,但可以服务于喜欢用手机或电脑快速记录的场景。
6. 运行结果与效果验证
完成代码后,需要按照下面的流程验证输出是否符合预期。
6.1 检查 PDF 尺寸
用 PDF 阅读器打开a7_planner.pdf,查看文档属性。A7 标准尺寸应为 74mm × 105mm,但你的窄版数据可能是 70mm × 105mm。如果尺寸不对,回到脚本里修改PAGE_W和PAGE_H,重新生成。
6.2 打印测试页
打印测试页时,注意选择“实际大小”或“自定义缩放 100%”,不要勾选“适应页面”。打印完用尺子量一下页边距和点阵间距,确认与设计值一致。
一个简单的判断标准:拿一张已经打印好的内页放入 A7 窄版本子,如果左侧孔位没有遮挡内容,上下边缘不出界,说明尺寸基本正确。
6.3 验证点阵和横线的均匀性
对于点阵页,要观察点的排列是否横平竖直。如果点阵是斜的,检查打印设置中是否勾选“旋转页面”或“自动旋转”。对于横线页,要检查线条是否平行,行距是否一致。如果行距不均匀,可能是打印机的纸张传输有偏差,可以尝试更换打印纸类型为“厚纸”或“卡纸”。
6.4 失败后的第一排查步骤
如果页面打印出来后明显偏大或偏小,优先查看打印设置里的“缩放”选项;如果点阵颜色太浅,检查--dot-color或代码中的颜色参数;如果页面边缘被裁切,检查打印机的无边框打印设置,A7 这类小尺寸页面通常需要关闭“无边距”。
7. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 打印出来的内页比本子小一圈 | 打印使用了“适应页面”缩放 | 查看打印设置中的缩放比例 | 改为“实际大小”或 100% 缩放 |
| 打印出来的内页左右不对称 | 打印纸实际尺寸与设置不一致 | 用尺子测量纸张宽度 | 重新测量,修改PAGE_W参数 |
| 点阵在打印后变成竖线或斜线 | 浏览器打印缩放不为 100% | 查看浏览器打印预览缩放比例 | 设置为 100%,关闭“适应页面” |
| 打孔区域被画上线或点 | 模板未忽略打孔区 | 检查MARGIN_LEFT是否覆盖孔位 | 增大左侧留白,例如改为 12mm |
Python 脚本运行报错ModuleNotFoundError | ReportLab 未安装或环境错误 | 运行pip install reportlab | 安装依赖后重新运行 |
| PDF 中文字体变成方块 | 中文字体未嵌入 | 检查字体资源或在生成时指定中文字体 | 使用pdf.setFont指定本机中文字体 |
| 打印时边缘内容被裁切 | 打印机有不可打印区域 | 查看打印机最低边距 | 增加页边距,避免内容靠近纸张边缘 |
这些问题的核心都指向同一个原因:页面尺寸、缩放和边距没有统一。只要你测量准确,打印设置正确,自建模板的稳定性会非常高。
8. 最佳实践与工程建议
8.1 先测量,再设计
不要依赖产品页面标注的标准尺寸。不同品牌的活页本,内部宽度差异可能达到 3mm 到 5mm。建议用游标卡尺或直尺测量内页实际尺寸,再把数据填入配置。测量数据可以记录在planner_config.json中,方便下次使用。
8.2 使用配置文件管理参数
把页宽、边距、网格间距放在 JSON 或 YAML 配置中,而不是硬编码在代码里。这样你能为一个本子维护一套配置,切换不同本子时只改配置,不碰代码。
8.3 建立一个“模板版本库”
建议用 Git 管理你的内页模板文件。初始版本可能不完美,但每迭代一次,都能保留历史记录。比如今天觉得点距 4mm 太密,改成 4.5mm,明天觉得 4.5mm 太松,再改回 4.2mm。版本库能帮你对比不同版本的实际打印效果,避免反复摸索。
8.4 预留安全边距
A7 窄版的可用面积很小,但边距不能省。左侧打孔区至少要留 8mm,右边至少留 5mm,顶部和底部至少留 5mm。这会让页面看起来有空余,但实际书写时不会被孔夹挡住,也不会打印时被裁切。
8.5 批量生成时使用“一套配置,多种布局”
你不需要为每种内页类型写独立脚本。更推荐方式是:一套配置里声明需要哪些页面,然后由一个生成器循环处理。这样可以在一次运行中同时生成点阵页、横线页、任务页,并按不同数量组合。
8.6 打印前先做小批量测试
正式打印前,先打印一页测试页,装入本子验证尺寸。测试页上可以包含几个大字“测试”,方便快速识别方向。如果尺寸不对,优先检查缩放和纸型,不要直接调整全部参数,否则容易搞不清是哪个改动生效。
8.7 结合数字工具提升使用效率
A7 窄版手帐的定位是“快速记录的移动终端”,而不是“完整的知识库”。我的建议是让手帐承担每日任务和临时灵感,把长文笔记放到 Obsidian、Notion 或博客里。这样手帐记录会更轻松,数字系统则承担深度整理,两者互相补充。
8.8 对外分享时注意字体和资源
如果你打算把模板分享给朋友,最好把所有字体文件、配置文件和脚本打包,或者提供一个 HTML 版本。HTML 模板天然跨平台,其他人打开就能打印,不需要安装 Python。从分享便利性看,HTML 方案优于 Python 方案。
9. 总结与后续学习方向
这篇文章的核心在于把 A7 窄版手帐本的内页选择,从一个“购物问题”变成“配置问题”。市售内页的版式再丰富,也很难覆盖每本数的尺寸差异和个人使用习惯。自己用代码生成内页,本质上是在做一个可复用、可版本化、可打印的个人模板系统。
如果你之前没有接触过 ReportLab,可以先从 HTML 模板开始,把点阵页打印出来,再逐步增加日期栏和任务清单。等你熟悉了毫米坐标之后,再尝试用 Python 生成多页 PDF。这套思路不仅适用于 A7 窄版,也适用于 A5、A6、TN 等任何规格的手帐本,区别只在于页面尺寸和边距参数。真正值得投入时间的,不是反复调整点距,而是想清楚自己每天打开手帐后,第一笔要写在哪里、写什么。模板只是容器,记录习惯才是核心。
下一步,建议你把第一个版本的模板打印出来,用一周时间观察适合自己的行距、点距和边距,然后把结果固化到配置文件里。这一轮“设计—打印—使用—修改”的循环,才是 A7 窄版手帐本内页选择最可靠的方法。