This is a html to pdf converter rest api which converts web pages to pdfs using the headless chrome instance powered by Puppeteer.
Parameters
The api doesn't care much how you send the parameters. Wether it's form-data form-urlencoded or as raw json. It's all welcome here.
Parameter | Type | Description |
---|---|---|
url |
string |
Required if no html. The url of the webpage to convert to pdf |
html |
string |
Required if no url. The html to convert to pdf |
file |
string |
Required if no html or url. The template and value information to create pdf |
scale |
string |
Optional. Scale of the webpage rendering. Defaults to 1. Scale amount must be between 0.1 and 2 |
displayHeaderFooter |
boolean |
Optional. Display header and footer. Defaults to false |
headerTemplate |
string |
Optional. HTML template for the print header. Should be valid HTML markup with following classes used to inject printing values into them: date , title , url , pageNumber , totalPages |
footerTemplate |
string |
Optional. HTML template for the print footer. Should use the same format as the headerTemplate |
printBackground |
boolean |
Optional. Print background graphics. Defaults to false |
landscape |
boolean |
Optional. Paper orientation. Defaults to false |
pageRanges |
string |
Optional. Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, which means print all pages |
format |
string |
Optional. Paper format. If set, takes priority over width or height options. Defaults to 'Letter' |
width |
integer |
Optional. Paper width, accepts values labeled with units |
height |
integer |
Optional. Paper height, accepts values labeled with units |
margin.top |
integer |
Optional. Top margin, accepts values labeled with units |
margin.right |
integer |
Optional. Right margin, accepts values labeled with units |
margin.bottom |
integer |
Optional. Bottom margin, accepts values labeled with units |
margin.left |
integer |
Optional. Left margin, accepts values labeled with units |
preferCSSPageSize |
boolean |
Optional. Give any CSS @page size declared in the page priority over what is declared in width and height or format options. Defaults to false , which will scale the content to fit the paper size |
Following examples is using 'curl' on terminal
Example 1
curl -H "Content-Type: application/json" -X POST \
-d '{"url":"http://google.com"}' \
<BASE_URL>/generate
Example 2
curl -H "Content-Type: application/json" -X POST \
-d '{"html":"<h1>This is some title</h1>"}' \
<BASE_URL>/generate
Example 3
curl -H "Content-Type: application/json" -X POST \
-d '{"file": { "template": "exTemplateBootstrap.js", "title": "This is some title" } }' \
<BASE_URL>/generate
Response
If the request was succesful the response will look like this:
{
"success": true,
"url": "https://<BASE_URL>/exports/<AUTO_GENERATED_FILE_NAME>.pdf",
"path": "/exports/<AUTO_GENERATED_FILE_NAME>.pdf",
"expires": 1564590505
}
If one of the parameters was invalid the request will look something like:
{
"success": true,
"errors": {
"errors": [
{
"msg": "Must provide either url or html or file",
"param": "url_html_file",
"location": "body"
}
]
}
}
Aside from the option to deploy this project on Heroku the instruction below is meant for either a local or standalone setup.
- Clone the repo
- Navigate in the project directory
cd pdf-generate-service
- Install the npm dependencies
npm install
- Copy the contents of config-example.json and place them in a new config.json
cp config-example.json config.json
- Fill in the config.json with your configuration
- Run the app
npm run start
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.