푸터 콘텐츠로 바로가기
마이그레이션 가이드

C#에서 PDFBolt에서 IronPDF로 마이그레이션하는 방법

PDFBolt에서 IronPDF로의 마이그레이션은 .NET PDF 워크플로우를 클라우드 전용 SaaS REST 서비스에서 로컬 문서 처리와 문서당 할당량이 없는 자체 호스팅 라이브러리로 이동시킵니다. 이 가이드는 PDFBolt가 제공하지 않는 PDF 조작 기능을 추가하면서 네트워크 종속성, 월별 사용 한도 및 외부 데이터 전송을 제거하는 단계별 마이그레이션 경로를 제공합니다.

PDFBolt에서 IronPDF로 이전하는 이유

클라우드 전용 문제

PDFBolt는 REST API로 노출된 클라우드 전용 SaaS 플랫폼입니다; 공식 .NET SDK와 PDFBolt NuGet 패키지가 없습니다. 통합은 https://api.pdfbolt.com/v1/direct에 대한 HttpClient로 손수 롤링됩니다. 빠른 프로토타입을 위해 편리하지만, 이 아키텍처는 프로덕션 애플리케이션에 대한 도전을 야기합니다:

  1. 클라우드 전용 처리: 모든 문서는 PDFBolt의 서버를 거치며 — 자체 호스팅 옵션이 없기 때문에 데이터 흐름에 대한 더 많은 제어가 필요한 팀에게 장애물이 될 수 있습니다.

  2. 데이터 개인정보 고려사항: 민감한 문서(계약서, 의료 기록, 금융 데이터)가 외부로 전송됩니다. 규제 데이터를 다루는 회사는 정당한 검토 우려를 가질 것입니다.

  3. 사용 한도: 무료 계층은 월 100 문서, 분당 20 요청, 동시 요청 1개로 제한되며, 이는 프로덕션 작업 부하에 충분하지 않을 수 있습니다. 유료 계층은 $19/월에서 $249/월까지 확장됩니다 (per pdfbolt.com/pricing).

  4. 네트워크 의존성: 인터넷 장애나 PDFBolt의 다운타임은 PDF 생성이 완전히 중단됨을 의미합니다.

  5. 지연 시간: 네트워크 왕복으로 인해 로컬 처리에 비해 변환 시 몇 초가 추가됩니다.

  6. 컴플라이언스 검토: GDPR, HIPAA 및 SOC2 감사는 외부 문서 처리가 포함될 때 추가 문서를 일반적으로 요구합니다.

  7. API 키 보안: 유출된 API 키는 계정에 요금 부과를 초래할 수 있습니다.

  8. 벤더 종속: PDFBolt가 약관을 변경하거나 종료하면 애플리케이션이 작동을 멈춥니다.

PDFBolt대IronPDF비교

문제 PDFBolt IronPDF
데이터 위치 외부 서버 귀하의 서버만
사용 제한 100개 무료/월, 이후 계층형 구독 무제한
인터넷 필수 항상 필요 아니요
지연 시간 네트워크 왕복 로컬
규정 준수 복잡함 (외부 처리) 간단함 (로컬 처리)
비용 모델 월간 구독 계층 ($19–$249/월) 일회성 또는 연간
오프라인 작동 불가능 완전히 지원
API 키 위험 유출됨 = 요금 부과 라이선스 키, 요금 부과 위험 없음

IronPDF는 문서 처리를 로컬로 유지하고 외부 클라우드 서비스에 대한 종속성을 제거하는 현대적인 .NET 기반의 자체 호스팅 기초를 제공합니다.


시작하기 전에

필수 조건

  1. .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
  3. IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요

NuGet 패키지 변경 사항

PDFBolt에는 공식 .NET SDK와 PDFBolt NuGet 패키지가 없어서 제거할 것이 없습니다.PDFBolt측의 정리는 손수 롤링된 HttpClient 래퍼와 요청/응답 DTOs를 삭제하는 것입니다. 그런 다음 IronPDF를 설치하십시오:

# Install IronPDF(replaces the hand-rolled HttpClient wrapper)
dotnet add package IronPdf
# Install IronPDF(replaces the hand-rolled HttpClient wrapper)
dotnet add package IronPdf
SHELL

라이선스 구성

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

PDFBolt사용 알아보기

