IRONSOFTWAREHOME
동영상

C#에서 이미지를 PDF로 변환하는 방법

Curtis Chau
Curtis Chau
Updated: 2026년 5월 18일

CraftMyPDF에서 IronPDF로의 이전 이유는 무엇입니까?

CraftMyPDF와 같은 클라우드 기반 PDF API는 많은 제작 환경에 부적합한 근본적인 문제를 도입합니다.

클라우드 기반 PDF API의 문제

  1. 데이터가 시스템을 떠납니다: 모든 HTML 템플릿과 JSON 데이터 페이로드가 CraftMyPDF의 서버로 전송됩니다. 송장, 계약서, 의료 기록 또는 다른 민감한 비즈니스 데이터의 경우 이것은 HIPAA, GDPR 및 SOC2 준수 위험을 초래합니다.

  2. 네트워크 지연 시간: 각 PDF 생성은 네트워크 왕복 및 대기 및 렌더링 시간을 포함합니다 (일반적으로 초 단위). IronPDF는 밀리초 단위로 로컬에서 생성합니다.

  3. PDF 비용 증가: 크레딧 기반 가격이 볼륨과 함께 누적됩니다 — 높은 처리량 워크로드는 일회성 영구 라이선스에 비해 상당한 재발 비용을 초래합니다.

  4. 인쇄 최적화 출력: 클라우드 API는 종종 인쇄를 위해 최적화합니다. 배경을 줄이고 색상을 단순화하여 "잉크"를 절약합니다. 결과는 화면상의 HTML과 다르게 보입니다.

  5. 템플릿 잠금: CraftMyPDF는 그들만의 드래그 앤 드롭 편집기를 요구합니다. 표준 HTML/CSS를 자유롭게 사용할 수 없습니다.

아키텍처 비교

측면CraftMyPDFIronPDF
데이터 위치클라우드 (데이터가 시스템을 떠남)온-프레미스(데이터는 절대 외부로 나가지 않음)
지연 시간네트워크 왕복 + 렌더링 (일반적으로 초 단위)밀리초
가격크레딧 기반 구독일회성 영구 라이선스
템플릿 시스템독점적 드래그 앤 드롭만 지원모든 HTML/CSS/JavaScript
출력 품질인쇄 최적화픽셀 완벽 화면 렌더링
오프라인에서 작동아니요(인터넷 필요)
규정 준수데이터가 조직을 떠남SOC2/HIPAA 지원

기능 비교

기능CraftMyPDFIronPDF
HTML to PDFAPI 템플릿 사용✅ 네이티브
URL을 PDF로 변환API를 통해✅ 네이티브
커스텀 템플릿독점 에디터만 지원✅ 모든 HTML
CSS3 지원제한적✅ 전체
JavaScript 렌더링제한적✅ 전체
PDF 병합/분할API를 통해✅ 네이티브
워터마크API를 통해✅ 네이티브
오프라인에서 작동
자체 호스팅

이전 준비

필수 조건

환경이 다음 요구 사항을 충족하는지 확인하세요:

  • .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ 또는 VS Code와 C# 확장
  • NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)

###CraftMyPDF사용 감사

이 명령을 솔루션 디렉토리에서 실행하여 모든CraftMyPDF참조를 식별하십시오:

# Find allCraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .

# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .

# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
SHELL

예상해야 할 주요 변경사항

변경CraftMyPDFIronPDF영향
아키텍처클라우드 REST API로컬 .NET 라이브러리HTTP 호출 제거
템플릿독점 편집기표준 HTML템플릿을 HTML로 변환
API 키모든 호출에 필수시작 시 라이선스API 키 처리를 제거
비동기 패턴필수 (HTTP)선택적선호할 경우 await 제거
오류 처리HTTP 상태 코드예외try/catch 패턴 변경
데이터 바인딩JSON 템플릿문자열 보간데이터 바인딩 단순화

단계별 마이그레이션 프로세스

1단계: NuGet 패키지 업데이트

HTTP 클라이언트 라이브러리를 제거하고 IronPDF를 설치하십시오:

# Remove RestSharp HTTP client
dotnet remove package RestSharp

# Install IronPDF
dotnet add package IronPdf
SHELL

2단계: 네임스페이스 참조 업데이트

HTTP 클라이언트 네임스페이스를 IronPDF로 바꾸십시오:

// Remove these
using RestSharp;
using System.IO;

// Add this
using IronPdf;

3단계: 라이선스 구성 (시작 시 한 번)

요청당 API 키 헤더를 단일 라이선스 구성으로 교체하십시오:

// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

완전한 API 마이그레이션 참조

API 끝점 매핑

CraftMyPDFIronPDF
POST /v1/createrenderer.RenderHtmlAsPdf(html)
X-API-KEY 헤더License.LicenseKey = "..."
template_id표준 HTML 문자열
{%name%} 자리 표시자$"{name}" C# 보간법
POST /v1/mergePdfDocument.Merge(pdfs)
POST /v1/add-watermarkpdf.ApplyWatermark(html)
웹훅 콜백필요 없음
속도 제한적용 안 됨

