静态简历站如何让网页与打印版复用同一份内容
聚焦内容一致性:用 Astro 内容集合区分数据与展示,让中文首页、项目归档和 A4 简历消费同一份项目资料,减少多处复制后的口径漂移。
- Astro
- 内容建模
- 静态站点
- 打印样式
这篇文章以当前简历站为例,讨论如何让首页、项目档案和打印版共享项目资料。打印页采用固定精选项目,重点是保持各处内容一致。
同一份经历,为什么会出现多个版本
个人网站往往有首页摘要、项目档案、项目详情和打印简历。若每个页面各写一遍文字,很容易出现职位名称不同、时间没有同步或技术栈漏改的情况。
要解决的是数据一致性,而不只是把几段 HTML 提取为组件。
把事实字段与展示选择分开
当前站点把个人资料和工作经历放在 TypeScript 数据文件中,项目与文章使用 Markdown 内容集合。标题、时间、角色、摘要和技术栈属于项目数据;是否进入首页精选属于展示选择。
Astro 内容集合提供加载与 schema 校验能力。校验可以发现缺字段和类型错误,但不能确认履历内容是否真实,后者仍要对照项目资料。
项目 Markdown
├─ 首页:精选项目摘要
├─ 归档:全部已发布项目
├─ 详情:完整正文
└─ 打印:精选项目与技术栈
首页和打印页复用同一个精选筛选函数,所以修改某个项目的标题和摘要,可以同时反映到这些展示位置。页面仍可以使用不同结构:网页显示详情链接,打印版显示紧凑摘要。
静态输出与少量交互可以共存
当前页面在构建时生成 HTML,不需要前端框架接管才能读取正文。打印按钮使用一小段脚本调用 window.print(),因此准确说法是“静态内容、无客户端框架运行时”,而不是整站绝对没有 JavaScript。
双语内容仍是两份独立编辑的文本。同一语言内部的数据复用,不会自动解决翻译同步;修改事实时应同时核对两种语言,并只为确实存在的翻译生成切换链接。
打印复用内容,不强行复用版面
屏幕适合留白、链接和较宽松的段落,纸张需要控制页数与分页。可以复用数据,但为打印建立独立样式:隐藏操作区、设定 A4、让单条经历和项目尽量完整,避免把整个长项目区设置成不可分页。
一次技术栈扩充后,曾出现第三页只剩学历一行。处理方式是调整打印间距、让教育背景作为整体,并重新生成 PDF 检查;单看屏幕上的 CSS 无法发现这种问题。
验证内容一致性
构建检查字段类型,静态产物检查内部链接,浏览器检查导航和打印按钮,再检查实际 PDF 的页数与内容。修改一个代表项目后,要核对首页、归档、详情和打印是否都已更新。
新增展示入口时,先判断需要新的内容字段,还是仅仅需要新的筛选与排版。让事实保持一个修改入口,才能让内容更新的成本随页面数量增长得更慢。