2

我正在使用 PptxGenJS 库,我使用它的功能之一导致一次下载大约 8 个 powerpoint 文件。它可以工作,但会造成混乱,因此将它们放入单个 zip 文件将大大改善体验。

问题是我找不到这样做的方法,因为 PptxGenJS 中似乎没有任何内容可以让您在创建文件后对其进行操作,它只是将其作为下载直接发送。

有没有办法拦截这些下载,将它们添加到 zip 文件中,然后将该 zip 发送给用户?

4

2 回答 2

0

'jszip'作为 的第一个参数save、回调和 jszip 文件类型传入,如下所示:

var p1 = new PptxGenJS();
p1.addNewSlide().addText('Presentation 1');
var p1file = p1.save('jszip', function(file1) {
    var p2 = new PptxGenJS();
    p2.addNewSlide().addText('Presentation 2');
    p2.save('jszip', function(file2) {
        var zip = new JSZip();
        zip.file('pres1.pptx', file1);
        zip.file('pres2.pptx', file2);

        zip.generateAsync({type: 'blob'}).then(function(content) {
            saveAs(content, 'multipres.zip'); // requires filesaver.js
        });
    }, 'blob');
}, 'blob');

如果要归档的演示文稿超过 2 个,则可能需要使用异步而不是嵌套回调。

于 2018-01-11T02:08:59.753 回答
0

对于其他有类似问题的人,这就是我最终得到的结果:

var p1 = new PptxGenJS();
var p2 = new PptxGenJS();
var p3 = new PptxGenJS();
var p4 = new PptxGenJS();

p1.addNewSlide().addText('Annual report');
p2.addNewSlide().addText('Monthly report');
p3.addNewSlide().addText('Weekly report');
p4.addNewSlide().addText('Daily report');

pptxArr = [[p1,"Annual report"],[p2,"Monthly report"],[p3,"Weekly report"],[p4,"Daily report"]];

CreateZip(pptxArr);

function CreateZip(pptxArr)
{
    var zip = new JSZip();

    pptxArr.forEach(function(pptx, index)
    {
        if (index < pptxArr.length-1)
        {   
            pptx[0].save('jszip', function(pres) {
                zip.file(pptx[1]+'.pptx', pres)
            }, 'blob');
        }
        else
        {
            var file = pptx[0].save('jszip', function(pres) {
                zip.file(pptx[1]+'.pptx', pres)

                zip.generateAsync({type: 'blob'}).then(function(content) {
                    saveAs(content, 'multipres.zip');
                });
            }, 'blob');
        }
    });
}
于 2018-01-11T06:34:13.613 回答