Compare commits

...

19 commits

Author SHA1 Message Date
dhar
f7a76fa952 Fix links in README.md 2015-02-22 11:44:31 +01:00
Olivier Audard
69a270f604 Updated README 2015-02-22 11:03:01 +01:00
dhar
0b93441169 Merge pull request #12 from andyinabox/async
Added async support
2015-02-22 09:05:48 +01:00
dhar
ac6e85b1c2 Merge pull request #9 from WIHP/master
Added ability to override the arguments
2015-02-22 09:05:11 +01:00
Andy Dayton
696955b345 Added some comments 2015-01-24 21:57:51 -05:00
Andy Dayton
38007b19ad Try adding grunt async and creating a simple index check 2015-01-24 21:43:26 -05:00
Josh Sherman
b21de20c73 Update README.md
Updated links for wkhtmltopdf as the project has moved
2014-12-08 14:54:53 -05:00
Josh Sherman
5b29b57245 Added ability to override the arguments
I needed to be able to use a different set of arguments. Updated to allow
for the args to be passed in the same way the src and dest are. Could
improve by comparing the two arrays instead of simply overriding them.
2014-09-04 11:05:03 -04:00
dhar
4a06d92741 Fix typo in README 2014-06-12 22:04:46 +02:00
Olivier Audard
2bcb115dfe Bump version to 0.4.0
Also update README with lastest changes
2014-06-12 21:51:04 +02:00
dhar
7344889930 Merge pull request #8 from starim/grunt-0.4
Update grunt-wkhtmltopdf with work with Grunt 0.4
2014-06-12 21:22:16 +02:00
Brent Houghton
dad2687587 Improve predictability of the destination for created PDFs.
Now generated PDFs are placed at the destination specified in the
end-users's Gruntfile, rather than appending the source file's path to
the destination path. The created PDFs have the same name as the source
HTML file, excep the file extension is changed to .pdf.
2014-06-12 11:40:03 -07:00
Brent Houghton
469ff6bb42 Update a lingering reference to Grunt 0.3. 2014-06-12 10:26:59 -07:00
Brent Houghton
7f9813423f Update wkthmltopdf task to use Grunt 0.4 multi-task API. 2014-06-09 14:40:24 -07:00
Brent Houghton
847b3f3697 Update project config files to work with Grunt 0.4. 2014-06-09 13:43:41 -07:00
dhar
d783bdedb9 Merge pull request #5 from kud/patch-1
Update README.md
2013-06-23 10:51:59 -07:00
Erwann Mest
b8aad1b7d8 Update README.md 2013-05-29 23:16:36 +02:00
dhar
7dd749efb8 Merge pull request #3 from SonicHedgehog/master
Update Grunt link
2012-11-29 01:37:56 -08:00
SonicHedgehog
f8bfe3cdb9 Update Grunt link 2012-11-29 08:50:33 +01:00
4 changed files with 140 additions and 48 deletions

View file

