Quick Start for C#
C# offers several PDF generation libraries like PuppeteerSharp and DinkToPdf, but they often require learning specialized APIs and have limited HTML/CSS support. PDFBolt's PDF generation API provides a straightforward HTTP-based approach for generating PDFs from HTML, URLs, and dynamic templates using familiar .NET patterns.
1. Get Your API Key
- After signing up, locate your API Key in the Admin Dashboard under the API Keys section.
- This key is essential for authorizing your requests to the PDFBolt API. Remember to keep it secure.
2. Make Your First Request
Use the examples below to generate PDFs with the PDFBolt API.
Choose your preferred endpoint and source combination.
➡️ Endpoints:
- Direct
- 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:
using System;
using System.Net.Http;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationUrl {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
url = "https://example.com",
format = "A4",
printBackground = true
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/direct"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Convert HTML content directly into a PDF:
using System;
using System.Net.Http;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationHtml {
public static async Task Main(string[] args) {
using var client = new HttpClient();
string htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
string base64Html = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(htmlContent));
var requestData = new {
html = base64Html,
margin = new {
top = "30px",
left = "30px"
}
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/direct"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("document.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Use reusable templates for dynamic PDF generation:
using System;
using System.Net.Http;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationTemplate {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
templateId = "your-template-id",
templateData = new {
client_name = "John Doe",
invoice_number = "INV-001",
total_amount = "$299.99",
line_items = new object[] {
new {
description = "Web Development",
unit_price = "$200.00"
},
new {
description = "Design Services",
unit_price = "$99.99"
}
}
}
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/direct"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("invoice.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
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:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationUrl {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
url = "https://example.com",
format = "A4",
printBackground = true
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/sync"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"PDF URL: {result.GetProperty("documentUrl").GetString()}");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Convert HTML and get download URL:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationHtml {
public static async Task Main(string[] args) {
using var client = new HttpClient();
string htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
string base64Html = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(htmlContent));
var requestData = new {
html = base64Html,
margin = new {
top = "30px",
left = "30px"
}
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/sync"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"PDF URL: {result.GetProperty("documentUrl").GetString()}");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Use templates and get download URL:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationTemplate {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
templateId = "your-template-id",
templateData = new {
client_name = "John Doe",
invoice_number = "INV-001",
total_amount = "$299.99",
line_items = new object[] {
new {
description = "Web Development",
unit_price = "$200.00"
},
new {
description = "Design Services",
unit_price = "$99.99"
}
}
}
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/sync"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"PDF URL: {result.GetProperty("documentUrl").GetString()}");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
The Async endpoint processes requests asynchronously and sends results via webhook.
➡️ Sources:
- URL
- HTML
- Template
Convert webpage with webhook notification:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationUrl {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
url = "https://example.com",
format = "A4",
printBackground = true,
webhook = "https://your-app.com/webhook"
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/async"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"Request ID: {result.GetProperty("requestId").GetString()}");
Console.WriteLine("PDF will be sent to webhook when ready");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Convert HTML with webhook notification:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationHtml {
public static async Task Main(string[] args) {
using var client = new HttpClient();
string htmlContent = "<html><body><h1>Hello!</h1><p>This is a sample PDF.</p></body></html>";
string base64Html = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(htmlContent));
var requestData = new {
html = base64Html,
margin = new {
top = "30px",
left = "30px"
},
webhook = "https://your-app.com/webhook"
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/async"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"Request ID: {result.GetProperty("requestId").GetString()}");
Console.WriteLine("PDF will be sent to webhook when ready");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
Use templates with webhook notification:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
public class PDFBoltIntegrationTemplate {
public static async Task Main(string[] args) {
using var client = new HttpClient();
var requestData = new {
templateId = "your-template-id",
templateData = new {
client_name = "John Doe",
invoice_number = "INV-001",
total_amount = "$299.99",
line_items = new object[] {
new {
description = "Web Development",
unit_price = "$200.00"
},
new {
description = "Design Services",
unit_price = "$99.99"
}
}
},
webhook = "https://your-app.com/webhook"
};
var request = new HttpRequestMessage {
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.pdfbolt.com/v1/async"),
Content = new StringContent(
JsonSerializer.Serialize(requestData),
System.Text.Encoding.UTF8,
"application/json"
)
};
request.Headers.Add("API-KEY", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
try {
using var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode) {
var errorContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine($"Error Message: {errorContent}");
return;
}
var responseContent = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<JsonElement>(responseContent);
Console.WriteLine($"Request ID: {result.GetProperty("requestId").GetString()}");
Console.WriteLine("PDF will be sent to webhook when ready");
} catch (Exception ex) {
Console.WriteLine($"Error: {ex.Message}");
}
}
}
3. What's next?
Discover how PDFBolt can enhance your .NET applications. Begin with the API Endpoints and explore the Conversion Parameters to customize your setup and meet your specific needs.