数据来源:
所需指标:
标准化:
构建前:
关键步骤:每次必须创建一张幻灯片,在继续下一张之前获得用户批准。
对每张幻灯片:
soffice --headless --convert-to pdf presentation.pptx
pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide您必须在每一页检查这些特定问题:
首要目标是最大信息密度。 忙碌的高管应在30秒内理解整个公司的情况。将每个象限填满到最大容量。
每个象限的目标:
信息打包技巧:
如果某个象限看起来稀疏,添加更多内容:
行间距——每部分使用单个文本框:
def add_section(slide, x, y, w, header_text, bullets, header_size=10, bullet_size=8):
"""单个文本框中的标题+要点,自然间距"""
tb = slide.shapes.add_textbox(x, y, w, Inches(len(bullets) * 0.18 + 0.3))
tf = tb.text_frame
tf.word_wrap = True
# 标题段落
p = tf.paragraphs[0]
p.text = header_text
p.font.bold = True
p.font.size = Pt(header_size)
p.font.color.rgb = RGBColor(0, 51, 102)
p.space_after = Pt(6) # 标题后小间隔
# 要点段落
for bullet in bullets:
p = tf.add_paragraph()
p.text = bullet
p.font.size = Pt(bullet_size)
p.space_after = Pt(3)
return tb关键间距原则:
space_after = Pt(6),要点之间使用
Pt(3)3-4张密集幻灯片——使用象限、列、表格、图表
所有正文文本使用要点——绝对不要使用段落。每部分使用一个包含所有要点的文本框——不要为每个要点创建单独的文本框。使用PptxGenJS要点格式:
// 正确:单个带要点列表的文本框 - 每个数组项成为一个要点
// 定位在左上象限(公司概况) - 标题后带强调条
slide.addText(
[
{ text: '总部:德克萨斯州奥斯汀;成立于2003年', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: '员工:全球140,000+,遍布6大洲', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: 'CEO:Elon Musk;CFO:Vaibhav Taneja', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: '市值:$8500亿(全球第6)', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: '分部:汽车(85%)、能源(10%)、服务(5%)', options: { bullet: { indent: 10 } } }
],
{ x: 0.45, y: 0.95, w: 4.5, h: 2.6, fontSize: 11, fontFace: 'Arial', valign: 'top', paraSpaceAfter: 6 }
);
// 错误:为每个要点创建多个单独的文本框 - 导致对齐问题
// slide.addText('总部:奥斯汀', { x: 0.5, y: 1.0, bullet: true });要点格式提示:
bullet: { indent: 10 } -
控制要点缩进(越小越紧凑)paraSpaceAfter: 6 - 每个段落后间距(磅)标题使用首字母大写(非全大写),左对齐
包括表格在内的所有位置使用一致字体
公司品牌色——在创建幻灯片前,您必须通过网络搜索研究实际品牌色。不要猜测或假设颜色。
如果提供了品牌指南,请遵循
布局灵感参见
examples/Nike_Strip_Profile_Example.pptx。根据每家公司的品牌调整颜色。
必须通过忙碌高管的"30秒理解测试"。
使用4:3宽高比(标准IB推介手册格式):
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_4x3'; // 10"宽 × 7.5"高 - 必须使用此设置PptxGenJS使用英寸。4:3幻灯片 = 10"宽 × 7.5"高。
┌─────────────────────────────────────────────────────────────────┐
│ y=0.2 标题:公司名称(股票代码) │
├────────────────────────────┬────────────────────────────────────┤
│ y=0.6 公司概况 │ y=0.6 业务与定位 │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.0 │ h=3.0 │
├────────────────────────────┼────────────────────────────────────┤
│ y=3.7 关键财务数据 │ y=3.7 股价/近期动态 │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.5 │ h=3.5 │
└────────────────────────────┴────────────────────────────────────┘
y=7.5
公司名称(股票代码) -
示例:Tesla, Inc. (TSLA)
slide.addText('Tesla, Inc. (TSLA)', { x: 0.3, y: 0.2, w: 9.4, h: 0.35, fontSize: 18, bold: true });| 象限 | 位置 | 内容 |
|---|---|---|
| 1 | x=0.3, y=0.6, w=4.7, h=3.0 | 公司概况:总部、成立年份、关键统计数据、业务摘要(4-5个要点) |
| 2 | x=5.0, y=0.6, w=4.7, h=3.0 | 业务与定位:收入驱动因素、产品/服务、竞争地位、增长驱动因素(4-5个要点) |
| 3 | x=0.3, y=3.7, w=4.7, h=3.5 | 关键财务数据:收入、EBITDA、利润率、EPS、FCF + 估值(市值、EV、倍数)——表格或图表,不要两者都有 |
| 4 | x=5.0, y=3.7, w=4.7, h=3.5 | 上市公司:1年股价图 + 主要股东。私有公司:近期动态或所有权/并购历史 |
| 元素 | 大小 | 备注 |
|---|---|---|
| 幻灯片标题 | 24pt | 加粗,公司品牌色 |
| 象限标题 | 14pt | 加粗,带强调条 |
| 正文/要点文本 | 11pt | 常规字重 |
| 表格文本 | 10pt | 密集表格可使用9pt |
| 图表标签 | 9pt | 保持标签简短 |
| 来源/页脚 | 8pt | 幻灯片底部 |
关键:如果文本溢出,将字号减小1pt并重新渲染。
每个象限标题左侧必须有一个彩色强调条:
// 为象限标题添加强调条
slide.addShape(pptx.shapes.RECTANGLE, {
x: 0.3, y: 0.6, w: 0.08, h: 0.25,
fill: { color: 'E31937' } // 使用公司品牌色
});
slide.addText('公司概况', {
x: 0.45, y: 0.6, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
});要包含的视觉元素:
对于多页简介:包含2-3个实际的PptxGenJS图表。绝不要使用占位div或静态图像。
对于单页简介:使用表格呈现财务数据(更节省空间)。只有在图表替代表格时才添加图表,而非同时添加。
| 数据类型 | 图表类型 |
|---|---|
| 收入趋势 | 折线图或柱状图(多年) |
| 地域分解 | 水平条形图 |
| 产品组合 | 带百分比的饼图 |
| 财务比较 | 柱状图 |
| 股价(1年每日) | 折线图 |
水平条形图(适用于4:3幻灯片的右下象限):
slide.addChart(pptx.charts.BAR, [{
name: 'FY2024按地区划分的收入',
labels: ['北美', 'EMEA', '中国', 'APLA'],
values: [21.4, 13.6, 7.6, 6.7]
}], {
x: 5.0, y: 4.1, w: 4.5, h: 3.0, // 适用于右下象限(4:3)
barDir: 'bar', chartColors: ['FF6B35'], showValue: true,
dataLabelFontSize: 10, catAxisLabelFontSize: 10, valAxisLabelFontSize: 10,
dataLabelFormatCode: '$#,##0.0B',
title: '按地区划分的收入', titleFontSize: 12, titleBold: true
});饼图(适用于4:3幻灯片的右下象限):
slide.addChart(pptx.charts.PIE, [{
name: '产品组合',
labels: ['鞋类', '服装', '装备'],
values: [68, 29, 3]
}], {
x: 5.0, y: 4.1, w: 4.5, h: 3.0, // 适用于右下象限(4:3)
showPercent: true, showLegend: true, legendPos: 'r',
dataLabelFontSize: 10, legendFontSize: 10,
chartColors: ['FF6B35', '2C2C2C', '4A4A4A'],
title: 'FY24收入组合', titleFontSize: 12, titleBold: true
});折线图(后续页面的全宽):
slide.addChart(pptx.charts.LINE, [{
name: '收入($B)',
labels: ['FY21', 'FY22', 'FY23', 'FY24', 'FY25E'],
values: [44.5, 46.7, 48.5, 51.4, 54.2]
}], {
x: 0.3, y: 1.2, w: 9.4, h: 5.5, // 4:3幻灯片全宽
chartColors: ['FF6B35'], showValue: true, lineSmooth: true,
dataLabelFontSize: 11, catAxisLabelFontSize: 11, valAxisLabelFontSize: 11,
title: '收入趋势与预测', titleFontSize: 14, titleBold: true
});始终使用原生的PptxGenJS表格或图表——绝不要使用纯文本叙述或HTML表格。
对财务数据使用
slide.addTable()(适用于4:3幻灯片的左下象限):
// 先添加带强调条的标题
slide.addShape(pptx.shapes.RECTANGLE, {
x: 0.3, y: 3.7, w: 0.08, h: 0.25, fill: { color: 'E31937' }
});
slide.addText('关键财务数据与估值', {
x: 0.45, y: 3.7, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
});
// 财务数据表
slide.addTable([
[{ text: '指标', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
{ text: 'FY24', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
{ text: 'FY25E', options: { bold: true, fill: '003366', color: 'FFFFFF' } }],
['收入', '$51.4B', '$54.2B'],
['同比增长', '+6.0%', '+5.5%'],
['EBITDA', '$8.9B', '$9.5B'],
['EBITDA利润率', '17.3%', '17.5%'],
['EPS', '$3.42', '$3.75'],
['市值', '$185B', '—'],
['EV/EBITDA', '12.5x', '11.7x']
], {
x: 0.45, y: 4.1, w: 4.3, h: 3.0, // 标题下方,左下象限
fontFace: 'Arial', fontSize: 10,
border: { pt: 0.5, color: 'CCCCCC' },
valign: 'middle',
colW: [1.8, 1.25, 1.25] // 列宽
});❌ 错误: 纯文本如
注意:FY2024收入增长+1.0%,净利润$5.1B... ❌
错误: 无法正确转换为PowerPoint的HTML表格
对于预测,在结构化表格中使用悲观/基准/乐观情景。
注意: 有关PowerPoint文件创建,请参考PPTX技能。