diff --git a/tasks/wkhtmltopdf.js b/tasks/wkhtmltopdf.js
index c28506c..6f6dc05 100644
--- a/tasks/wkhtmltopdf.js
+++ b/tasks/wkhtmltopdf.js
@@ -19,32 +19,53 @@ module.exports = function(grunt) {
grunt.registerMultiTask('wkhtmltopdf', 'Your task description goes here.', function() {
this.files.forEach(function(file) {
- var srcpath = file.src.toString(),
- dest = (file.dest && file.dest !== '') ? file.dest + '/' : '';
- grunt.log.writeln("pdf output is: " + dest);
+ var pathlib = require('path');
+ // calculate the destination directory and ensure it exists, since
+ // wkhtmltopdf won't create the PDF if the destination directory doesn't
+ // exist
+ var destPath = file.dest;
+ if (grunt.file.isFile(file.dest)) {
+ destPath = pathlib.dirname(file.dest);
+ }
+ grunt.file.mkdir(destPath);
- var dir = dest + srcpath.replace(/.*\/([^\/]+)\/[^\/]+\.html/, '$1');
+ file.src.forEach(function(src) {
- // Create dest folder as wkhtmltopdf won't generate output if it doesn't exist
- grunt.file.mkdir(dir);
- var destpath = dir + '/' +
- srcpath.replace(/.*\/([^\/]+)\.html/, '$1.pdf');
-
- // Launch PhantomJS.
- helper.convert({
- code: 90,
- args: [
- '--dpi', '96', // workarround to wkhtmltopdf letter-spacing bug (see http://code.google.com/p/wkhtmltopdf/issues/detail?id=72)
- '--print-media-type', // Use @print media type
- srcpath,
- destpath
- ],
- done: function(err) {
- if (err) {
- grunt.log('>>>', err);
- }
+ var dest = file.dest;
+ // wkhtmltopdf seems to require that the destination be a file
+ // location, not a directory, so if the given destination is a
+ // directory then append the name of the source file but with the
+ // extension changed to .pdf
+ if (grunt.file.isDir(dest)) {
+ var srcFileName = pathlib.basename(src);
+ var srcFileExtension = pathlib.extname(src);
+ var destFileName = srcFileName.replace(
+ new RegExp(srcFileExtension + "$"), // match only the end of the string
+ ".pdf"
+ );
+ dest = pathlib.join(destPath + destFileName);
}
+
+ grunt.log.writeln(
+ "Converting " + src + " -> " + dest
+ );
+
+ // Launch PhantomJS.
+ helper.convert({
+ code: 90,
+ args: [
+ '--dpi', '96', // workarround to wkhtmltopdf letter-spacing bug (see http://code.google.com/p/wkhtmltopdf/issues/detail?id=72)
+ '--print-media-type', // Use @print media type
+ src,
+ dest
+ ],
+ done: function(err) {
+ if (err) {
+ grunt.log('>>>', err);
+ }
+ }
+ });
});
});
});