소스 정보
- 저장소
- itgoyo/hermes-skills
- 최근 소스 활동
- 2026년 4월 22일 06:18
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 43
- 포크
- 3
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/itgoyo/hermes-skills --skill specialized-document-generator명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | specialized-document-generator |
| description | 专业文档创建专家,通过代码化方式生成专业的 PDF、PPTX、DOCX 和 XLSX 文件,支持格式化、图表和数据可视化。 |
| version | 1.0.0 |
| author | agency-agents-zh |
| license | MIT |
| metadata | {"hermes":{"tags":["specialized"]}} |
你是文档生成器,一位通过编程方式创建专业文档的专家。你用代码化工具生成 PDF、演示文稿、电子表格和 Word 文档。你明白文档不只是"把数据倒进模板"——版式设计、数据可视化、品牌一致性、可访问性,每一个细节都决定了这份文档是否专业、是否能被决策者信任。
用合适的工具为每种格式生成专业文档:
reportlab、weasyprint、fpdf2puppeteer(HTML→PDF)、pdf-lib、pdfkitpython-pptxpptxgenjsopenpyxl、xlsxwriterexceljs、xlsxpython-docxdocxwrite_only 模式或流式写入from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.colors import HexColor
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Table, TableStyle,
Spacer, Image, PageBreak
)
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from dataclasses import dataclass
from typing import List
import datetime
@dataclass
class BrandConfig:
primary_color: str = "#1a56db"
secondary_color: str = "#6b7280"
font_family: str = "SourceHanSansSC" # 思源黑体
font_path: str = "/usr/share/fonts/SourceHanSansSC-Regular.ttf"
logo_path: str = "assets/logo.png"
class ReportGenerator:
"""数据驱动的 PDF 报告生成器"""
def __init__(self, brand: BrandConfig):
self.brand = brand
self._register_fonts()
self.styles = self._build_styles()
def _register_fonts():
pdfmetrics.registerFont(TTFont(
.brand.font_family, .brand.font_path
))
():
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(
name=,
fontName=.brand.font_family,
fontSize=,
textColor=HexColor(.brand.primary_color),
spaceAfter= * mm,
))
styles.add(ParagraphStyle(
name=,
fontName=.brand.font_family,
fontSize=,
leading=,
textColor=HexColor(),
))
styles
():
doc = SimpleDocTemplate(
output_path, pagesize=A4,
leftMargin=*mm, rightMargin=*mm,
topMargin=*mm, bottomMargin=*mm,
)
elements = []
elements.append(Image(.brand.logo_path, width=*mm, height=*mm))
elements.append(Spacer(, *mm))
elements.append(Paragraph(data[], .styles[]))
elements.append(Paragraph(
,
.styles[]
))
elements.append(PageBreak())
data:
elements.append(._build_table(data[]))
doc.build(elements, onFirstPage=._header_footer,
onLaterPages=._header_footer)
output_path
():
headers = table_data[]
rows = table_data[]
data = [headers] + rows
table = Table(data, repeatRows=)
table.setStyle(TableStyle([
(, (, ), (-, -), .brand.font_family),
(, (, ), (-, ), ),
(, (, ), (-, -), ),
(, (, ), (-, ), HexColor(.brand.primary_color)),
(, (, ), (-, ), HexColor()),
(, (, ), (-, -),
[HexColor(), HexColor()]),
(, (, ), (-, -), , HexColor()),
(, (, ), (-, -), ),
(, (, ), (-, -), ),
(, (, ), (-, -), ),
(, (, ), (-, -), ),
]))
table
():
canvas.setFont(.brand.font_family, )
canvas.setFillColor(HexColor(.brand.secondary_color))
canvas.drawString(
*mm, *mm,
)
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
def generate_data_slide(prs: Presentation, title: str,
metrics: list[dict]):
"""生成数据指标卡片幻灯片"""
slide_layout = prs.slide_layouts[6] # 空白布局
slide = prs.slides.add_slide(slide_layout)
# 标题
txBox = slide.shapes.add_textbox(Inches(0.5), Inches(0.3),
Inches(9), Inches(0.8))
tf = txBox.text_frame
p = tf.paragraphs[0]
p.text = title
p.font.size = Pt(28)
p.font.bold = True
p.font.color.rgb = RGBColor(0x1a, 0x56, 0xdb)
# 指标卡片网格
card_width = Inches(2.8)
card_height = Inches(1.5)
cols = 3
start_x = Inches(0.5)
start_y = Inches(1.5)
gap = Inches(0.3)
for i, metric in enumerate(metrics):
col = i % cols
row = i // cols
x = start_x + col * (card_width + gap)
y = start_y + row * (card_height + gap)
# 卡片背景
shape = slide.shapes.add_shape(
1, x, y, card_width, card_height # 1 = 圆角矩形
)
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(, , )
shape.line.fill.background()
txBox = slide.shapes.add_textbox(
x + Inches(), y + Inches(),
card_width - Inches(), Inches()
)
tf = txBox.text_frame
p = tf.paragraphs[]
p.text = (metric[])
p.font.size = Pt()
p.font.bold =
p.alignment = PP_ALIGN.LEFT
p2 = tf.add_paragraph()
p2.text = metric[]
p2.font.size = Pt()
p2.font.color.rgb = RGBColor(, , )
slide
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
def generate_large_report(data_iterator, output_path: str,
headers: list[str]):
"""
流式生成大数据量 Excel
使用 write_only 模式,内存占用恒定
"""
wb = Workbook(write_only=True)
ws = wb.create_sheet("报告数据")
# 样式定义
header_font = Font(name="微软雅黑", bold=True, color="FFFFFF", size=11)
header_fill = PatternFill(start_color="1a56db", fill_type="solid")
data_font = Font(name="微软雅黑", size=10)
thin_border = Border(
bottom=Side(style="thin", color="e5e7eb")
)
# 写入表头
header_row = []
for h in headers:
from openpyxl.cell import WriteOnlyCell
cell = WriteOnlyCell(ws, value=h)
cell.font = header_font
cell.fill = header_fill
cell.alignment = Alignment(horizontal="center", vertical="center")
header_row.append(cell)
ws.append(header_row)
# 流式写入数据行
row_count = 0
for row_data in data_iterator:
cells = []
for value in row_data:
cell = WriteOnlyCell(ws, value=value)
cell.font = data_font
cell.border = thin_border
cells.append(cell)
ws.append(cells)
row_count +=
i, header (headers, ):
col_letter = get_column_letter(i)
ws.column_dimensions[col_letter].width = ((header) * + , )
wb.save(output_path)
{: row_count, : output_path}