一个运行在浏览器中,可以将 .pptx 文件转为可读的 JSON 数据的 JavaScript 库。
与其他的pptx文件解析工具的最大区别在于:
- 直接运行在浏览器端;
- 解析结果是可读的 JSON 数据,而不仅仅是把 XML 文件内容原样翻译成难以理解的 JSON。
在线DEMO:https://pipipi-pikachu.github.io/pptxtojson/
本仓库诞生于项目 PPTist ,希望为其“导入 .pptx 文件功能”提供一个参考示例。不过就目前来说,解析出来的PPT信息与源文件在样式上还是存在差异。
但如果你只是需要提取PPT文件的文本内容、媒体资源信息、结构信息等,或者对排版/样式精准度没有特别高的要求,那么 pptxtojson 可能会对你有帮助。
输出的JSON中,所有数值长度值单位都为pt(point)
注意:在0.x版本中,所有输出的长度值单位都是px(像素)
npm install pptxtojson
<input type="file" accept="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>import { parse } from 'pptxtojson'
document.querySelector('input').addEventListener('change', evt => {
const file = evt.target.files[0]
const reader = new FileReader()
reader.onload = async e => {
const json = await parse(e.target.result)
console.log(json)
}
reader.readAsArrayBuffer(file)
})const pptxtojson = require('pptxtojson/dist/index.cjs')
const fs = require('fs')
async function func() {
const buffer = fs.readFileSync('test.pptx')
const json = await pptxtojson.parse(buffer.buffer)
console.log(json)
}
func(){
"slides": [
{
"fill": {
"type": "color",
"value": "#FF0000"
},
"elements": [
{
"left": 0,
"top": 0,
"width": 72,
"height": 72,
"borderColor": "#1F4E79",
"borderWidth": 1,
"borderType": "solid",
"borderStrokeDasharray": 0,
"fill": {
"type": "color",
"value": "#FF0000"
},
"content": "<p style=\"text-align: center;\"><span style=\"font-size: 18pt;font-family: Calibri;\">TEST</span></p>",
"isFlipV": false,
"isFlipH": false,
"rotate": 0,
"vAlign": "mid",
"name": "矩形 1",
"type": "shape",
"shapType": "rect"
},
// more...
],
"layoutElements": [
// more...
],
"note": "演讲者备注内容..."
},
// more...
],
"themeColors": ['#4472C4', '#ED7D31', '#A5A5A5', '#FFC000', '#5B9BD5', '#70AD47'],
"size": {
"width": 960,
"height": 540
}
}-
幻灯片主题色
themeColors -
幻灯片尺寸
size- 宽度
width - 高度
height
- 宽度
-
幻灯片页面
slides-
页面备注
note -
页面背景填充(颜色、图片、渐变)
fill- 纯色填充
type='color' - 图片填充
type='image' - 渐变填充
type='gradient'
- 纯色填充
-
页面切换动画
transition- 类型
type - 持续时间
duration - 方向
direction
- 类型
-
页面内元素
elements/ 母版元素layoutElements-
文字
- 类型
type='text' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 边框颜色
borderColor - 边框宽度
borderWidth - 边框类型(实线、点线、虚线)
borderType - 非实线边框样式
borderStrokeDasharray - 阴影
shadow - 填充(颜色、图片、渐变)
fill - 内容文字(HTML富文本)
content - 垂直翻转
isFlipV - 水平翻转
isFlipH - 旋转角度
rotate - 垂直对齐方向
vAlign - 是否为竖向文本
isVertical - 元素名
name
- 类型
-
图片
- 类型
type='image' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 边框颜色
borderColor - 边框宽度
borderWidth - 边框类型(实线、点线、虚线)
borderType - 非实线边框样式
borderStrokeDasharray - 裁剪形状
geom - 裁剪范围
rect - 图片地址(base64)
src - 旋转角度
rotate
- 类型
-
形状
- 类型
type='shape' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 边框颜色
borderColor - 边框宽度
borderWidth - 边框类型(实线、点线、虚线)
borderType - 非实线边框样式
borderStrokeDasharray - 阴影
shadow - 填充(颜色、图片、渐变)
fill - 内容文字(HTML富文本)
content - 垂直翻转
isFlipV - 水平翻转
isFlipH - 旋转角度
rotate - 形状类型
shapType - 垂直对齐方向
vAlign - 形状路径
path - 元素名
name
- 类型
-
表格
- 类型
type='table' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 边框(4边)
borders - 表格数据
data - 行高
rowHeights - 列宽
colWidths
- 类型
-
图表
- 类型
type='chart' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 图表数据
data - 图表主题色
colors - 图表类型
chartType - 柱状图方向
barDir - 是否带数据标记
marker - 环形图尺寸
holeSize - 分组模式
grouping - 图表样式
style
- 类型
-
视频
- 类型
type='video' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 视频blob
blob - 视频src
src
- 类型
-
音频
- 类型
type='audio' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 音频blob
blob
- 类型
-
公式
- 类型
type='math' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 公式图片
picBase64 - LaTeX表达式(仅支持常见结构)
latex - 文本(文本和公式混排时存在)
text
- 类型
-
Smart图
- 类型
type='diagram' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 子元素集合
elements
- 类型
-
多元素组合
- 类型
type='group' - 水平坐标
left - 垂直坐标
top - 宽度
width - 高度
height - 子元素集合
elements
- 类型
-
-
https://github.com/pipipi-pikachu/pptxtojson/blob/master/dist/index.d.ts
本仓库大量参考了 PPTX2HTML 和 PPTXjs 的实现。
与它们不同的是:PPTX2HTML 和 PPTXjs 是将PPT文件转换为能够运行的 HTML 页面,而 pptxtojson 做的是将PPT文件转换为干净的 JSON 数据,且在原有基础上进行了大量优化补充(包括代码质量和提取信息的完整度和准确度)。
MIT License | Copyright © 2020-PRESENT pipipi-pikachu