A7窄版手帐本内页模板自建指南:用代码轻松生成专属PDF 很多手帐爱好者在入手 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 横线页常见行距是 8mmA7 上如果也保留 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 窄版通常是竖版使用少数人喜欢横版。竖版时内页高度大于宽度适合列表、日记和时间轴。横版时宽度大于高度适合横向时间轴或思维导图。在代码中统一以毫米为单位定义页面大小避免厘米与像素混用。以竖版为例假设你量出来的内页尺寸是 W70mmH105mm左侧打孔区宽度为 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 langzh-CN head meta charsetUTF-8 titleA7 窄版点阵页/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 classdot-grid/div /body /html这段代码的核心是通过background-image的径向渐变模拟点阵。background-size控制点点之间的距离也就是网格间距。如果你想要方格或横线只需修改background-image的规则例如用linear-gradient生成横线。在浏览器中打开这个 HTML 文件按CtrlP打印纸型选择“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, stroke0, fill1) 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, stroke1, fill0) # 日期栏文字 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, stroke1, fill0) 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是否覆盖孔位增大左侧留白例如改为 12mmPython 脚本运行报错ModuleNotFoundErrorReportLab 未安装或环境错误运行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 窄版手帐本内页选择最可靠的方法。