【PptxGenJS】一些基本概念介绍

382 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

官方文档

PptxGenJS官方文档

位置属性和尺寸属性

像元素的 xy 属性叫做位置属性,它代表元素在页面中的位置,它的坐标意义就是元素左上角的点在页面上的位置。

像元素的 wh 属性叫做尺寸属性,它代表元素的宽高,即元素在页面上占据的空间。

这4个属性的值都有两种形式,一种是具体的数值(单位英寸),一种是百分比。xw 这两个属性的百分比是相对于页面的宽度来计算的,yh 这两个属性的百分比则是相对于页面的高度来计算的。

image.png

要注意的是,无论是文本框,形状,图像还是表格,这些所有元素都必须指明它们的位置属性和尺寸属性,这样才能正常渲染。

单位

在PptxGenJS中,像元素的xy坐标,wh宽高这些属性的单位都是英寸,我们如果想要把元素准确的放置在页面的某个地方,就需要知道它距离页面左上角原点的相对位置,比如像下面的这个代码:

 slide.addText('我是文本框', {x:1,y:1,w:1,h:1});

它意味着在相对页面左上角水平距离1英寸,垂直距离1英寸处添加一个宽为1英寸,高为1英寸,文本内容为“我是文本框”的一个文本框。

但是在我们平时使用的WPS中,元素在页面中的位置使用的单位是厘米,因此,我们需要写一个转换函数,来将厘米转换成英寸,从而使的元素能在页面中正确显示。

image.png

通过百度我们可以知道 1 (cm) = 0.393700787402 (inch)

image.png

因此可以写出下面的代码:

/**
 * 厘米转英寸
 * @param {number} cm 厘米 
 */
export function inch(cm) {
    // 不是数值类型就返回0
    return typeof cm === 'number' ? cm * 0.3937007 : 0
}

使用方法如下:

slide.addText('我是文本框', {
    x: inch(1),
    y: inch(1),
    w: inch(1),
    h: inch(1)
});

上面的代码表示,在页面相对于左上角水平位置1厘米,垂直位置1厘米处,放置一个宽为1厘米,高为1厘米,文本内容为“我是文本框”的文本框。

又因为,页面上的每个元素都会用到 x,y,w,h 这4个属性,我们重复的写inch也是有点冗余,因此我们对inch函数进行再进一步的封装,封装为 xywh() 函数,封装代码如下:

/**
 * 位置属性和大小属性辅助函数
 */
export function xywh(x, y, w, h) {
    return {
        x: inch(x),
        y: inch(y),
        w: inch(w),
        h: inch(h)
    }
}

经过这一层封装后,利用对象解构,像上面添加文本框的代码我们就可以写成如下形式:

slide.addText('我是文本框', { ...xywh(1, 1, 1, 1) });

这样就可以使的代码更加整洁。

元素层级

在PptxGenJS中,后写的元素要比先写的元素层级要高,比如说下面的代码:

slide.addText('我是先书写的文本框1', { ...xywh(1, 1, 1, 1) });
slide.addText('我是后书写的文本框2', { ...xywh(1, 1, 1, 1) });

文本框1和2在页面上占据相同的位置,因为文本框2的代码要后于文本框1书写,因此,文本框1的内容会被文本框2遮挡。

颜色

这里面的颜色只支持16进制的颜色值,要注意的是,颜色值中不能带上#号,比如说我想给文本颜色设定为红色,代码要如下:

{color:'FF0000'}