# Find allPDFBoltREST calls
grep -rE "api\.pdfbolt\.com|API-KEY|/v1/direct" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
# Find allPDFBoltREST calls
grep -rE "api\.pdfbolt\.com|API-KEY|/v1/direct" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
SHELL

완전한 API 참조

핵심 개념 매핑

PDFBolt (REST) IronPDF
HttpClient + API-KEY 헤더 new ChromePdfRenderer()
JSON 요청 본문 renderer.RenderingOptions
POST https://api.pdfbolt.com/v1/direct renderer.RenderHtmlAsPdf(...) / RenderUrlAsPdf(...)
응답 byte[] PdfDocument

변환 방법 매핑

PDFBolt (REST) IronPDF
POST /v1/direct { "html": <base64> }와 함께 renderer.RenderHtmlAsPdf(html)
POST /v1/direct { "url": "..." }와 함께 renderer.RenderUrlAsPdf(url)

출력 방법 매핑

PDFBolt (REST) IronPDF
await response.Content.ReadAsByteArrayAsync() 그 다음 File.WriteAllBytes pdf.SaveAs(path)
await response.Content.ReadAsByteArrayAsync() pdf.BinaryData

페이지 구성 매핑

PDFBolt JSON IronPDF
"format": "A4" renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
"margin": { "top": "20mm" } renderer.RenderingOptions.MarginTop = 20
"margin": { "bottom": "20mm" } renderer.RenderingOptions.MarginBottom = 20
"margin": { "left": "15mm" } renderer.RenderingOptions.MarginLeft = 15
"margin": { "right": "15mm" } renderer.RenderingOptions.MarginRight = 15

헤더/푸터 플레이스홀더 매핑

PDFBolt(베이스64 인코딩된 headerTemplate / footerTemplate 안에) IronPDF(HtmlFragment 토큰)
<span class="pageNumber"></span> {page}
<span class="totalPages"></span> {total-pages}
<span class="date"></span> {date}
<span class="title"></span> {html-title}

코드 마이그레이션 예제

예제 1: 기본 HTML에서 PDF로

