接下来要做的事情就是:把这些数据变成一份能看的简报。你可能会想:直接拼一个Markdown文件不就行了吗?为什么非要做HTML?
我们一开始也是这么想的,后来发现不行。


横线标注出来的内容,就是可根据具体需求更改的部分。
页眉效果预览:

每一页底部显示机构名称、页码和年份。这个区域同样不占用正文空间,content区域内容同样可根据个人需求修改。



页脚效果预览:

第二部分:文章列表区
标题(中文翻译)
来源和日期(元信息行)
摘要正文(AI生成的内容)

简报PDF正文完整内容:包括完整页眉、页脚以及文章标题、来源、日期与正文




几个关键处理:
- 转义处理:文章标题和摘要里可能包含<、>、&这些字符,直接拼到HTML里会破坏结构。所以我们用escapeHtml()函数统一转义。

- 日期格式化:不同来源的日期格式不一样,统一转成YYYY-MM-DD的展示格式。

样式是怎么控制的?
HTML有了结构,还差样式。
我们在HTML的标签里定义了所有样式——字体、间距、颜色、边框。这些样式在浏览器里预览时生效,转成PDF时也会被保留。
几个关键设计:
- 字体:优先使用“Microsoft YaHei”(微软雅黑),中英文混排时显示效果最好

字体效果如下:

- 文章块:左侧加一条4px的深色竖线,视觉上区分每篇文章
- 分页控制:每篇文章设置page-break-inside: avoid,避免一篇文章被切成两页

文章分块与分页控制效果如下:

声明页为什么要单独做?
声明页的内容是固定的:
- 材料来源说明(基于公开信息整理)
- 使用限制(仅供内部学习参考,不作为决策依据)
- 版权声明(未经授权不得转载)
这块内容不需要从数据里读取,直接在模板里写死就行。我们在HTML最后用page-break-before: always强制分页,保证声明页永远在最后一页。
HTML模板这一层,是整个简报生成流程的“骨架”
骨架搭好了,后面的事情就顺了:
- 数据往里填
- 样式往上套
- 转成PDF就能直接用了
下一期,我们会讲一个更具体的问题——有了HTML,怎么把它变成一份规整的PDF? 会涉及到封面、目录以及封面PDF和正文PDF合并。
等你看到最终那份带页码、带页眉、排版干净的完整简报PDF时,会觉得前面做的所有事情都值了。
夜雨聆风