Would you accept a PR to allow loading pptx from buffer OR file path?
MP70 opened this issue · comments
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()
:
Lines 99 to 103 in 7e137b5
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?
Has there been any follow up regarding this? I seem to be in a similar position.
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.