function PDFImage(pdfFilePath, options) { if (!options) options = {}; this.pdfFilePath = pdfFilePath; this.pdfFileBaseName = path.basename(pdfFilePath, ".pdf"); this.setConvertOptions(options.convertOptions); this.setConvertExtension(options.convertExtension); this.useGM = options.graphicsMagick || false; this.outputDirectory = options.outputDirectory || path.dirname(pdfFilePath); }
n/a
function PDFImage(pdfFilePath, options) { if (!options) options = {}; this.pdfFilePath = pdfFilePath; this.pdfFileBaseName = path.basename(pdfFilePath, ".pdf"); this.setConvertOptions(options.convertOptions); this.setConvertExtension(options.convertExtension); this.useGM = options.graphicsMagick || false; this.outputDirectory = options.outputDirectory || path.dirname(pdfFilePath); }
n/a
constructConvertCommandForPage = function (pageNumber) { var pdfFilePath = this.pdfFilePath; var outputImagePath = this.getOutputImagePathForPage(pageNumber); var convertOptionsString = this.constructConvertOptions(); return util.format( "%s %s'%s[%d]' '%s'", this.useGM ? "gm convert" : "convert", convertOptionsString ? convertOptionsString + " " : "", pdfFilePath, pageNumber, outputImagePath ); }
...
return optionName;
}
}, this).join(" ");
},
convertPage: function (pageNumber) {
var pdfFilePath = this.pdfFilePath;
var outputImagePath = this.getOutputImagePathForPage(pageNumber);
var convertCommand = this.constructConvertCommandForPage(pageNumber);
var promise = new Promise(function (resolve, reject) {
function convertPageToImage() {
exec(convertCommand, function (err, stdout, stderr) {
if (err) {
return reject({
message: "Failed to convert page to image",
...
constructConvertOptions = function () { return Object.keys(this.convertOptions).sort().map(function (optionName) { if (this.convertOptions[optionName] !== null) { return optionName + " " + this.convertOptions[optionName]; } else { return optionName; } }, this).join(" "); }
...
},
setConvertExtension: function (convertExtension) {
this.convertExtension = convertExtension || "png";
},
constructConvertCommandForPage: function (pageNumber) {
var pdfFilePath = this.pdfFilePath;
var outputImagePath = this.getOutputImagePathForPage(pageNumber);
var convertOptionsString = this.constructConvertOptions();
return util.format(
"%s %s'%s[%d]' '%s'",
this.useGM ? "gm convert" : "convert",
convertOptionsString ? convertOptionsString + " " : "",
pdfFilePath, pageNumber, outputImagePath
);
},
...
constructGetInfoCommand = function () { return util.format( "pdfinfo '%s'", this.pdfFilePath ); }
...
info[RegExp.$1] = RegExp.$2;
}
});
return info;
},
getInfo: function () {
var self = this;
var getInfoCommand = this.constructGetInfoCommand();
var promise = new Promise(function (resolve, reject) {
exec(getInfoCommand, function (err, stdout, stderr) {
if (err) {
return reject({
message: "Failed to get PDF'S information",
error: err,
stdout: stdout,
...
convertPage = function (pageNumber) { var pdfFilePath = this.pdfFilePath; var outputImagePath = this.getOutputImagePathForPage(pageNumber); var convertCommand = this.constructConvertCommandForPage(pageNumber); var promise = new Promise(function (resolve, reject) { function convertPageToImage() { exec(convertCommand, function (err, stdout, stderr) { if (err) { return reject({ message: "Failed to convert page to image", error: err, stdout: stdout, stderr: stderr }); } return resolve(outputImagePath); }); } fs.stat(outputImagePath, function (err, imageFileStat) { var imageNotExists = err && err.code === "ENOENT"; if (!imageNotExists && err) { return reject({ message: "Failed to stat image file", error: err }); } // convert when (1) image doesn't exits or (2) image exists // but its timestamp is older than pdf's one if (imageNotExists) { // (1) convertPageToImage(); return; } // image exist. check timestamp. fs.stat(pdfFilePath, function (err, pdfFileStat) { if (err) { return reject({ message: "Failed to stat PDF file", error: err }); } if (imageFileStat.mtime < pdfFileStat.mtime) { // (2) convertPageToImage(); return; } return resolve(outputImagePath); }); }); }); return promise; }
...
## Usage
```javascript
var PDFImage = require("pdf-image").PDFImage;
var pdfImage = new PDFImage("/tmp/slide.pdf");
pdfImage.convertPage(0).then(function (imagePath) {
// 0-th page (first page) of the slide.pdf is available as slide-0.png
fs.existsSync("/tmp/slide-0.png") // => true
});
```
## Express
...
getInfo = function () { var self = this; var getInfoCommand = this.constructGetInfoCommand(); var promise = new Promise(function (resolve, reject) { exec(getInfoCommand, function (err, stdout, stderr) { if (err) { return reject({ message: "Failed to get PDF'S information", error: err, stdout: stdout, stderr: stderr }); } return resolve(self.parseGetInfoCommandOutput(stdout)); }); }); return promise; }
...
}
return resolve(self.parseGetInfoCommandOutput(stdout));
});
});
return promise;
},
numberOfPages: function () {
return this.getInfo().then(function (info) {
return info["Pages"];
});
},
getOutputImagePathForPage: function (pageNumber) {
return path.join(
this.outputDirectory,
this.pdfFileBaseName + "-" + pageNumber + "." + this.convertExtension
...
getOutputImagePathForPage = function (pageNumber) { return path.join( this.outputDirectory, this.pdfFileBaseName + "-" + pageNumber + "." + this.convertExtension ); }
...
this.convertOptions = convertOptions || {};
},
setConvertExtension: function (convertExtension) {
this.convertExtension = convertExtension || "png";
},
constructConvertCommandForPage: function (pageNumber) {
var pdfFilePath = this.pdfFilePath;
var outputImagePath = this.getOutputImagePathForPage(pageNumber);
var convertOptionsString = this.constructConvertOptions();
return util.format(
"%s %s'%s[%d]' '%s'",
this.useGM ? "gm convert" : "convert",
convertOptionsString ? convertOptionsString + " " : "",
pdfFilePath, pageNumber, outputImagePath
);
...
numberOfPages = function () { return this.getInfo().then(function (info) { return info["Pages"]; }); }
n/a
parseGetInfoCommandOutput = function (output) { var info = {}; output.split("\n").forEach(function (line) { if (line.match(/^(.*?):[ \t]*(.*)$/)) { info[RegExp.$1] = RegExp.$2; } }); return info; }
...
return reject({
message: "Failed to get PDF'S information",
error: err,
stdout: stdout,
stderr: stderr
});
}
return resolve(self.parseGetInfoCommandOutput(stdout));
});
});
return promise;
},
numberOfPages: function () {
return this.getInfo().then(function (info) {
return info["Pages"];
...
setConvertExtension = function (convertExtension) { this.convertExtension = convertExtension || "png"; }
...
function PDFImage(pdfFilePath, options) {
if (!options) options = {};
this.pdfFilePath = pdfFilePath;
this.pdfFileBaseName = path.basename(pdfFilePath, ".pdf");
this.setConvertOptions(options.convertOptions);
this.setConvertExtension(options.convertExtension);
this.useGM = options.graphicsMagick || false;
this.outputDirectory = options.outputDirectory || path.dirname(pdfFilePath);
}
PDFImage.prototype = {
constructGetInfoCommand: function () {
...
setConvertOptions = function (convertOptions) { this.convertOptions = convertOptions || {}; }
...
function PDFImage(pdfFilePath, options) {
if (!options) options = {};
this.pdfFilePath = pdfFilePath;
this.pdfFileBaseName = path.basename(pdfFilePath, ".pdf");
this.setConvertOptions(options.convertOptions);
this.setConvertExtension(options.convertExtension);
this.useGM = options.graphicsMagick || false;
this.outputDirectory = options.outputDirectory || path.dirname(pdfFilePath);
}
PDFImage.prototype = {
...