chenchunrun/onyx-soc/pdf-report

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

生成专业的 PDF 报告文档,支持封面页、多级标题、表格、图片、页眉页脚等功能。当用户需要将分析结果、报告内容输出为 PDF 格式时使用此技能。

Install

npx vskill@latest install chenchunrun/onyx-soc/pdf-report

SKILL.md

PDF Report - PDF 报告生成

Overview

基于 reportlab 库的 PDF 报告生成工具,提供专业的文档排版功能,支持中文字体、封面页、多级标题、表格、图片等元素。适用于生成安全分析报告、威胁情报报告、业务分析报告等场景。

核心功能

功能说明
封面页带背景图、标题、副标题、作者、日期信息
多级标题支持 1-4 级标题,自动样式
正文段落首行缩进、1.5 倍行距、两端对齐
表格自动换行、交替行背景色、表头高亮
图片自动缩放、居中、带说明文字
页眉页脚页眉文本、页码(从正文开始计数)
中文支持自动加载中文字体

工作流程

阶段 1: 初始化
python
import sys
sys.path.append('<SKILL_DIR>/scripts')
from pdf_template import PDFTemplate
# 创建 PDF 模板管理器实例(默认中文)
manager = PDFTemplate(language='zh')
# 或创建英文报告
# manager = PDFTemplate(language='en')

语言支持:

参数效果
language='zh'中文(默认):作者、表、图、第 N 页
language='en'英文:Author、Table、Figure、Page N

说明: 初始化时会自动下载中文字体和默认封面背景图(如果不存在)。

阶段 2: 配置文档
python
# 设置页眉文本
manager.header_text = "威胁分析报告"
# 可选:使用自定义封面背景图
# manager.set_cover_background("custom_background.jpg")
阶段 3: 添加封面页
python
from datetime import datetime
manager.add_cover_page(
title="威胁分析报告",
subtitle="针对可疑 IP 的深度分析",
author="安全分析团队",
date=datetime.now().strftime("%Y年%m月%d日"),
organization="安全运营中心" # 可选
)
阶段 4: 添加正文内容
标题
python
# 一级标题
manager.add_title("一、执行摘要", level=1)
# 二级标题
manager.add_title("1.1 分析背景", level=2)
# 三级标题
manager.add_title("1.1.1 事件概述", level=3)
# 四级标题
manager.add_title("1.1.1.1 详细说明", level=4)
正文段落
python
# 带首行缩进的段落(默认)
manager.add_content("本次分析针对企业内网发现的可疑 IP 地址进行深度威胁研判。")
# 不带首行缩进的段落
manager.add_content("分析时间:2024-01-15", first_line_indent=False)
表格
python
# 准备表格数据(第一行为表头)
table_data = [
["指标", "结果", "风险等级"],
["多源标记恶意", "是", "高"],
["恶意样本关联", "5 个", "中"],
["近期活跃", "是", "高"]
]
# 添加表格(行数, 列数, 数据, 说明文字)
manager.add_table(4, 3, table_data, caption="威胁指标评估结果")

表格自动编号: 表格说明会自动编号为 "表<1>", "表<2>" 等。

图片
python
# 添加图片(默认宽度 14cm,高度按比例自动计算)
manager.add_image("screenshot.png", caption="攻击流量截图")
# 指定宽度
manager.add_image("diagram.png", width=10, caption="攻击路径示意图")
# 指定宽度和高度
manager.add_image("chart.png", width=12, height=8, caption="威胁趋势图")

图片自动编号: 图片说明会自动编号为 "图<1>", "图<2>" 等。

其他元素
python
# 添加分页符
manager.add_page_break()
# 添加空白间距(单位:点)
manager.add_spacer(24)
阶段 5: 保存文档
python
# 保存 PDF 文档
filepath = manager.save_document("威胁分析报告.pdf")
print(f"PDF 已保存: {filepath}")
# 获取文档信息
info = manager.get_document_info()
print(f"元素数: {info['total_elements']}")
print(f"表格数: {info['table_count']}")
print(f"图片数: {info['image_count']}")

完整示例