구성 매핑

CraftMyPDF 옵션IronPDF 동등
template_idHTML 문자열
data JSONC# 보간
page_size: "A4"PaperSize = PdfPaperSize.A4
orientation: "landscape"PaperOrientation = Landscape
margin_top: 20MarginTop = 20
headerHtmlHeader
footerHtmlFooter

코드 마이그레이션 예제

HTML을 PDF로 변환

가장 일반적인 작업은 클라우드 API에서 로컬 렌더링으로의 근본적 아키텍처 변경을 보여줍니다.

CraftMyPDF 구현:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}

IronPDF 구현:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}

IronPDF는 RestClient 설정, API 키 헤더, 템플릿 ID 및 HTTP 응답 처리를 없애면서 15줄의 클라우드 작업을 4줄의 로컬 코드로 줄입니다. 더 많은 옵션을 보려면 HTML to PDF 문서를 참조하세요.

URL을 PDF로 변환

CraftMyPDF 구현:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                url = "https://example.com"
            },
            export_type = "file" // "file" returns binary PDF; "json" returns a CDN URL
        });

        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}

IronPDF 구현:

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

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

IronPDF의 RenderUrlAsPdf 메서드는 JavaScript로 렌더링된 콘텐츠를 포함하여 전체 웹페이지를 캡처합니다. 더 많은 옵션을 보려면 URL to PDF 문서를 참조하세요.

머리말과 바닥글

CraftMyPDF 구현:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Document Content</h1>",
                header = "<div>Page Header</div>",
                footer = "<div>Page {page} of {total_pages}</div>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("document.pdf", response.RawBytes);
    }
}

IronPDF 구현:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}"
        };
        
        var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
        pdf.SaveAs("document.pdf");
    }
}

IronPDF는 동적 페이지 번호 매기기를 위해 {page}{total-pages} 같은 자리 표시자 토큰을 지원합니다. 더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.

템플릿 변수 변환

CraftMyPDF는 소유한 템플릿 플레이스홀더를 사용하며, C# 문자열 보간으로 변환해야 합니다:

CraftMyPDF 패턴:

//CraftMyPDFtemplate variables
request.AddJsonBody(new
{
    template_id = "invoice-template",
    data = new
    {
        customer = "John Doe",
        amount = "$1,000",
        items = invoiceItems
    }
});

IronPDF 패턴:

// C# string interpolation
var html = $@"
<html>
<body>
    <h1>Invoice</h1>
    <p>Customer: {customerName}</p>
    <p>Amount: {amount}</p>
    {GenerateItemsTable(invoiceItems)}
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);

중요한 마이그레이션 노트

모든 HTTP 코드 제거

가장 중요한 변화는 네트워크 종속성 제거입니다. IronPDF는 로컬에서 실행됩니다—RestClient, API 호출, 응답 처리 필요 없음:

//CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);

//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);

속도 제한 코드 제거

CraftMyPDF는 재시도 로직을 요구하는 API 속도 제한을 부과합니다. IronPDF는 제한이 없습니다:

//CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }

//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!

웹훅 핸들러 제거

CraftMyPDF는 PDF 완료를 위해 비동기 웹훅을 사용합니다. IronPDF는 동기식입니다—PDF는 즉시 준비됩니다:

//CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback

//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!

기본 동기화

HTTP 호출만을 위한 경우에만 필요했던 비동기/대기 패턴을 제거하세요:

//CraftMyPDF- async required
var response = await client.ExecuteAsync(request);

//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);

마이그레이션 후 점검 목록

코드 마이그레이션을 완료한 후, 다음을 확인하십시오:

  • 모든 PDF 생성 테스트 실행
  • 출력 품질 비교 (IronPDF의 Chromium 엔진은 픽셀 정확하게 렌더링함)
  • 성능 향상 측정 (밀리초 vs. 초)
  • 모든 템플릿이 올바르게 변환되었는지 검증
  • 속도 제한 없이 일괄 처리 테스트
  • 모든 대상 환경에서 테스트합니다
  • CI/CD 파이프라인을 업데이트하세요 -CraftMyPDF구독 취소
  • 비밀/구성에서 API 키 제거

추가 리소스


CraftMyPDF에서 IronPDF로의 전환은 클라우드 종속성, 네트워크 지연, PDF당 비용, 템플릿 종속성을 없애며 오프라인으로 실행되는 픽셀 완벽한 Chromium 렌더링을 제공합니다. REST API 호출에서 로컬 메서드 호출로의 전환은 코드베이스를 간소화하고 민감한 문서 데이터를 인프라 내에 유지합니다.

참고해 주세요: CraftMyPDF는 해당 소유자의 등록 상표입니다. 이 사이트는 CraftMyPDF와 관련이 없으며, 지원하거나 후원하지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
Curtis Chau
기술 문서 작성자

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

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.