Home

Awesome

🎨 pptxtojson

一个运行在浏览器中,可以将 .pptx 文件转为可读的 JSON 数据的 JavaScript 库。

与其他的pptx文件解析工具的最大区别在于:

  1. 直接运行在浏览器端;
  2. 解析结果是可读的 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)
})
// 输出示例
{
	"slides": {
		"fill": {
			"type": "color",
			"value": "#FF0000"
		},
		"elements": [
			{
				"left":	0,
				"top": 0,
				"width": 72,
				"height":	72,
				"borderColor": "#1f4e79",
				"borderWidth": 1,
				"borderType": "solid",
				"borderStrokeDasharray": 0,
				"fillColor": "#5b9bd5",
				"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...
		],
	},
	"size": {
		"width": 960,
		"height": 540
	}
}

📕 功能支持

幻灯片尺寸

proptype描述
widthnumber宽度
heightnumber高度

页面背景

proptype描述
type'color' 丨 'image' 丨 'gradient'背景类型
valueSlideColorFill 丨 SlideImageFill 丨 SlideGradientFill背景值

页内元素

文字

proptype描述
type'text'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
borderColorstring边框颜色
borderWidthnumber边框宽度
borderType'solid' 丨 'dashed' 丨 'dotted'边框类型
borderStrokeDasharraystring非实线边框样式
shadowShadow阴影
fillColorstring填充色
contentstring内容文字(HTML富文本)
isFlipVboolean垂直翻转
isFlipHboolean水平翻转
rotatenumber旋转角度
vAlignstring垂直对齐方向
isVerticalboolean是否为竖向文本
namestring元素名

图片

proptype描述
type'image'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
srcstring图片地址(base64)
rotatenumber旋转角度

形状

proptype描述
type'shape'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
borderColorstring边框颜色
borderWidthnumber边框宽度
borderType'solid' 丨 'dashed' 丨 'dotted'边框类型
borderStrokeDasharraystring非实线边框样式
shadowShadow阴影
fillColorstring填充色
contentstring内容文字(HTML富文本)
isFlipVboolean垂直翻转
isFlipHboolean水平翻转
rotatenumber旋转角度
shapTypestring形状类型
vAlignstring垂直对齐方向
pathstring路径(仅自定义形状存在)
namestring元素名

表格

proptype描述
type'table'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
borderColorstring边框颜色
borderWidthnumber边框宽度
borderType'solid' 丨 'dashed' 丨 'dotted'边框类型
dataTableCell[][]表格数据

图表

proptype描述
type'chart'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
dataChartItem[] 丨 ScatterChartData图表数据
chartTypeChartType图表类型
barDir'bar' 丨 'col'柱状图方向
markerboolean是否带数据标记
holeSizestring环形图尺寸
groupingstring分组模式
stylestring图表样式

视频

proptype描述
type'video'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
blobstring视频blob
srcstring视频src

音频

proptype描述
type'audio'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
blobstring音频blob

Smart图

proptype描述
type'diagram'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
elements(Shape 丨 Text)[]子元素集合

多元素组合

proptype描述
type'group'类型
leftnumber水平坐标
topnumber垂直坐标
widthnumber宽度
heightnumber高度
elementsElement[]子元素集合

更多类型请参考 👇

https://github.com/pipipi-pikachu/pptxtojson/blob/master/dist/index.d.ts

🙏 感谢

本仓库大量参考了 PPTX2HTMLPPTXjs 的实现。

与它们不同的是,PPTX2HTML 和 PPTXjs 是将PPT文件转换为能够运行的 HTML 页面,而 pptxtojson 做的是将PPT文件转换为干净的 JSON 数据

📄 开源协议

MIT License | Copyright © 2020-PRESENT pipipi-pikachu