Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Would you accept a PR to allow loading pptx from buffer OR file path? #119

Open
MP70 opened this issue Apr 20, 2023 · 2 comments
Open

Would you accept a PR to allow loading pptx from buffer OR file path? #119

MP70 opened this issue Apr 20, 2023 · 2 comments

Comments

@MP70
Copy link

MP70 commented Apr 20, 2023

Issue with loading PowerPoint file from buffer

The save() method allows you to specify either a callback (passing buffer) or file path, but when loading a PowerPoint file, you must pass a file path. This can be pretty inconvenient in cases where you already have the PowerPoint file contents in a buffer.

Proposed solution

To address this issue, can we please add support for loading from a buffer as well as a file path.

I've quickly scanned your code, and at first glance it looks like it's as simple as changing loadExistingPPTX() :

async loadExistingPPTX(done) {
if (this.templateFilePath !== null) {
await this.powerPointFactory.loadFromRawFileData(fs.readFileSync(this.templateFilePath));
}
}

To something like:

async loadExistingPPTX(done) {
    // Throw an error if templateFilePath is null or undefined
    if (!this.templateFilePath) {
        throw new Error('Input is null or undefined. Input must be a file path or buffer.');
    }

    try {
        // Check if templateFilePath is a string (file path)
        if (typeof this.templateFilePath === 'string') {
            // Load PowerPoint file from the specified file path using fs.readFileSync()
            await this.powerPointFactory.loadFromRawFileData(fs.readFileSync(this.templateFilePath));
        }
        // Check if templateFilePath is a buffer
        else if (Buffer.isBuffer(this.templateFilePath)) {
            // Load PowerPoint file from the buffer directly using powerPointFactory.loadFromRawFileData()
            await this.powerPointFactory.loadFromRawFileData(this.templateFilePath);
        }
        // If templateFilePath is neither a string nor a buffer, throw an error
        else {
            throw new Error('Invalid input type. Input must be a file path or buffer.');
        }
    } catch (error) {
        // Catch any errors that occur during loading and rethrow with a more descriptive message
        throw new Error(`Error loading PPTX file: ${error.message}`);
    }
}

Obviously we'd also need to change the variable name to templateFile or similar and any other housekeeping as needed.

Would you accept a PR from me along these lines to add this feature?

@MP70 MP70 changed the title Would you accept a PR to allow loading pptx from buffer instead of file path? Would you accept a PR to allow loading pptx from buffer OR file path? Apr 20, 2023
@BrandonvanB
Copy link

Has there been any follow up regarding this? I seem to be in a similar position.

@MP70
Copy link
Author

MP70 commented Jul 14, 2023

This project seems pretty dead IMO. I ended up not using it. Feel free to use my code above as a starting point if you'd like, consider it MIT licensed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants