Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
LoicMahieu committed Sep 16, 2013
1 parent d5f1880 commit e42c202
Show file tree
Hide file tree
Showing 5 changed files with 231 additions and 15 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
test/generate
node_modules
.DS_Store
17 changes: 17 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
REPORTER ?= dot
TESTS = $(shell find ./test/* -name "*.test.js")

# test commands

clean:
rm -f test/generate/*.pdf

test:
@make clean && \
./node_modules/mocha/bin/mocha \
--timeout 3000 \
--colors \
--reporter $(REPORTER) \
$(TESTS)

.PHONY: test
75 changes: 75 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# PDFKitJs

Create PDFs using plain old HTML+CSS. Uses [wkhtmltopdf](https://github.com/antialize/wkhtmltopdf) on the back-end which renders HTML using Webkit.

Hightly inspired by [PDFKit](https://github.com/pdfkit/pdfkit) written in Ruby

## Install

### PDFKit
```bash
npm install pdfkit
```
### wkhtmltopdf

<https://github.com/pdfkit/pdfkit/wiki/Installing-WKHTMLTOPDF>

## Usage
```js
// PDFKit support multiples types (url, file, html) and any options for wkhtmltopdf
// run `wkhtmltopdf --extended-help` for a full list of options
var PDFKit = require('pdfkitjs');

pdf = new PDFKit('url', 'http://google.com');

pdf.toFile('google.pdf', function (err, file) {
console.log('File ' + file + ' written');
});
```

## API

### PDFKit(type, url_file_or_html[, options[, spawnOptions[, logger]]])

`options` : Object corresponding on wkhtmltopdf arguments. run `wkhtmltopdf --extended-help` for a full list of options

`spawnOptions` : Options passed to [`child_process.spawn`](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)

* `url`
```js
new PDFKit('url', 'http://google.com')
```

* `file`
```js
new PDFKit('file', 'path/to/some.html')
```

* `html`
```js
new PDFKit('html', '<h1>Hello</h1>')
```


### Logger

You can pass a logger object that implemnts `log`, `warn`, `debug` methods. Default logger:
```js
var baseLogger = {
log: console.log,
warn: console.warn,
debug: console.log
};
```

To silent all logs, you can pass `false`.


### Output

TODO


## Copyright

Copyright (c) 2010 Loïc Mahieu.
131 changes: 130 additions & 1 deletion test/fixtures/from_file.html
Original file line number Diff line number Diff line change
@@ -1,2 +1,131 @@

<h1>wkhtmltopdf powa!</h1>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>404 - Page not found</title>
</head>
<body>
<style>
body {
background: #DFDFDF url(data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUyOUNGQTg5NDBCQzExRTE4MkFCOThDNzMzMDg1MzRFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUyOUNGQThBNDBCQzExRTE4MkFCOThDNzMzMDg1MzRFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTI5Q0ZBODc0MEJDMTFFMTgyQUI5OEM3MzMwODUzNEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NTI5Q0ZBODg0MEJDMTFFMTgyQUI5OEM3MzMwODUzNEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCABQAFADAREAAhEBAxEB/8QAYwAAAwEBAQEAAAAAAAAAAAAAAgMEAQAFCgEBAAAAAAAAAAAAAAAAAAAAABAAAwADAQACAgICAwEBAAAAAQIDERIEEyEiABQxIzJCQTMkNAURAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APrs6TyxRSKWgyV3xzec4UlK3W4/vzzk1DTXLDLFD9Vx9gHJR1v0LdQ+05uiYNfQyahu6OwVaS6F5C/8qKeI+qzIBDryZUpWrQM6tbpQXoZNOc4KEgiuqkjYKNNFZlKf9bTAIWBlZivT0QukWZ5MeVsNUKrq7Skx5CHndWLY+oZcfY5ASHo8pldllXpnIyoLfrIpKuVEFkzQmTaRZXONmf65mQhAJSXnpFDO3M/7VX6aehm1o1TqP2UTlGGioWlMnQAspALFfwPS6JWK+vQC0pYPllAtUqpky0i8yto0crstHDAEkFW/kEJMc5qaOANaSasXactOjAZQzkuwtZFb6NNzRiEX/HIaV9KGrWQhPcXF/OKczVMZTi4qKdEhojlG+wAZlGCMEJjQgTstBLJuJ30CyFuemjP0e60G6MqTkMkKtBg6oV/Aez78yepLxRI1nQ26ZlL8yekazsQika9CLuQF+oYlSCVDg8o97EnqJnjzZ7onPQzEqCbRSaQwiAlCNAQq7Y+WIMajYiPXslu7ETUetbpzLO1EekkpQ0ZgwLq+XwCFdcBQhWQwrES9IPDxO/oTOSO7AxQ9M55C0dGmiArkLnXBC4weEq2nMk+USj2M4G9ZzeJvGUqqiNNJqwz8/KklcbfgSPMQ8p3YUnzhkSetJ9KJNLKgp1iczRIof5Ryd8fBK/gMVRR06CK0aiyrsPN66GfQ0x6c/OjUZ2MshQKMGXYEBXUALqRISgKyknrJFS96VTnpGaoInqz0dIVskZOgwGBABAcZOvMvPKUzI2PI1KFTJC6c1QKCak8/9jfAE5TZCC2pyrAMaTZKseTlctzwVfb2LKzzkG1ip6Ou3rnKsoB3XXUM27A6Zk2WaVAIsGWz8/TTpBboRG8f67WLnlj8UC/5OAMNk/gHmgD1frHSzN8HEjJa895k1gGVQoiU1zNAb0AwRhfwBq3RlRzi3SztchD0pbHYZRWTlelwpnKgiQc7SXJbJfP4Cp3WlRP9irSHVq3tGSMv/wCgxnz4BdEOR+yScqcBRltnCgDm8hUBOQUmHiqeLvH7oBZnEapHn6OmYRSr1UO4HwQVP4ABHtPzkJuJzsqSrGoHZmZPN4UIM+JSA9AcrRZuXBG51BgU17N59JD1LO73c5dH7TGLrzWKBjOY0AZCEbAAYjUA1VIEvGZwK87UpR5M7mnynRToFLKeZDM6zJckgL87r+BNW2is/Q1m9J00Xehs0ZhmcB9YhpQUHY19VUDfbLZYF1NmNfVieh6V54rKFXXbKe9+ssi9FIo5JmqycRFVX7/KgPQSjBAydXhdrXe3RWGzkTBXnk4rZhNIeyqxZfMFiAyswyE7U0PSlKRd/NlWwSS4ojJmk/MKJ1mr6SLPIlwNQ2S5BSIsnS1/JZhvOKtVzwrASPO9Rz+yZS3MZf57EHBH8sAFHTKzTjOT12LBecJemUe9YOlKh51PMBLmq6kArBh8MTqQGDs47Na8vvl/QU6b/wDlQqZzDsKiJHsvVqPl2cEhQDnUFJLnYDcD36Etzhns0h/a19udqItVk1B0vgMqOvxkMd1/AdaZoII1CnNV5kPypQ0KPKi2Qs9qK3P+u2CQFUKDj+FH4CaUo0NqTlPplODLE1UN5rXpldDSLgmgm4P+5ONDuSy/gAGXqSjTTvdvacW5V6j1pzBPIpWVAWknTGuyldz8k5ydR+BXpJYtzIHanwqWRI9Wb0SyX0nd6v8ATzODoF2YgfyFAKXeFm6u2kQ9eFgkv/ppSIqj77SO1JQElYpKarQEFhn0P4Dao05ByVo2n36P2fJBKNKUR9OfzNSUrqArEoUUhsqCQ2TGdUFEppTopRJ2CK27g3a7rWwFQrX+pR6GmhwFCsQCVpCiIqPLlfVC2C/PzznWZlQuyN8H0VU2oACPgDKqQGdZNBPoLv4Rae3iISZ1ngSNOxSkvMtQUx/Wx9ApGSQgaxSPQtHeZd09JTSPPKkObLlKzH1urDouAZNszbYw7oSwGvS6K7RVUhos5y85K3PRGfmmtqN1KV6cWQsEVSzJqHLKVIKAd5csHV6Rmze1LeStOb+qSpWnRJ2JNOzUKv8AzP6aklFB7TWkirzKc5fn+TyrKiBV8zV1rK3rlIlmHkV8hsSoPyE20HVWI52EGX9VCPOoDLPa0qpIyMnfp3DhckupfA/kGvWg0yiFNGbopJpmiT6hCRedklI6rLBDTVXP1yc67gnpEoTkeejyolVIekfapNbM0Z2jSk+eK4utE+yuFQrgD+AZGFDUYjAoGr4Zk7ofaLnpWqTJ5nV78s2kpJyioFJzn8DpGxpGtEbnpSrKJibMjhUqSt5BoCvs5y1BqS/8r8A/gC4PRAFK1c3Q0VOoNzzRFk5lzjnXp1jpfnyGTZ9wwbYFiAd/R5QlKhUo0lu8OvUb1eLUtfbyoj1Ey4P+0j8N9kBCVUC+kJM1BSvNUonqsLrWfN7snpVXCXehaZIWTlApOSpcH8nQ5rRqz51eUj418aBF/bqVrSbqyL5NeLruPFWUD5bIwB1Sqxo/MRPl8aIlH9JpvFlmXU/tM60Fg1U1RaOw+MMQ34Cr88HPPlNo1E4y5+m4nSl325gWeSNSfjO4+UGrFMli3+YN1fomoh0+7Rb1dgav59CR5xHmi9HlPpmaQcZJyo+P+zLKBdQcNXRkmMMqNa86VivP7c60eVapdpNO6sB/YfsCcfCgNCreTrefRkXayx+J2DrSydNXMaeoVkJCksHb+QjY/AQ1mq7TFaU27FFJpJSv9bmANP136HtVihqyETekxU5IRFAZKM/XoDSpMao8n36HNzgBHSuZOKrW6pu0mdgxCED4/Az2C56JqXVp9Df3Cf0mjgVn0leiNev9b10WbuWYVYg5Hn+BRKtfd+kARr0O0pbbHhcIGIPqWjYWRIMGZlZsZ+i5IIJSu7znGSMrPR+lUsgr0I0qIrIXM0E+fxV2KkqhP0YMuhDX6Hq3OGagi0TRWxXlfpmmWRGngrRJx3d2mVF0YqG+uGA6BmPI4jpGFHWKzq3GiR2lSIy5kGjOiAlNzkjVgpGAEsRNpctWkhm+J0LUVFm4iVlOAA5byM6KGeZWYFCWVmfV/wACrzVqM1WWQaTWF6MOd09TVVAkyr8c/EpVm1JtgliE1yHaSr7X5zWFOeI1085M8RS1X3saP0unULLqxKLMgOpLKMgHTzMz0pyowequ7GSIEYK0Kuzv6sx5+suCni+Z/JJLuR+AJ96wivglaOvhR5xR5WXxKTu1Wnss4WnhsSyBRR9soWAyQr3HpXn/AFv2OeNOpjRS6N5aq2dJc/Sk6YXDBFDalAPwB9GNfChjRzW8BymtdS0zK9qzkWjTpmHalMudQ4RQwwzfgBz19Fq/PA0pVvge9Oeao8ZLMtP0b4XRVnrMFWUmYJwoBpKylQTZRefOIURoIcq6vVWLlQj8kGdT9QWVSNjqQSAdQJMqG7RrRqMRyzBp4N1KT/Y9ZPRH57SmuisFQHO/1wDBonnNj7SSAdWQfqKlaOOmXK6lWedOgg6AHYywMFmDuHUWd6+Sq0DzVkIhZq/R+0YrPSsrAlhNHRhQEz2mHIII2BLu+oKec589RtPycmBi9Lf+cVFRAyim/wAsuNACqgGbB28EKT1Ta9FpaDCrySo8rGfvzMni/wDYoGSkEDPksqksBOzo6rOM2ry2j6ykIK0xX2naU7TFrSt8h3KsDTdFCgMfwFIecD0Z5qsLlX6JouKrmlNEdDSBQyLvLYgOAN1xpuFbB3WfQx6Ck1WYXjq6tJqSRCPRVqhTdNplwFL6h2QAAAkrJSzPeJf2ZJ8y5pzeC0YdMpTglpQvYMwAQB11RWyz/IO2uy88aUSZb9dchlNempboZOdeh+5r6SGVBxs7rrkg4/AONZ0ua0nSojPakmhLocPV4oLhkpS3lpBCo1f6n/VRqoBYyovX5IiUuqNWk+g/3RR/SrwDDo6FQik91RFb4Gu40/AGcbfsIistOdJPDpi6pZqNWtUnOyvMgSfI+ZnGC7ZUYBAGhCidf6tcO/W1hSdAzWdOZLP1qkfIcgU01ShJUb7uSWXAaWKvabpWeipNh5mEZdEpynFfdU/cCudyHOcTKlSqMwAcufdF2u12V0kXmqmaEvc3SDN/au92yHBH1wGC7KQqcqysr62VldbOKlqSibL0OUNj4ogg4JAAIJQKfomweeGjXpRbQWZpuRFKDYMU6W2vNFLTrMx8jolRNfX/AJbP4DJ5MDWRUI3TialJBK0n1ufpXdVC9bP5jZAp1J81yo/ABaITasxVXsovDoT1RayhBqqaAxZiZVAKsyYBfJ2TKkNtSwNlWpifTtKUQKlf6SOa4mrMs2cHpKgk7E6lXbH0D//Z);
}

#main #header {
margin-bottom: 10px
}

h1 {
font: 72px 'Georgia', Arial, sans-serif;
color: #0061A5;
text-shadow: 0 1px #F7F7F7;
text-align: center;
}

#main {
position: relative;
padding-top: 8%;
}

#main #content {
position: relative;
margin: 0 auto 0 auto;
width: 600px;
background: white;
border: solid 3px #F2F2F2;
-moz-box-shadow: 0 0 0 1px #bfbfbf, 0 0 10px rgba(0,0,0,.30);
-webkit-box-shadow: 0 0 0 1px #BFBFBF, 0 0 10px rgba(0, 0, 0, .30);
box-shadow: 0 0 0 1px #BFBFBF, 0 0 10px rgba(0, 0, 0, .30);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
padding: 10px;
}

#main #header h1 img.icon {
position: relative;
width: 50px;
height: 51px;
top: 8px;
padding-right: 11px;
}

#main #content p {
position: relative;
color: #8E8E8E;
font: 13px 'Helvetica', Arial, Sans-serif;
padding: 0 30px 0px 30px;
}

#main #content h2 {
background: url(data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4MTc1NUYyNDI3NjExRTE4MkFCOThDNzMzMDg1MzRFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4MTc1NUYzNDI3NjExRTE4MkFCOThDNzMzMDg1MzRFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDgxNzU1RjA0Mjc2MTFFMTgyQUI5OEM3MzMwODUzNEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDgxNzU1RjE0Mjc2MTFFMTgyQUI5OEM3MzMwODUzNEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCAAKAlIDAREAAhEBAxEB/8QAeAABAQEBAQAAAAAAAAAAAAAAAAIBAwoBAQAAAAAAAAAAAAAAAAAAAAAQAAIAAQYHDAkFAQAAAAAAAAABAhExkgMEBYGRwdFTBhbwIVFx4RJSQ1QVBxdhobHxQoLiE0RBorIjFNIRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APfwAASSzgTzIeLd6QJdXC+WR5AJ+zDuUnsYGOog4FLxcoEOywudLdgAz/JBwLdgAh2GrcySxgT3fVcEOICHdtT0Vx72UCHddQ99wfxAl3RUP4FiUuPnAc+5qhzwQ+oCe47O56uECHcFmfwL1ZJAJer1lc9XDiWcCNm7Jo4cUIEvVixOX+uGXhkQHN6q2N77q4MSzAQ9VLC56qDj5uWQCNkbBooaP0gQ9T7A5f6oKLzAQ9TLvc9TC/kXIBOxV2ueohooDm9SLufUQ4YU8gEvUW7XPUQUQJeod2PqIKKypgTsDdfZ4aKzAS/D+63NUQL5EBHl5dWggoIDH4d3S57PBQQEvw5uh/jwUFv40wJ8t7o7NV0UvZCBL8Nrof49XhhlyIDPLW6OzVVDkAeWt0dmqqHIAXhrdC/HqsEEmQCvLe6OzwYl/wAgUvDi6V+PAuKBb/7UBXl1dHZ4KAFeXl1aCCggNXh7damqIOLmKQC9gLqU1ngorMBS1CuxdRDRWYCthLt7PBRArYe7tBBRWYDotSbtXULDCnmApamXdoVRQFrU6waKHDBmAtao2BKT7UNH6WBa1TsK6qF8cP0gXsrY9HBuwAWtV7Gp6uDAlyAdNmrGurhxIClq7ZF1cOFL3AVs/ZuhDiQHTuOzaOF4siQFdy1HQh9T9oFK56hTwLEnlQHTuqo6HsWUCldtSvg/iBau+qXwpeh7mgKVgq10cQFqx1amhW7ABv8Alg4Fj5ALVnh/VLF7gK+xDulzgUqqH3JLOBvMXpApJKZAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=) no-repeat;
background-position: bottom;
padding: 0 0 28px 0;
font: 20px 'Georgia', Arial, sans-serif;
color: #8E8E8E;
text-align: center;
}

a {
display: inline-block;
cursor: pointer;
font: 13px 'Helvetica', Arial, Sans-serif;
padding: 8px 14px;
margin-left: 30px;
background: #006DB0;
background-image: linear-gradient(bottom, #0062A6 0%, #0079BB 100%);
background-image: -o-linear-gradient(bottom, #0062A6 0%, #0079BB 100%);
background-image: -moz-linear-gradient(bottom, #0062A6 0%, #0079BB 100%);
background-image: -webkit-linear-gradient(bottom, #0062A6 0%, #0079BB 100%);
background-image: -ms-linear-gradient(bottom, #0062A6 0%, #0079BB 100%);
-moz-box-shadow: 0 1px #00acd8 inset;
-webkit-box-shadow: 0 1px #00ACD8 inset;
box-shadow: 0 1px #00ACD8 inset;
border: solid 1px #003255;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
font-size: 14px;
color: white;
font-weight: bold;
text-shadow: 0 -1px #00385A;
text-decoration: none;
}

a:hover {
background: #0081C6;
background-image: linear-gradient(bottom, #006FBB 0%, #008DCE 100%);
background-image: -o-linear-gradient(bottom, #006FBB 0%, #008DCE 100%);
background-image: -moz-linear-gradient(bottom, #006FBB 0%, #008DCE 100%);
background-image: -webkit-linear-gradient(bottom, #006FBB 0%, #008DCE 100%);
background-image: -ms-linear-gradient(bottom, #006FBB 0%, #008DCE 100%);
-moz-box-shadow: 0 1px #00c1e4 inset;
-webkit-box-shadow: 0 1px #00C1E4 inset;
box-shadow: 0 1px #00C1E4 inset;
}



</style>

<div id="main">
<div id="header">
<h1>
<img class="icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAzCAYAAADVY1sUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAAVdEVYdENyZWF0aW9uIFRpbWUAMS8xMC8xMnVtUCMAAAPLSURBVGiB5Zo/bNNAFIe/WBSpMCSVEEyUtAtsCbBUqkSDKAMs7Uo91G5npLLQEWcEBkDMrd0h7ZpMDIAISJW6AKk6sbQBVqQmA1SiQxhsp7Hxv3PiNNBPihTZ7+7ez+c7v3t3KXqNWioAGSDvY1EDGuhytRfNtVotAFJd16SWssCs9ZsSLP0eKANldLkep/nuhaglBVAQd96P94CBLhsiheILUUuzwHPgknDZaHwFltDlchRjcSFqKQMYwIy4b7GoAAq63AgyEhNiDuAykO7ON2GawGzQxGALkUKrMsfCO/ovAqvNd5YPgQT3iFoygPleeNQD1tBlxX0xvEfUksbgiACYt3zyxLtHzK7Uk/Gna9TOKdp/sKulPFAlwpjInDlNdfkWuYsjXXmWWlgXMW8CBXS5BsGvlkEfRcQgjemjA6cQ8x3MhdV0jCJscu7xcvRqmTHTXlgN+dERqsvTpIeH/ron8oq0VudilXMx1lqdq4OzR7SwUkEijgnN/mMKMcOPwKl2AEUAzKcW1jNw1CNKWIkBFGGjgICQARUBbSHmIA+dqQaYXGphPXsKKIiW7GKWSYqCRAwhA0hBArLH7UUPyEr4Zzt6RubMafKj3lFA7du+wy577mycJvISCS+Y7HDms3YHZXK8fX3sYQWtssPNJ28ddrXiXV/RAaTDV4hd4I7J9MWJtpj6j58UKzs0fv0mPzpC/ekMuYsjpIeHqC5PC4tJTIhfYNkpBrwjhjhiEhOydPuyb3RsiwkKe9LDQzy/dz1ye6diexqCVtnh0rmzjqffib44QfPg0DdiqH3bZ/blh8jtSZgrrkRQV7YwNnd97weJuPnkLY1fv6M21ZQwk8qJoa5ssbTxMbJ9DBEANQmoC/omzIvXX1BXtsK9iScCoC5hJhoSp/Z9n+bBYaDN2uZeHBEA1b4Iibooe3bvmu/kEEJVsvYltuOUjoLoytL9nYnAdmt1rm5/RwxB/yIRd3ksKMaAow+iIdRSBMJEGJu7gROAgBgDbCHmHsSaoK+B5K24ybNlS0SYmKkr58OaWWutzjVAMB0kgp+T7utR7XzQ7D/O3K+ZvXvkVaIzoRZG5xddmRxHX5wIdS6qXQdFdFkLSmLX8EhGiAgBuKq9ai+alMlxcqMZHmx8at8vXLlA+f4NltY/OkS77XzYRpfzECMbLyqkeXBI4fEbxwrQpvPpQ2+y8f/N/oj3esQ0LPbBKVGKfvvwJ2APEbAKqgk4JYrqJaKTE7TPDlgVZTFPI/SLCpCNeoroBJ5FcfPPnw5y88+f1/LjmE7Q/QGMx6phug9I/QAAAABJRU5ErkJggg==" alt="Warning"/>

404 - Page not found
</h1>
</div>

<div id="content">
<h2>The page you’re looking for can’t be found.</h2>
<p>
The requested resource could not be found but may be available again in the future.<br/>
Please try again later.
</p>
<a href="javascript:window.history.go(-1);">Go back</a>
</div>
</div> <!-- end main -->

</body>
</html>
22 changes: 8 additions & 14 deletions test/pdfkit.js → test/pdfkit.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ var fs = require('fs');
var stream = require('stream');

describe('PDFKit', function () {
var outputFile = __dirname + '/generate/output.pdf';
var _outputFile;

var expectEnd = function (done) {
var expectEnd = function (outputFile, done) {
return function () {
if (err) {
return done(err);
Expand All @@ -22,30 +22,24 @@ describe('PDFKit', function () {
}
}

var toFile = function (pdf, done) {
pdf.toFile(outputFile, expectEnd(done));
var toFile = function (pdf, outputFile, done) {
outputFile = __dirname + outputFile;
pdf.toFile(outputFile, expectEnd(outputFile, done));
}

beforeEach(function (done) {
if (fs.existsSync(outputFile)) {
fs.unlinkSync(outputFile);
}
done();
});

it('#toFile from URL', function (done) {
var pdf = PDFKit('url', 'http://google.com', {}, {}, false);
toFile(pdf, done);
toFile(pdf, '/generate/tofile_from_url.pdf', done);
});

it('#toFile from file', function (done) {
var pdf = PDFKit('file', __dirname + '/fixtures/from_file.html', {}, {}, false);
toFile(pdf, done);
toFile(pdf, '/generate/tofile_from_file.pdf', done);
});

it('#toFile from html', function (done) {
var pdf = PDFKit('html', '<h1>Hello</h1>', {}, {}, false);
toFile(pdf, done);
toFile(pdf, '/generate/tofile_from_html.pdf', done);
});

// Stream
Expand Down

0 comments on commit e42c202

Please sign in to comment.