python
import sys
from datetime import datetime
sys.path.append('<SKILL_DIR>/scripts')
from pdf_template import PDFTemplate
def generate_threat_report():
"""生成威胁分析报告"""
# 1. 初始化
manager = PDFTemplate()
manager.header_text = "IP 威胁分析报告"
# 2. 封面
manager.add_cover_page(
title="IP 威胁分析报告",
subtitle="45.33.32.156 深度分析",
author="安全分析团队",
date=datetime.now().strftime("%Y年%m月%d日"),
organization="安全运营中心"
)
# 3. 执行摘要
manager.add_title("一、执行摘要", level=1)
manager.add_content("本报告对可疑 IP 地址 45.33.32.156 进行了全面的威胁情报分析。")
manager.add_content("分析结果表明该 IP 具有高度威胁风险,建议立即采取封锁措施。")
# 4. 基础信息
manager.add_title("二、基础信息", level=1)
manager.add_content("IP 地址: 45.33.32.156", first_line_indent=False)
manager.add_content("IP 类型: 公网地址", first_line_indent=False)
manager.add_content("地理位置: 美国 / 加利福尼亚州", first_line_indent=False)
manager.add_content("ASN: AS63949 (Linode, LLC)", first_line_indent=False)
# 5. 威胁情报
manager.add_title("三、威胁情报", level=1)
intel_data = [
["来源", "标签", "首次发现", "最后活跃"],
["VirusTotal", "scanner", "2023-05-12", "2024-12-20"],
["AbuseIPDB", "malware", "2023-06-01", "2024-12-19"],
["ThreatFox", "C2", "2024-01-10", "2024-12-18"]
]
manager.add_table(4, 4, intel_data, caption="多源威胁情报汇总")
# 6. 风险评估
manager.add_title("四、风险评估", level=1)
risk_data = [
["指标", "结果", "分值"],
["多源标记恶意", "是", "+40"],
["C2 标签", "是", "+30"],
["恶意样本关联", "5 个", "+15"],
["近期活跃", "是", "+10"],
["总分", "", "95"]
]
manager.add_table(6, 3, risk_data, caption="风险评分明细")
# 7. 结论
manager.add_title("五、结论与建议", level=1)
manager.add_content("基于以上分析,该 IP 地址风险等级为 Critical,强烈建议采取以下措施:")
manager.add_content("1. 立即在防火墙封锁该 IP 地址", first_line_indent=False)
manager.add_content("2. 检查内网是否有主机与该 IP 通信", first_line_indent=False)
manager.add_content("3. 将该 IP 加入威胁情报监控列表", first_line_indent=False)
# 8. 保存
filepath = manager.save_document("ip_threat_report.pdf")
return filepath
if __name__ == "__main__":
generate_threat_report()

依赖要求

必需依赖
依赖用途安装命令
reportlabPDF 生成核心库pip install reportlab
Pillow图片处理pip install Pillow
PyPDF2PDF 合并(用于添加最后一页)pip install PyPDF2
安装命令
bash
pip install reportlab Pillow PyPDF2
环境检查
bash
python -c "import reportlab; print('reportlab OK')"
python -c "from PIL import Image; print('Pillow OK')"
python -c "from PyPDF2 import PdfReader; print('PyPDF2 OK')"

API 参考

PDFTemplate 类
方法参数说明
add_cover_page()title, subtitle, author, date, organization, additional_info添加封面页
add_title()text, level (1-4)添加标题
add_content()text, first_line_indent (bool)添加正文段落
add_table()rows, cols, data, caption添加表格
add_image()image_path, width, height, caption添加图片
add_page_break()无添加分页符
add_spacer()height (默认 12)添加空白间距
set_cover_background()background_image_path设置封面背景图
save_document()filename保存 PDF 文档
get_document_info()无获取文档统计信息
属性
属性类型说明
header_textstr页眉文本
storylist文档内容元素列表

注意事项

  1. 中文字体: 优先使用嵌入式 TTF 字体(SourceHanSansCN),确保在微信等第三方预览器中也能正确显示中文。首次运行会自动下载字体文件,需要网络连接。若下载失败则降级为 CID 字体(依赖阅读器本地字体)
  2. 封面背景: 默认使用在线背景图,可通过 set_cover_background() 设置本地图片
  3. 图片格式: 支持 PNG、JPEG、GIF 等常见格式
  4. 表格宽度: 表格会自动适应页面宽度,列宽按比例分配
  5. 页码: 页码从正文页开始计数,封面页不显示页码

相关参考

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Refreshed 27 Apr 2026, 5 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/chenchunrun/onyx-soc/pdf-report/badge)](https://verified-skill.com/skills/chenchunrun/onyx-soc/pdf-report)

Something wrong with this skill or its page? Tell us.