@ -1,12 +1,14 @@
'use strict';
module.exports = function(grunt) {
// Load grunt tasks automatically
require('load-grunt-tasks')(grunt);
// Project configuration.
grunt.initConfig({
test: {
files: ['test/**/*.js']
},
lint: {
files: ['grunt.js', 'tasks/**/*.js', 'test/**/*.js']
nodeunit: {
all: ['test/**/_test.js']
},
watch: {
files: '<config:lint.files>',
@ -25,16 +27,19 @@ module.exports = function(grunt) {
boss: true,
eqnull: true,
node: true,
es5: true
},
globals: {}
all: [
'Gruntfile.js',
'tasks/{,*/}*.js',
'test/{,*/}*.js',
]
}
});
// Load local tasks.
grunt.loadTasks('tasks');
// Default task.
grunt.registerTask('default', 'lint test');
grunt.registerTask('default', [
'jshint',
'nodeunit:all'
]);
};

View file

@ -10,12 +10,15 @@ Convertion to PDF takes care of `@media print` CSS rules and preserves links to
Download and install wkhtmltopdf from the [project page][wkhtmltopdf_dl].
Make sure `wkhtmltopdf` is accessible from your `PATH` (Try `wkhtmltopdf -V` in your Terminal).
I'm on Mas OS X, so I created the following symlink to my `/usr/local/bin/` folder:
I'm on Mac OS X, so I created the following symlink to my `/usr/local/bin/` folder:
```
ln -s /usr/local/bin/wkhtmltopdf.app/Contents/MacOS/wkhtmltopdf /usr/local/bin/wkhtmltopdf
```
You can also install it via homebrew: `$ brew install wkhtmltopdf`.
### Use it with grunt
Install this grunt plugin next to your project's [grunt.js gruntfile][getting_started] with: `npm install grunt-wkhtmltopdf`
@ -26,11 +29,6 @@ Then add this line to your project's `grunt.js` gruntfile:
grunt.loadNpmTasks('grunt-wkhtmltopdf');
```
[wkhtmltopdf]: http://code.google.com/p/wkhtmltopdf/
[wkhtmltopdf_dl]: http://code.google.com/p/wkhtmltopdf/downloads/list
[grunt]: https://github.com/cowboy/grunt
[getting_started]: https://github.com/cowboy/grunt/blob/master/docs/getting_started.md
## Documentation
Simply add task definition in your gruntfile. See the folllowing example:
@ -51,15 +49,61 @@ Simply add task definition in your gruntfile. See the folllowing example:
Run `grunt wkhtmltopdf` to execute all the targets or `grunt wkhtmltopdf:targetname` to execute a specific target. Every `html` file defined by the `src` parameter will be turned into a PDF and saved to `dest` folder.
### Sending arguments to `wkhtml2pdf`
Arguments sent via the `args` key in the task definition will be forwarded to `wkhtml2pdf` as follow :
```javascript
//...
wkhtmltopdf: {
prod: {
src: 'path/to/some/html/file/*.html',
dest: 'pdf/output/',
args: [
'--dpi', '96',
'--print-media-type',
'--grayscale'
]
}
},
//...
```
Defining custom arguments will override default ones:
```javascript
// grunt-wkhtml2pdf default arguments
var args = [
'--dpi', '96',
'--print-media-type'
]
```
See [wkhtml2pdf documentation][wkhtmltopdf_doc] for available options
## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt][grunt].
## Release History
- *v0.1.0*: First Release
- *v0.2.0*: Fixed compatibility with grunt 0.4
- *v0.5.0*:
- Merged [#12](https://github.com/dharFr/grunt-wkhtmltopdf/pull/12) (Fix [#11](https://github.com/dharFr/grunt-wkhtmltopdf/issues/11)) : Added async support
- Merged [#9](https://github.com/dharFr/grunt-wkhtmltopdf/pull/9) : Added ability to override the arguments
- *v0.4.0*:
- Update project config files to work with Grunt 0.4
- Update wkthmltopdf task to use Grunt 0.4 multi-task API
- Improve predictability of the destination for created PDFs
- *v0.3.0*: grunt-wkhtmltopdf is now a multi-task
- *v0.2.0*: Fixed compatibility with grunt 0.4
- *v0.1.0*: First Release
## License
Copyright (c) 2012 Olivier Audard
Licensed under the MIT license.
[wkhtmltopdf]: http://wkhtmltopdf.org/
[wkhtmltopdf_dl]: http://wkhtmltopdf.org/downloads.html
[wkhtmltopdf_doc]: http://wkhtmltopdf.org/docs.html
[grunt]: https://github.com/gruntjs/grunt
[getting_started]: https://github.com/cowboy/grunt/blob/master/docs/getting_started.md

View file

@ -1,7 +1,7 @@
{
"name": "grunt-wkhtmltopdf",
"description": "Grunt Task that uses wkhtmltopdf to convert HTML files to PDF",
"version": "0.3.0",
"version": "0.4.0",
"homepage": "http://www.dhar.fr/grunt-wkhtmltopdf/",
"author": {
"name": "Olivier Audard",
@ -30,10 +30,13 @@
"test": "grunt test"
},
"dependencies": {
"grunt": "~0.3.9"
"grunt": "~0.4.1"
},
"devDependencies": {
"grunt": "~0.3.9"
"grunt": "~0.4.1",
"grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-nodeunit": "^0.4.0",
"load-grunt-tasks": "^0.4.0"
},
"keywords": [
"gruntplugin",

View file

@ -18,34 +18,74 @@ module.exports = function(grunt) {
grunt.registerMultiTask('wkhtmltopdf', 'Your task description goes here.', function() {
var htmlFiles = grunt.file.expandFiles(this.file.src),
dest = (this.file.dest && this.file.dest !== '') ? this.file.dest + '/' : '';
// using grunt async support so we can be sure task doesn't
// end before PDF processing does: http://gruntjs.com/api/inside-tasks
var done = this.async(),
files = this.files;
grunt.log.writeln("pdf output is: " + dest);
// iterate through each file grouping
files.forEach(function(file, filesIndex) {
htmlFiles.forEach(function(srcpath) {
var dir = dest + srcpath.replace(/.*\/([^\/]+)\/[^\/]+\.html/, '$1');
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);
// 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');
file.src.forEach(function(src, srcIndex) {
// Launch PhantomJS.
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
);
// default args
var 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
];
// overrides the args
if (file.args) {
args = file.args;
}
// adds the src and dest
args = args.concat([src, dest]);
// Launch wkhtmltopdf.
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
],
args: args,
done: function(err) {
if (err) {
grunt.log('>>>', err);
}
// if this is the last src of the last file, we are done.
if((filesIndex+1 >= files.length) && (srcIndex+1 >= file.src.length)) {
done();
}
}
});
});
});
});
};