ワンクリックで
pdf-report
生成专业的 PDF 报告文档,支持封面页、多级标题、表格、图片、页眉页脚等功能。当用户需要将分析结果、报告内容输出为 PDF 格式时使用此技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
生成专业的 PDF 报告文档,支持封面页、多级标题、表格、图片、页眉页脚等功能。当用户需要将分析结果、报告内容输出为 PDF 格式时使用此技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
邮箱情报调查与关联分析。当用户要求"邮箱调查"、"邮箱搜索"、"查邮箱"、"邮箱关联"、"社交账号发现"、"用户名搜索"、"数字足迹"、"OSINT调查"、"人肉搜索"时使用此技能。
企业级目标情报收集。对目标企业进行资产发现、技术栈识别和攻击面测绘。当用户要求"企业资产发现"、"攻击面测绘"、"目标侦察"、"企业情报收集"、"外部资产发现"时使用此技能。
NGO组织攻击面侦察。针对非政府组织的攻击面测绘和社工预研。当用户要求"NGO渗透测试"、"非营利组织侦察"、"人权组织攻击面"、"媒体组织渗透"、"公民社会目标分析"时使用此技能。
个人目标情报收集。针对特定个人的OSINT收集和社工画像分析。当用户要求"人物画像"、"个人情报"、"OSINT调查"、"社工预研"、"VIP安全评估"、"高管风险评估"时使用此技能。
Evaluate access requests and existing privileges with least-privilege policy, segregation-of-duties checks, and approval recommendations.
Identify noisy or redundant alerts and propose safe suppression, deduplication, and threshold tuning with validation criteria.
| name | pdf-report |
| description | 生成专业的 PDF 报告文档,支持封面页、多级标题、表格、图片、页眉页脚等功能。当用户需要将分析结果、报告内容输出为 PDF 格式时使用此技能。 |
| metadata | {"version":"1.0.0","builtin":true} |
基于 reportlab 库的 PDF 报告生成工具,提供专业的文档排版功能,支持中文字体、封面页、多级标题、表格、图片等元素。适用于生成安全分析报告、威胁情报报告、业务分析报告等场景。
| 功能 | 说明 |
|---|---|
| 封面页 | 带背景图、标题、副标题、作者、日期信息 |
| 多级标题 | 支持 1-4 级标题,自动样式 |
| 正文段落 | 首行缩进、1.5 倍行距、两端对齐 |
| 表格 | 自动换行、交替行背景色、表头高亮 |
| 图片 | 自动缩放、居中、带说明文字 |
| 页眉页脚 | 页眉文本、页码(从正文开始计数) |
| 中文支持 | 自动加载中文字体 |
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 |
说明: 初始化时会自动下载中文字体和默认封面背景图(如果不存在)。
# 设置页眉文本
manager.header_text = "威胁分析报告"
# 可选:使用自定义封面背景图
# manager.set_cover_background("custom_background.jpg")
from datetime import datetime
manager.add_cover_page(
title="威胁分析报告",
subtitle="针对可疑 IP 的深度分析",
author="安全分析团队",
date=datetime.now().strftime("%Y年%m月%d日"),
organization="安全运营中心" # 可选
)
# 一级标题
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)
# 带首行缩进的段落(默认)
manager.add_content("本次分析针对企业内网发现的可疑 IP 地址进行深度威胁研判。")
# 不带首行缩进的段落
manager.add_content("分析时间:2024-01-15", first_line_indent=False)
# 准备表格数据(第一行为表头)
table_data = [
["指标", "结果", "风险等级"],
["多源标记恶意", "是", "高"],
["恶意样本关联", "5 个", "中"],
["近期活跃", "是", "高"]
]
# 添加表格(行数, 列数, 数据, 说明文字)
manager.add_table(4, 3, table_data, caption="威胁指标评估结果")
表格自动编号: 表格说明会自动编号为 "表<1>", "表<2>" 等。
# 添加图片(默认宽度 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>" 等。
# 添加分页符
manager.add_page_break()
# 添加空白间距(单位:点)
manager.add_spacer(24)
# 保存 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']}")
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()
| 依赖 | 用途 | 安装命令 |
|---|---|---|
| reportlab | PDF 生成核心库 | pip install reportlab |
| Pillow | 图片处理 | pip install Pillow |
| PyPDF2 | PDF 合并(用于添加最后一页) | pip install PyPDF2 |
pip install reportlab Pillow PyPDF2
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')"
| 方法 | 参数 | 说明 |
|---|---|---|
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_text | str | 页眉文本 |
story | list | 文档内容元素列表 |
set_cover_background() 设置本地图片