PDF from HTML#
Important
This method will process any JavaScript which the webpage triggers when it loads. For example if the the webpage triggers a JavaScript popup window then that will be included in the conversion process. There is no option to disable JavaScript on the supplied HTML page.
Available Methods#
/pdf/convert/from/html#
Create PDF
from HTML
.
Method: POST
Endpoint: /v1/pdf/convert/from/html
Attributes#
Note
Attributes are case-sensitive and should be inside JSON for POST request.
Remember to ensure that request sizes are less than 4
mb in file size 3.
Attribute |
Description |
Required |
---|---|---|
|
Input HTML code to be converted. To convert the link to a PDF use the /pdf/convert/from/url endpoint instead. |
yes unless you are using a |
|
Set to the ID of your HTML template. You can find and copy the ID from HTML to PDF Templates. |
no unless you are are not using |
|
Set it to a string with input |
no unless you are using |
|
Set to CSS style margins like |
no |
|
|
no |
|
Set to |
no |
|
|
no |
|
Uses |
no |
|
|
no |
|
User definable HTML for the header to be applied on every page header. |
no |
|
User definable HTML for the footer to be applied on every page bottom. |
no |
|
Set |
no |
|
File name for the generated output, the input must be in string format. |
no |
|
Set the expiration time for the output link in minutes (default is |
no |
|
Use this parameter to set additional configurations for fine-tuning and extra options. Explore the Profiles section for more. |
no |
HTML Templates#
Use the dashboard to manage your HTML to PDF Templates.
Templates use {{Mustache}}
and Handlebars templating syntax. You just need to insert macros surrounded by double brackets like {{
and }}
.
Find out more about Mustache.
Find out more about Handlebars.
Some Examples of macro inside html template:
{{variable1}}
will be replaced withtest
if you settemplateData
to{ "variable1": "test"}
{{object1.variable1}}
will be replaced withtest
if you settemplateData
to{ "object1": { "variable1": "test"} }
Simple conditions are also supported. For example:
{{#if paid}} invoice was paid {{/if}}
will show invoice was paid whentemplateData
is set to{ "paid": true }
.
Sample JSON input#
"templateData": "{ 'paid': true, 'invoice_id': '0002', 'total': '$999.99' }"
Note
If you use JSON
as input then make sure to escape it first (with JSON.stringify(dataObject)
in JS). Escaping is when every "
is replaced with \"
.
Example with "
be escaped as \"
then: "templateData": "{ \"paid\": true, \"invoice_id\": \"0002\", \"total\": \"$999.99\" }"
.
Sample CSV input#
"templateData": "paid,invoice_id,total
true,0002,$999.99"
Query parameters#
No query parameters accepted.
Payload 3#
{
"html": "<h1>Hello World!</h1><a href='https://pdf.co'>Go to PDF.co</a>",
"name": "result.pdf",
"margins": "5px 5px 5px 5px",
"paperSize": "Letter",
"orientation": "Portrait",
"printBackground": true,
"header": "",
"footer": "",
"mediaType": "print",
"async": false
}
Response 2#
{
"url": "https://pdf-temp-files.s3.amazonaws.com/97dc323f32794eae8fa6602f5bd981c1/result.pdf",
"pageCount": 1,
"error": false,
"status": 200,
"name": "result.pdf",
"remainingCredits": 60646
}
CURL#
curl --location --request POST 'https://api.pdf.co/v1/pdf/convert/from/html' \
--header 'x-api-key: *******************' \
--header 'Content-Type: application/json' \
--data-raw '{
"html": "<h1>Hello World!</h1><a href=\"https://pdf.co\">Go to PDF.co</a>",
"name": "result.pdf",
"margins": "5px 5px 5px 5px",
"paperSize": "Letter",
"orientation": "Portrait",
"printBackground": true,
"header": "",
"footer": "",
"mediaType": "print",
"async": false
}'
Code samples#
var https = require("https");
var path = require("path");
var fs = require("fs");
// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co
const API_KEY = "***************************";
// HTML Input
const inputHtml = "./sample.html";
// Destination PDF file name
const DestinationFile = "./result.pdf";
// Prepare requests params as JSON
var parameters = {};
// Input HTML code to be converted. Required.
parameters["html"] = fs.readFileSync(inputHtml, "utf8");
// Name of resulting file
parameters["name"] = path.basename(DestinationFile);
// Set to css style margins like 10 px or 5px 5px 5px 5px.
parameters["margins"] = "5px 5px 5px 5px";
// Can be Letter, A4, A5, A6 or custom size like 200x200
parameters["paperSize"] = "Letter";
// Set to Portrait or Landscape. Portrait by default.
parameters["orientation"] = "Portrait";
// true by default. Set to false to disbale printing of background.
parameters["printBackground"] = true;
// If large input document, process in async mode by passing true
parameters["async"] = false;
// Set to HTML for header to be applied on every page at the header.
parameters["header"] = "";
// Set to HTML for footer to be applied on every page at the bottom.
parameters["footer"] = "";
// Convert JSON object to string
var jsonPayload = JSON.stringify(parameters);
// Prepare request to `HTML To PDF` API endpoint
var url = '/v1/pdf/convert/from/html';
var reqOptions = {
host: "api.pdf.co",
path: url,
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(jsonPayload, 'utf8')
}
};
// Send request
var postRequest = https.request(reqOptions, (response) => {
response.on("data", (d) => {
// Parse JSON response
var data = JSON.parse(d);
if (data.error == false) {
// Download PDF file
var file = fs.createWriteStream(DestinationFile);
https.get(data.url, (response2) => {
response2.pipe(file)
.on("close", () => {
console.log(`Generated PDF file saved as "${DestinationFile}" file.`);
});
});
}
else {
// Service reported error
console.log(data.message);
}
});
}).on("error", (e) => {
// Request error
console.log(e);
});
// Write request data
postRequest.write(jsonPayload);
postRequest.end();
import os
import json
import requests # pip install requests
# The authentication key (API Key).
# Get your own by registering at https://app.pdf.co
API_KEY = "**************************"
# Base URL for PDF.co Web API requests
BASE_URL = "https://api.pdf.co/v1"
# HTML template
file_read = open(".\\sample.html", mode='r', encoding= 'utf-8')
SampleHtml = file_read.read()
file_read.close()
# Destination PDF file name
DestinationFile = ".\\result.pdf"
def main(args = None):
GeneratePDFFromHtml(SampleHtml, DestinationFile)
def GeneratePDFFromHtml(SampleHtml, destinationFile):
"""Converts HTML to PDF using PDF.co Web API"""
# Prepare requests params as JSON
parameters = {}
# Input HTML code to be converted. Required.
parameters["html"] = SampleHtml
# Name of resulting file
parameters["name"] = os.path.basename(destinationFile)
# Set to css style margins like 10 px or 5px 5px 5px 5px.
parameters["margins"] = "5px 5px 5px 5px"
# Can be Letter, A4, A5, A6 or custom size like 200x200
parameters["paperSize"] = "Letter"
# Set to Portrait or Landscape. Portrait by default.
parameters["orientation"] = "Portrait"
# true by default. Set to false to disable printing of background.
parameters["printBackground"] = "true"
# If large input document, process in async mode by passing true
parameters["async"] = "false"
# Set to HTML for header to be applied on every page at the header.
parameters["header"] = ""
# Set to HTML for footer to be applied on every page at the bottom.
parameters["footer"] = ""
# Prepare URL for 'HTML To PDF' API request
url = "{}/pdf/convert/from/html".format(
BASE_URL
)
# Execute request and get response as JSON
response = requests.post(url, data=parameters, headers={ "x-api-key": API_KEY })
if (response.status_code == 200):
json = response.json()
if json["error"] == False:
# Get URL of result file
resultFileUrl = json["url"]
# Download result file
r = requests.get(resultFileUrl, stream=True)
if (r.status_code == 200):
with open(destinationFile, 'wb') as file:
for chunk in r:
file.write(chunk)
print(f"Result file saved as \"{destinationFile}\" file.")
else:
print(f"Request error: {response.status_code} {response.reason}")
else:
# Show service reported error
print(json["message"])
else:
print(f"Request error: {response.status_code} {response.reason}")
if __name__ == '__main__':
main()
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace PDFcoApiExample
{
class Program
{
// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co
const String API_KEY = "******************************";
static void Main(string[] args)
{
// HTML input
string inputSample = File.ReadAllText(@".\sample.html");
// Destination PDF file name
string destinationFile = @".\result.pdf";
// Create standard .NET web client instance
WebClient webClient = new WebClient();
// Set API Key
webClient.Headers.Add("x-api-key", API_KEY);
// Set JSON content type
webClient.Headers.Add("Content-Type", "application/json");
try
{
// Prepare requests params as JSON
Dictionary<string, object> parameters = new Dictionary<string, object>();
// Input HTML code to be converted. Required.
parameters.Add("html", inputSample);
// Name of resulting file
parameters.Add("name", Path.GetFileName(destinationFile));
// Set to css style margins like 10 px or 5px 5px 5px 5px.
parameters.Add("margins", "5px 5px 5px 5px");
// Can be Letter, A4, A5, A6 or custom size like 200x200
parameters.Add("paperSize", "Letter");
// Set to Portrait or Landscape. Portrait by default.
parameters.Add("orientation", "Portrait");
// true by default. Set to false to disbale printing of background.
parameters.Add("printBackground", true);
// If large input document, process in async mode by passing true
parameters.Add("async", false);
// Set to HTML for header to be applied on every page at the header.
parameters.Add("header", "");
// Set to HTML for footer to be applied on every page at the bottom.
parameters.Add("footer", "");
// Convert dictionary of params to JSON
string jsonPayload = JsonConvert.SerializeObject(parameters);
// Prepare URL for `HTML to PDF` API call
string url = "https://api.pdf.co/v1/pdf/convert/from/html";
// Execute POST request with JSON payload
string response = webClient.UploadString(url, jsonPayload);
// Parse JSON response
JObject json = JObject.Parse(response);
if (json["error"].ToObject<bool>() == false)
{
// Get URL of generated PDF file
string resultFileUrl = json["url"].ToString();
webClient.Headers.Remove("Content-Type"); // remove the header required for only the previous request
// Download the PDF file
webClient.DownloadFile(resultFileUrl, destinationFile);
Console.WriteLine("Generated PDF document saved as \"{0}\" file.", destinationFile);
}
else
{
Console.WriteLine(json["message"].ToString());
}
}
catch (WebException e)
{
Console.WriteLine(e.ToString());
}
webClient.Dispose();
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
package com.company;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import okhttp3.*;
import java.io.*;
import java.net.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main
{
// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co
final static String API_KEY = "***********************************";
public static void main(String[] args) throws IOException
{
// HTML input
final String inputSample = new String(Files.readAllBytes(Paths.get(".\\sample.html")));
// Destination PDF file name
final Path destinationFile = Paths.get(".\\result.pdf");
// Create HTTP client instance
OkHttpClient webClient = new OkHttpClient();
// Prepare URL for `HTML to PDF` API call
String apiUrl = "https://api.pdf.co/v1/pdf/convert/from/html";
// Make correctly escaped (encoded) URL
URL url = null;
try
{
url = new URI(null, apiUrl, null).toURL();
}
catch (URISyntaxException e)
{
e.printStackTrace();
}
// Prepare request body in JSON format
JsonObject jsonBody = new JsonObject();
// Input HTML code to be converted. Required.
jsonBody.add("html", new JsonPrimitive(inputSample));
// Name of resulting file
jsonBody.add("name", new JsonPrimitive(destinationFile.getFileName().toString()));
// Set to css style margins like 10 px or 5px 5px 5px 5px.
jsonBody.add("margins", new JsonPrimitive("5px 5px 5px 5px"));
// Can be Letter, A4, A5, A6 or custom size like 200x200
jsonBody.add("paperSize", new JsonPrimitive("Letter"));
// Set to Portrait or Landscape. Portrait by default.
jsonBody.add("orientation", new JsonPrimitive("Portrait"));
// true by default. Set to false to disable printing of background.
jsonBody.add("printBackground", new JsonPrimitive(true));
// If large input document, process in async mode by passing true
jsonBody.add("async", new JsonPrimitive(false));
// Set to HTML for header to be applied on every page at the header.
jsonBody.add("header", new JsonPrimitive(""));
// Set to HTML for footer to be applied on every page at the bottom.
jsonBody.add("footer", new JsonPrimitive(""));
RequestBody body = RequestBody.create(MediaType.parse("application/json"), jsonBody.toString());
// Prepare request
Request request = new Request.Builder()
.url(url)
.addHeader("x-api-key", API_KEY) // (!) Set API Key
.addHeader("Content-Type", "application/json")
.post(body)
.build();
// Execute request
Response response = webClient.newCall(request).execute();
if (response.code() == 200)
{
// Parse JSON response
JsonObject json = new JsonParser().parse(response.body().string()).getAsJsonObject();
boolean error = json.get("error").getAsBoolean();
if (!error)
{
// Get URL of generated PDF file
String resultFileUrl = json.get("url").getAsString();
// Download PDF file
downloadFile(webClient, resultFileUrl, destinationFile.toFile());
System.out.printf("Generated PDF file saved as \"%s\" file.", destinationFile.toString());
}
else
{
// Display service reported error
System.out.println(json.get("message").getAsString());
}
}
else
{
// Display request error
System.out.println(response.code() + " " + response.message());
}
}
public static void downloadFile(OkHttpClient webClient, String url, File destinationFile) throws IOException
{
// Prepare request
Request request = new Request.Builder()
.url(url)
.build();
// Execute request
Response response = webClient.newCall(request).execute();
byte[] fileBytes = response.body().bytes();
// Save downloaded bytes to file
OutputStream output = new FileOutputStream(destinationFile);
output.write(fileBytes);
output.flush();
output.close();
response.close();
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML to PDF Result</title>
</head>
<body>
<?php
// Get submitted form data
$apiKey = $_POST["apiKey"]; // The authentication key (API Key). Get your own by registering at https://app.pdf.co
// HTML input
$inputHtml = file_get_contents("./inputHtml.html");
// Prepare URL for HTML to PDF API call
$url = "https://api.pdf.co/v1/pdf/convert/from/html";
// Prepare requests params
$parameters = array();
// Input HTML code to be converted. Required.
$parameters["html"] = utf8_encode($inputHtml);
// Name of resulting file
$parameters["name"] = "result.pdf";
// Set to css style margins like 10 px or 5px 5px 5px 5px.
$parameters["margins"] = "5px 5px 5px 5px";
// Can be Letter, A4, A5, A6 or custom size like 200x200
$parameters["paperSize"] = "Letter";
// Set to Portrait or Landscape. Portrait by default.
$parameters["orientation"] = "Portrait";
// true by default. Set to false to disbale printing of background.
$parameters["printBackground"] = true;
// If large input document, process in async mode by passing true
$parameters["async"] = false;
// Set to HTML for header to be applied on every page at the header.
$parameters["header"] = "";
// Set to HTML for footer to be applied on every page at the bottom.
$parameters["footer"] = "";
// Create Json payload
$data = json_encode($parameters);
// Create request
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array("x-api-key: " . $apiKey, "Content-type: application/json"));
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// Execute request
$result = curl_exec($curl);
if (curl_errno($curl) == 0)
{
$status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status_code == 200)
{
$json = json_decode($result, true);
if (isset($json["error"]) && $json["error"] == true)
{
// Display service reported error
echo "<p>Error: " . $json["message"] . "</p>";
}
else
{
$resultFileUrl = $json["url"];
// Display link to the file with conversion results
echo "<div><h2>Conversion Result:</h2><a href='" . $resultFileUrl . "' target='_blank'>" . $resultFileUrl . "</a></div>";
}
}
else
{
// Display request error
echo "<p>Status code: " . $status_code . "</p>";
echo "<p>" . $result . "</p>";
}
}
else
{
// Display CURL error
echo "Error: " . curl_error($curl);
}
// Cleanup
curl_close($curl);
?>
</body>
</html>
var https = require("https");
var path = require("path");
var fs = require("fs");
// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co
const API_KEY = "***************************";
// HTML Input
const inputHtml = "./sample.html";
// Destination PDF file name
const DestinationFile = "./result.pdf";
// Prepare requests params as JSON
var parameters = {};
// Input HTML code to be converted. Required.
parameters["html"] = fs.readFileSync(inputHtml, "utf8");
// Name of resulting file
parameters["name"] = path.basename(DestinationFile);
// Set to css style margins like 10 px or 5px 5px 5px 5px.
parameters["margins"] = "5px 5px 5px 5px";
// Can be Letter, A4, A5, A6 or custom size like 200x200
parameters["paperSize"] = "Letter";
// Set to Portrait or Landscape. Portrait by default.
parameters["orientation"] = "Portrait";
// true by default. Set to false to disbale printing of background.
parameters["printBackground"] = true;
// If large input document, process in async mode by passing true
parameters["async"] = false;
// Set to HTML for header to be applied on every page at the header.
parameters["header"] = "";
// Set to HTML for footer to be applied on every page at the bottom.
parameters["footer"] = "";
// Convert JSON object to string
var jsonPayload = JSON.stringify(parameters);
// Prepare request to `HTML To PDF` API endpoint
var url = '/v1/pdf/convert/from/html';
var reqOptions = {
host: "api.pdf.co",
path: url,
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(jsonPayload, 'utf8')
}
};
// Send request
var postRequest = https.request(reqOptions, (response) => {
response.on("data", (d) => {
// Parse JSON response
var data = JSON.parse(d);
if (data.error == false) {
// Download PDF file
var file = fs.createWriteStream(DestinationFile);
https.get(data.url, (response2) => {
response2.pipe(file)
.on("close", () => {
console.log(`Generated PDF file saved as "${DestinationFile}" file.`);
});
});
}
else {
// Service reported error
console.log(data.message);
}
});
}).on("error", (e) => {
// Request error
console.log(e);
});
// Write request data
postRequest.write(jsonPayload);
postRequest.end();
On Github#
Footnotes
- 1
Supports publicly accessible links from any source, including Google Drive, Dropbox, and PDF.co Built-In Files Storage. To upload files via the API, check out the File Upload section. Note: If you experience intermittent Access Denied or Too Many Requests errors, please try adding
cache:
to enable built-in URL caching (e.g.,cache:https://example.com/file1.pdf
). For data security, you have the option to encrypt output files and decrypt input files. Learn more about user-controlled data encryption.- 2
Main response codes as follows:
Code
Description
200
Success
400
Bad request. Typically happens because of bad input parameters, or because the input URLs can’t be reached, possibly due to access restrictions like needing a login or password.
401
Unauthorized
402
Not enough credits
445
Timeout error. To process large documents or files please use asynchronous mode (set the
async
parameter totrue
) and then check status using the /job/check endpoint. If a file contains many pages then specify a page range using thepages
parameter. The number of pages of the document can be obtained using the /pdf/info endpoint.Note
For more see the complete list of available response codes.
- 3(1,2)
PDF.co Request size: API requests do not support request sizes of more than
4
megabytes in size. Please ensure that request sizes do not exceed this limit.