이전 (PDFBolt — HttpClient를 통한 REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim payload As String = JsonSerializer.Serialize(New With {
            .html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        })

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("output.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

구조적 차이는 통합 모델입니다. PDFBolt에서는 HTML을 베이스64 인코딩하고, JSON 페이로드를 빌드하며, API-KEY 헤더를 설정하고, POSThttps://api.pdfbolt.com/v1/direct에 보내고, 응답을 대기하고, 반환된 바이트를 스스로 디스크에 써야 합니다.

IronPDF의 ChromePdfRenderer.RenderHtmlAsPdf()는 내장된 SaveAs() 메서드가 있는 PdfDocument 객체를 반환합니다. 객체 지향 모델은 저장하기 전에 PDF를 조작(워터마크 추가, 문서 병합, 보안 적용)할 수 있게 합니다. 기존 코드와의 호환성을 위해 원시 바이트가 필요하면 pdf.BinaryData를 사용하세요. HTML to PDF 문서에서 추가 렌더링 옵션을 참조하십시오.

예제 2: URL에서 PDF로 변환

이전 (PDFBolt — HttpClient를 통한 REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var payload = JsonSerializer.Serialize(new { url = "https://www.example.com" });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var payload = JsonSerializer.Serialize(new { url = "https://www.example.com" });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
    }
}
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim payload = JsonSerializer.Serialize(New With {.url = "https://www.example.com"})

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes As Byte() = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("webpage.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFBolt 쪽에서, URL 변환은 여전히 전체 REST 왕복이 필요합니다: JSON 본문을 작성하고, API 키 헤더를 설정하고, POST를 대기하여 응답 바이트를 기록합니다. 이미 공개 URL을 가리키고 있더라도, 가져오기 및 렌더링은 모두PDFBolt서버에서 이루어집니다.

IronPDF의 RenderUrlAsPdf()는 내장된 SaveAs() 메서드가 있는 PdfDocument를 반환합니다. 주요 이점은 IronPDF가 URL 가져오기 및 PDF 렌더링을 로컬에서 수행한다는 것입니다 — 문서 데이터가 인프라를 벗어나지 않습니다. URL에서 PDF로 변환에 대해 더 알아보세요.

예제 3: 사용자 정의 페이지 설정이 있는 HTML 파일

이전 (PDFBolt — HttpClient를 통한 REST):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/parameters
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = await File.ReadAllTextAsync("input.html");
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            format = "A4",
            margin = new { top = "20mm", bottom = "20mm" },
            printBackground = true
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/parameters
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = await File.ReadAllTextAsync("input.html");
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            format = "A4",
            margin = new { top = "20mm", bottom = "20mm" },
            printBackground = true
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim html = Await File.ReadAllTextAsync("input.html")
        Dim payload = JsonSerializer.Serialize(New With {
            .html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            .format = "A4",
            .margin = New With {.top = "20mm", .bottom = "20mm"},
            .printBackground = True
        })

        Using http As New HttpClient()
            http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
            Using content As New StringContent(payload, Encoding.UTF8, "application/json")
                Using response As HttpResponseMessage = Await http.PostAsync("https://api.pdfbolt.com/v1/direct", content)
                    response.EnsureSuccessStatusCode()

                    Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
                    Await File.WriteAllBytesAsync("output.pdf", pdfBytes)
                End Using
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 20
        renderer.RenderingOptions.MarginBottom = 20
        Dim html = File.ReadAllText("input.html")
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예시는 페이지 구성 매핑을 보여줍니다. PDFBolt는 CSS 스타일 문자열(values)인 중첩된 margin 객체와 함께 최상위 format를 수락합니다 ("20mm"). IronPDF는 강력한 유형의 속성이 있는 렌더러의 RenderingOptions 객체를 사용합니다.

주요 매핑:

  • "format": "A4"PdfPaperSize.A4 (강력한 유형의 열거형)
  • "margin": { "top": "20mm" }RenderingOptions.MarginTop = 20 (숫자 mm)

IronPDF 여백은 항상 숫자 밀리미터이므로PDFBoltCSS 단위 문자열인 "20mm"가 직접적으로 매핑됩니다. PdfPaperSize 열거형에 접근하려면 IronPdf.Rendering 네임스페이스가 필요합니다. 추가 페이지 구성을 위해서는 렌더링 옵션 문서를 참조하십시오.


중요한 마이그레이션 노트

반환 타입 변경

PDFBolt의 /v1/direct 엔드포인트는 HTTP 응답 본문으로 원시 PDF를 반환합니다; IronPDF는 PdfDocument을 반환합니다:

//PDFBoltpattern:
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);

//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
//PDFBoltpattern:
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);

//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
Imports System.IO
Imports System.Net.Http

'PDFBolt pattern:
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
Await File.WriteAllBytesAsync("output.pdf", pdfBytes)

'IronPDF pattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")

' Or if you need bytes:
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
$vbLabelText   $csharpLabel

통합 모델 변경

통합 모양이 REST 클라이언트에서 인프로세스 라이브러리로 변경됩니다:

// PDFBolt
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
// ... build JSON, POST to https://api.pdfbolt.com/v1/direct

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
// ... build JSON, POST to https://api.pdfbolt.com/v1/direct

// IronPDF
var renderer = new ChromePdfRenderer();
Imports System.Net.Http

' PDFBolt
Using http As New HttpClient()
    http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY")
    ' ... build JSON, POST to https://api.pdfbolt.com/v1/direct
End Using

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

구성 패턴 변경

PDFBolt 구성은 요청 본문에서 JSON 필드입니다; IronPDF는 RenderingOptions를 사용합니다:

// PDFBolt: JSON request fields
new { format = "A4", margin = new { top = "20mm" } }

// IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
// PDFBolt: JSON request fields
new { format = "A4", margin = new { top = "20mm" } }

// IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
' PDFBolt: JSON request fields
New With {Key .format = "A4", Key .margin = New With {Key .top = "20mm"}}

' IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
$vbLabelText   $csharpLabel

API 키 제거

PDFBolt는 모든 요청에 API-KEY 헤더가 필요하며; IronPDF는 일회성 라이선스 키를 사용합니다:

// PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config["PDFBolt:ApiKey"]);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
// PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config["PDFBolt:ApiKey"]);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
' PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config("PDFBolt:ApiKey"))

' IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

네트워크 오류 처리 제거

로컬 처리는 처리할 네트워크 오류가 없음을 의미합니다:

// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
$vbLabelText   $csharpLabel

새로운 기능 제공

