Quick Start for Java
Java supports wkhtmltopdf integration, but Puppeteer requires additional workarounds due to its lack of native support. PDFBolt's PDF generation API offers a faster and more reliable approach to generating PDFs from HTML, URLs, and dynamic templates. Follow these steps to get started with Java.
1. Get Your API Key
- Your API Key is available in the Admin Dashboard under the API Keys section after registration.
- Ensure you keep this key secure, as it is required for authorization requests to the PDFBolt API.
2. Make Your First Request
Use the following examples to quickly make requests to the PDFBolt API and generate your PDF documents.
Choose your preferred endpoint and source combination.
➡️ Endpoints:
- Direct Endpoint
- Sync
- Async
The Direct endpoint provides immediate PDF generation and returns the raw PDF file in the response.
➡️ Sources:
- URL
- HTML
- Template
Convert any webpage into a PDF:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
public class PDFBoltIntegrationUrl {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"url": "https://example.com",
"format": "A4",
"printBackground": true
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/direct"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
if (response.statusCode() == 200) {
Files.write(Paths.get("webpage.pdf"), response.body());
System.out.println("PDF generated successfully");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + new String(response.body()));
}
}
}
Convert HTML content directly into a PDF:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
public class PDFBoltIntegrationHtml {
public static void main(String[] args) throws Exception {
String htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
String base64Html = Base64.getEncoder().encodeToString(htmlContent.getBytes());
String jsonBody = """
{
"html": "%s",
"margin": {
"top": "30px",
"left": "30px"
}
}
""".formatted(base64Html);
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/direct"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
if (response.statusCode() == 200) {
Files.write(Paths.get("document.pdf"), response.body());
System.out.println("PDF generated successfully");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + new String(response.body()));
}
}
}
Use reusable templates for dynamic PDF generation:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
public class PDFBoltIntegrationTemplate {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"templateId": "your-template-id",
"templateData": {
"client_name": "John Doe",
"invoice_number": "INV-001",
"total_amount": "$299.99",
"line_items": [
{
"description": "Web Development",
"unit_price": "$200.00"
},
{
"description": "Design Services",
"unit_price": "$99.99"
}
]
}
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/direct"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
if (response.statusCode() == 200) {
Files.write(Paths.get("invoice.pdf"), response.body());
System.out.println("PDF generated successfully");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + new String(response.body()));
}
}
}
Create your first template in the app, then use its ID in your API calls.
The Sync endpoint returns a JSON response with a download URL for the PDF.
➡️ Sources:
- URL
- HTML
- Template
Convert webpage and get download URL:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class PDFBoltIntegrationUrl {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"url": "https://example.com",
"format": "A4",
"printBackground": true
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/sync"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String documentUrl = responseBody.split("\"documentUrl\":\"")[1].split("\"")[0];
System.out.println("PDF URL: " + documentUrl);
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
Convert HTML and get download URL:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.util.Base64;
public class PDFBoltIntegrationHtml {
public static void main(String[] args) throws Exception {
String htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
String base64Html = Base64.getEncoder().encodeToString(htmlContent.getBytes());
String jsonBody = """
{
"html": "%s",
"margin": {
"top": "30px",
"left": "30px"
}
}
""".formatted(base64Html);
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/sync"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String documentUrl = responseBody.split("\"documentUrl\":\"")[1].split("\"")[0];
System.out.println("PDF URL: " + documentUrl);
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
Use templates and get download URL:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class PDFBoltIntegrationTemplate {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"templateId": "your-template-id",
"templateData": {
"client_name": "John Doe",
"invoice_number": "INV-001",
"total_amount": "$299.99",
"line_items": [
{
"description": "Web Development",
"unit_price": "$200.00"
},
{
"description": "Design Services",
"unit_price": "$99.99"
}
]
}
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/sync"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String documentUrl = responseBody.split("\"documentUrl\":\"")[1].split("\"")[0];
System.out.println("PDF URL: " + documentUrl);
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
The Async endpoint processes requests asynchronously and sends results via webhook.
➡️ Sources:
- URL
- HTML
- Template
Convert webpage with webhook notification:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class PDFBoltIntegrationUrl {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"url": "https://example.com",
"format": "A4",
"printBackground": true,
"webhook": "https://your-app.com/webhook"
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/async"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String requestId = responseBody.split("\"requestId\":\"")[1].split("\"")[0];
System.out.println("Request ID: " + requestId);
System.out.println("PDF will be sent to webhook when ready");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
Convert HTML with webhook notification:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.util.Base64;
public class PDFBoltIntegrationHtml {
public static void main(String[] args) throws Exception {
String htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
String base64Html = Base64.getEncoder().encodeToString(htmlContent.getBytes());
String jsonBody = """
{
"html": "%s",
"margin": {
"top": "30px",
"left": "30px"
},
"webhook": "https://your-app.com/webhook"
}
""".formatted(base64Html);
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/async"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String requestId = responseBody.split("\"requestId\":\"")[1].split("\"")[0];
System.out.println("Request ID: " + requestId);
System.out.println("PDF will be sent to webhook when ready");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
Use templates with webhook notification:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class PDFBoltIntegrationTemplate {
public static void main(String[] args) throws Exception {
String jsonBody = """
{
"templateId": "your-template-id",
"templateData": {
"client_name": "John Doe",
"invoice_number": "INV-001",
"total_amount": "$299.99",
"line_items": [
{
"description": "Web Development",
"unit_price": "$200.00"
},
{
"description": "Design Services",
"unit_price": "$99.99"
}
]
},
"webhook": "https://your-app.com/webhook"
}
""";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pdfbolt.com/v1/async"))
.header("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
String requestId = responseBody.split("\"requestId\":\"")[1].split("\"")[0];
System.out.println("Request ID: " + requestId);
System.out.println("PDF will be sent to webhook when ready");
} else {
System.err.println("HTTP " + response.statusCode());
System.err.println("Error Message: " + response.body());
}
}
}
3. What's next?
Unlock the full potential of PDFBolt by exploring its powerful features and customization options. Start with the API Endpoints and delve into the Conversion Parameters to tailor your integration to your needs.