IronPDF로 마이그레이션한 후, PDFBolt가 제공하지 않는 기능을 얻을 수 있습니다:

// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
' PDF Merging (not available in PDFBolt)
Dim merged = PdfDocument.Merge(pdf1, pdf2)

' Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>")

' Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret"

' Text Extraction (not available in PDFBolt)
Dim text As String = pdf.ExtractAllText()

' PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png")
$vbLabelText   $csharpLabel

문제 해결

문제 1: NuGet에 PDFBolt 패키지가 없습니다

문제: IronPDF에서 using PDFBolt; / new HtmlToPdfConverter()을 찾고 있습니다.

해결책: PDFBolt에는 .NET SDK가 없으며 — 통합은 https://api.pdfbolt.com/v1/direct에 대한 HttpClient으로 되어 있습니다. IronPDF는 그것의 래퍼를 완전히 ChromePdfRenderer로 대체합니다.

// IronPDF
var renderer = new ChromePdfRenderer();
// IronPDF
var renderer = new ChromePdfRenderer();
' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

문제 2: ConvertHtmlString는 어디에 갔습니까?

문제: ConvertHtmlString(html) 메서드를 공개한 사내PDFBolt래퍼를 마이그레이션합니다.

해결책: RenderHtmlAsPdf()를 사용하세요:

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

문제 3: ConvertUrl는 어디에 갔습니까?

문제: ConvertUrl(url) 메서드를 공개한 사내PDFBolt래퍼를 마이그레이션합니다.

해결책: RenderUrlAsPdf()를 사용하세요:

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
$vbLabelText   $csharpLabel

문제 4: format JSON 필드 → 열거형

문제: PDFBolt의 "format": "A4" JSON 필드를 번역합니다.

해결책: IronPdf.Rendering에서 PdfPaperSize를 사용하세요:

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
Imports IronPdf.Rendering

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
$vbLabelText   $csharpLabel

문제 5: 첫 번째 PDF 생성이 느림

문제: 초기 렌더링이 예상보다 오래 걸립니다.

해결책: Chromium 엔진은 처음 사용할 때 초기화됩니다. 필요시 사전 가열:

// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
' Warm up during application startup
Dim renderer As New ChromePdfRenderer()
renderer.RenderHtmlAsPdf("<html><body></body></html>")
$vbLabelText   $csharpLabel

마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스에서PDFBoltREST 호출을 모두 목록화하세요 (api.pdfbolt.com)
  • 현재 JSON 요청 필드를 문서화하세요 (format, margin, printBackground, headerTemplate 등)
  • 제거할 API 키 관리 코드 식별
  • 429 / 쿼터 재시도 처리를 삭제 -IronPDF라이센스 키를 받으세요

패키지 변경 사항

  • 손수 롤링된PDFBoltHttpClient 래퍼 및 DTOs를 삭제하세요 (제거할 NuGet 패키지가 없음)
  • IronPdf NuGet Install-Package: dotnet add package IronPdf
  • using IronPdf; 네임스페이스 추가
  • 종이 크기 열거형을 위한 using IronPdf.Rendering; 추가

코드 변경 사항

  • 시작 시 라이선스 키 구성 추가
  • HttpClient + API-KEY 통합을 ChromePdfRenderer로 교체
  • POST /v1/directRenderHtmlAsPdf() / RenderUrlAsPdf()로 교체
  • await response.Content.ReadAsByteArrayAsync() + File.WriteAllBytes()pdf.SaveAs()으로 교체 (또는 바이트가 여전히 필요하면 pdf.BinaryData)
  • "format" / "margin" JSON 필드를 RenderingOptions.PaperSize / RenderingOptions.MarginTop 등으로 매핑
  • API 키 관리 코드 제거
  • 429 / 속도 제한 처리 제거
  • 네트워크 오류 처리 제거

마이그레이션 이후

  • 구성 파일에서 API 키 삭제
  • 비밀 관리자에서 API 키 제거
  • PDF 출력 비교 모든 테스트 실행
  • 페이지 크기와 여백이 정확하게 렌더링 되는지 확인
  • 새로운 기능 추가 고려 (워터마크, 보안, 병합)

참고해 주세요PDFBolt는 해당 소유자의 등록 상표입니다. 이 사이트는 PDFBolt와 제휴하거나, 승인받거나, 후원받은 것이 아닙니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해