비교

2026년 HTML을 PDF로 변환하는 도구에 대한 결정적인 가이드

HTML을 PDF로 변환하는 도구 비교

HTML에서 PDF로의 변환은 다섯 가지 뚜렷한 계층으로 나누어집니다: 브라우저 엔진 래퍼, 상업용 CSS 엔진, 프로그래밍 PDF 빌더, 클라이언트 측 변환기, 클라우드 REST API. 각 계층은 근본적으로 다른 변환 프로세스와 렌더링 충실도, 스타일시트 지원, 성능, 비용에서의 절충점을 제공합니다. Chromium 기반 도구(Puppeteer, Playwright, IronPDF, Gotenberg)는 JavaScript를 실행하고 전체 CSS3을 렌더링하기 때문에 최신 웹 콘텐츠를 위해 지배적이지만 경량 PDF 도구보다 6–11배 더 많은 CPU/RAM을 사용합니다. 상업용 CSS 엔진(PrinceXML, PDFreactor, Antenna House)은 가장 높은 품질의 페이지화된 PDF 문서를 출력하지만 비용이 연간 $1,900~$7,000+에 달합니다. 가장 중요한 발견: HTML을 변환하기 위해 수천 개의 프로덕션 시스템에 여전히 포함되어 있는 wkhtmltopdf가 중요 보안 결함(CVE)이 패치되지 않은 상태로 2023년 1월 아카이브로 이동되었으며, 즉시 교체해야 합니다.

이 보고서는 렌더링 엔진, CSS/JavaScript 지원, 보안 기능, 배포 옵션, 가격, 확장성 등에서 23개의 도구를 평가합니다. 이는 공식 문서, GitHub 리포지토리, 독립적인 벤치마크에서 수집한 정보를 바탕으로 하여 귀하의 워크플로우에 적합한 변환기를 선택하는 데 도움을 드립니다.

렌더링 엔진이 PDF 도구 기능을 정의하는 방법

엔진 아키텍처 이해

HTML-to-PDF 도구를 선택할 때 가장 중요한 단일 요소는 렌더링 엔진입니다. CSS 지원, JavaScript 실행, 렌더링 충실도 등 기타 모든 기능은 이 아키텍처적 결정에서 비롯됩니다.

Chromium/Blink 기반 도구 (Puppeteer, Playwright, IronPDF, Gotenberg, PDFCrowd, PDFShift, 헤드리스 Chrome CDP, Selenium)는 Google의 브라우저 엔진을 사용합니다. 이들은 Chrome과 동일하게 웹페이지를 로드하고, 전체 CSS3 (Flexbox, Grid, 변수, 미디어 쿼리)를 지원하며, 모든 최신 HTML 코드를 실행합니다. 절충점은 리소스 소비입니다: 동시 부하 시 변환당 약 85–200 MB RAM, 1.5–2 GB의 Docker 이미지, 서버리스 환경에서 5–15초의 콜드 스타트가 발생합니다.

맞춤 CSS-to-PDF 엔진 (PrinceXML, PDFreactor, Antenna House, WeasyPrint, iText pdfHTML)은 HTML과 CSS를 전용 렌더러를 사용하여 구문 분석합니다. 그들은 CSS 페이지 매체에서 뛰어난 성능을 발휘하며 웹 브라우저에서는 기본적으로 부족한 기능인 러닝 헤더, 푸터 섹션, 각주 및 여백 박스를 포함합니다. PrinceXML은 2003년에 이 접근 방식을 개척했습니다; 회장 Håkon Wium Lie는 CSS 자체를 공동 창시했습니다. PDFreactor는 커스텀 엔진 중에서 최고의 JavaScript 지원을 제공합니다 (GraalJS를 통한 ECMAScript 2025). Antenna House는 네이티브 C/C++ 엔진을 통해 국제화(80개 이상의 언어, 30개 이상의 스크립트) 및 순수 성능에서 선도적인 기업입니다.

프로그래매틱 빌더 (PDFKit, pdfmake, jsPDF)는 직접적인 HTML 입력 대신 코드로부터 PDF 파일을 생성합니다. 개발자들이 레이아웃을 프로그램으로 정의해야 하며, 선택 가능한 텍스트를 가진 벡터 출력을 생성하지만 HTML/CSS 파싱은 전혀 지원하지 않습니다. 클라이언트 측 스크린샷 도구(html2pdf.js)는 브라우저에서 렌더링된 DOM을 래스터 이미지로 캡처하여 선택할 수 없고 검색할 수 없는 문서를 생성하며, 페이지 크기와 품질에 상당한 제한이 있습니다.

엔진 유형대표적인 도구JS 실행현대 CSSCSS 분할 미디어일반적인 RAM/변환
Chromium/BlinkPuppeteer, Playwright, IronPDF, GotenbergFullFullNone85–200 MB
사용자 정의 CSSPrinceXML, PDFreactor, WeasyPrint없음–전체 (다양함)Good–Full탁월함30–100 MB
맞춤 레이아웃 (Java)iText pdfHTML, OpenHTMLtoPDF, Flying SaucerNoneCSS 2.1–CSS3Good50–150 MB
프로그래매틱PDFKit, pdfmakeN/AN/AN/A10–50 MB
캔버스 스크린샷html2pdf.js, jsPDF (.html())N/Ahtml2canvas를 통해 (제한적)NoneVariable

도구별 완성 비교 매트릭스

다음 표는 모든 23개 도구에 대한 가장 의사 결정 관련 속성을 요약합니다. 각 항목에 대한 자세한 분석은 다음 섹션에서 설명합니다.

도구유형언어엔진JS 지원Flexbox/Grid머리글/바닥글입력 가능한 양식라이선스시작 가격
IronPDF라이브러리C#, Java, Python, NodeChromiumFull✅/✅✅ HTML+text✅ HTML에서 자동독점$2,998 영구 라이선스
Puppeteer라이브러리Node.jsChromiumFull✅/✅✅ HTML 템플릿Apache 2.0Free
Playwright라이브러리JS, Python, Java, .NETChromiumFull✅/✅✅ HTML 템플릿Apache 2.0Free
헤드리스 Chrome CDP프로토콜Any (CDP client)ChromiumFull✅/✅✅ HTML 템플릿BSDFree
Selenium라이브러리Java, Python, C#, Ruby, JSChromium/FirefoxFull✅/✅⚠ Via CDP onlyApache 2.0Free
GotenbergDocker APIGo (HTTP API)Chromium + LibreOfficeFull✅/✅✅ HTML 템플릿MITFree
PrinceXMLCLI/엔진Mercury (wrappers: Java, .NET, PHP)맞춤형Partial (ES5)✅/✅ (성숙 중)✅ CSS Paged Media독점$495 desktop / $3,800 server
PDFreactor라이브러리/서비스Java커스텀 + GraalJSFull (ES2025)✅/✅✅ CSS Paged Media독점$1,908/yr
Antenna House엔진/CLIC/C++ (APIs: Java, .NET, COM)맞춤 XSL-FO + CSSNone✅/❌✅ XSL-FO + CSS독점$400/yr Lite
WeasyPrintLibrary/CLIPythonCustom (Cairo/Pango)None✅/⚠ 기본✅ CSS Paged Media⚠ PartialBSD 3-ClauseFree
wkhtmltopdfCLIC++ (Qt)Qt WebKit (\~2012)⚠ ES5 only❌/❌✅ CLI 플래그LGPL v3무료 (보관됨)
iText pdfHTML라이브러리Java, C#커스텀 (iText Core)None✅/✅✅ @page rulesAGPL / 상업용\~$10K/yr 상업용
OpenHTMLtoPDF라이브러리JavaCustom + PDFBoxNone❌/❌✅ @page rules⚠ 기본LGPL 3.0Free
Flying Saucer라이브러리JavaCustom + OpenPDFNone❌/❌✅ 여백 상자⚠ 제한됨LGPL 2.1+Free
jsPDF라이브러리JavaScript (browser + Node)html2canvas (for HTML)PDF에서 None❌/❌ (via html2canvas)⚠ Via plugin✅ AcroForm APIMITFree
html2pdf.js라이브러리JavaScript (브라우저 전용)html2canvas + jsPDFNone❌/❌MITFree
pdfmake라이브러리JavaScript (browser + Node)사용자 정의 선언적NoneN/A (own layout)✅ 내장MITFree
PDFKit라이브러리Node.js사용자 지정 명령형⚠ AcroForm onlyN/A (no CSS)⚠ 이벤트를 통한 수동✅ AcroForm APIMITFree
DocRaptor클라우드 APIAny (REST)PrinceXML부분적 (다단계)✅/via Prince✅ CSS Paged Media✅ Auto독점$15/월 (125 문서)
PDFCrowd클라우드 APIAny (REST)ChromiumFull✅/✅✅ 기본독점\~$11/월
PDFShift클라우드 APIAny (REST)ChromiumFull✅/✅✅ (paid plans)독점무료 (50/월) / $9/월
APITemplate.io클라우드 APIAny (REST)Likely ChromiumFull✅/✅✅ 템플릿을 통해독점무료 (50/월) / $19/월
NutrientSDK/API/Engine다중 플랫폼Chromium + PDFiumFull✅/✅✅ 고급✅ Auto독점$67/mo cloud / SDK custom

IronPDF: 돋보이는 라이브러리로 HTML 파일을 손쉽게 PDF로 변환하세요

IronPDF

IronPDF는 독특한 위치를 차지하고 있기 때문에 확장된 분석이 필요합니다: 아마도 Chrome 기반의 렌더링 엔진으로 구성된 .NET 라이브러리에 비정상적으로 광범위한 PDF 툴킷이 포함되어 있습니다. 개발자가 암호화, 디지털 서명 또는 양식 조작을 위해 별도의 라이브러리를 설치하고 연결해야 하는 Puppeteer와 달리, IronPDF는 모든 것을 단일 NuGet 패키지로 번들로 제공합니다.

렌더링 아키텍처는 후속 렌더링을 위해 지속적으로 따뜻하게 유지되는 맞춤형 최적화 Chrome 엔진을 포함하여, 대규모로 사용할 때 비싸다는 raw Puppeteer의 문제인 PDF당 프로세스 생성 문제를 제거합니다. IronPDF는 높은 부하 시나리오에서 웹 드라이버 기반 솔루션보다 5–20배 빠른 성능을 자랑합니다. G2 리뷰는 "100+ 페이지 보고서가 픽셀 완벽한 정확성을 가지고 있으며" 완전한 CSS 충실도를 제공한다고 확인합니다.

HTML 파일에 대한 API 인체공학은 정말 최소한입니다. 핵심 패턴은 두 줄의 C#입니다:

var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello</h1>");

pdf.SaveAs("output.pdf");
var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello</h1>");

pdf.SaveAs("output.pdf");
Dim pdf = (New ChromePdfRenderer()).RenderHtmlAsPdf("<h1>Hello</h1>")

pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

구성 스케일이 깨끗하게 이루어집니다: RenderingOptions는 CSS 미디어 타입 전환, JavaScript 대기 전략, 맞춤형 CSS 삽입, PaperFit을 통한 반응형 뷰포트 제어를 제공합니다. 도구 모음의 폭은 주요 차별화 요소입니다. IronPDF는 파일 병합, 분할, 복사/삭제, AES-256 암호화, X.509 디지털 서명, 영구 삭제, HTML 기반 워터마킹, 페이지 방향 PDF/A 준수, PDF/UA 접근성 출력, 그리고 HTML

요소에서 PDF로의 AcroForm 생성을 지원합니다. 웹 페이지, DOCX 파일 등을 몇 줄의 코드로 PDF 파일 형식으로 변환하여 짧은 시간 안에 여러 파일을 쉽게 생성할 수 있습니다.

크로스 플랫폼 배포는 Windows, Linux(종속성이 없는 Ubuntu, Debian/CentOS), macOS, Docker(gRPC를 통해 포트 33350에서 통신하는 공식 ironsoftwareofficial/ironpdfengine 이미지), Azure(Web Apps, Functions, Kubernetes), 그리고 AWS(Lambda, ECR)를 포함합니다.

가격은 $2,998 (Lite, 1 개발자/프로젝트)부터 $8,998 (Professional, 10 개발자/프로젝트)까지 영구 라이선스로 제공됩니다, OEM 재배포 시 $8,998가 추가됩니다. Iron Suite는 2개의 가격으로 Iron Software의 모든 10개 제품을 번들로 제공합니다. Enterprise OEM에 대한 구독 옵션은 연간 약 \$2,549~\$16,687입니다. 워터마크 없이 30일 동안 완전히 기능하는 체험판을 사용할 수 있습니다.

주요 제한 사항으로는 \~280 MB의 Linux에서의 바이너리 (내장된 Chrome 브라우저), 첫 렌더링 시의 초기 지연 시간, Docker 엔진의 수평적 확장 불가능 및 독점 API의 고유한 공급업체 종속이 포함됩니다. 메모리 관리는 대형 문서를 처리할 때 주의가 필요하며, 일부 사용자들은 큰 테이블 렌더링 시 경계 사례를 보고하고 있습니다.

이 강력한 라이브러리에 대해 더 알아보려면 IronPDF 웹사이트의 방대한 문서를 방문하세요. 이 라이브러리를 사용하여 코딩하는 동안 오류가 발생한 경우, 자세한 문제 해결 섹션과 개발자 지원을 제공합니다.

웹 자동화 도구는 Chromium의 강점과 한계를 공유합니다

Puppeteer, Playwright, Headless Chrome CDP, Selenium, 그리고 Gotenberg는 모두 궁극적으로 Chromium의 Page.printToPDF CDP 명령을 호출합니다. 그들의 차이는 추상화 수준, 언어 지원, 운영 편의성에 있습니다.

Puppeteer (Google, Apache 2.0)는 31.1k GitHub stars으로 가장 성숙한 Node.js 옵션으로 남아 있습니다. 그것의 page.pdf() API는 용지 형식, 배율 (0.1–2×), 여백, 주입 클래스 (pageNumber, totalPages, date)를 포함한 머리글/바닥글 HTML 템플릿, 배경 인쇄, 페이지 범위, 실험적 문서 개요 생성을 노출합니다. A Carriyo 사례 연구에서는 하루 10,000개의 PDFs를 AWS Lambda에서 문서화했습니다. page.createPDFStream() 메서드는 메모리 충돌 없이 대용량 문서를 처리합니다. Puppeteer는 벤치마크에서 10개의 PDF당 평균 7.84초로, 동일한 콘텐츠에 대해 wkhtmltopdf보다 약 3배 빠릅니다.

Playwright (Microsoft, Apache 2.0)은 거의 동일한 PDF 기능을 제공하지만, 공식 다국어 지원 (JavaScript, Python, Java, .NET) 및 Puppeteer의 수동 waitForSelector와 비교하여 불안정성을 줄이는 내장 자동 대기를 추가합니다. 버전 1.42+에서는 헤딩 구조로부터 PDF 목차/북마크 생성을 추가했습니다. PDF 생성은 크로미엄 전용이며, Playwright의 Firefox나 WebKit 브라우저에서는 작동하지 않습니다. 벤치마크에 따르면 Playwright는 탐색이 많은 워크플로우에서 평균 4.513초를 기록한 반면, Puppeteer는 4.784초를 기록했습니다.

Gotenberg은 MIT 라이선스의 Go 기반 Docker HTTP API로 Chromium(및 Office 문서를 위한 LibreOffice)을 감쌉니다. PDF-마이크로서비스를 위한 참조 아키텍처입니다: 상태 비저장, 멀티파트/form-data를 통해 언어 독립적으로 구현되며, Cloud Run 및 AWS Lambda를 위한 최적화된 이미지로 제공됩니다. 이는 PDF 암호화(AES-256 via QPDF), PDF/A 준수(1a, 2b, 3b), 병합/분할 작업, PDF 메타데이터 편집을 고유하게 추가하여 다른 Chromium 기반 도구에서는 기본적으로 제공하지 않는 기능을 제공합니다. 동시성은 인스턴스당 6개의 병렬 Chromium 변환(설정 가능)으로 제한되며, 추가 컨테이너를 통해 수평 확장이 가능합니다.

Headless Chrome CDP는 최저 수준의 옵션으로, 라이브러리 오버헤드가 전혀 없으며, Chrome 바이너리와 CDP 클라이언트를 어떤 언어로든(Go, Python, Ruby, Elixir) 사용할 수 있습니다. CLI 모드 (chrome --headless --print-to-pdf)는 더 이상 사용되지 않으며 CDP API로 대체될 예정입니다. 트레이드 오프는 Chrome 프로세스 수명 주기, 좀비 프로세스를 관리하고, 자신의 대기 전략을 수동으로 구현하는 것입니다.

Selenium + 브라우저 PDF는 PDF 생성에 있어 가장 약한 옵션입니다. 그 표준 PrintsPage API는 제한된 옵션을 가지고 있습니다; 전체 헤더/푸터 템플릿은 CDP 브리지(driver.execute_cdp_cmd("Page.printToPDF", {...}))를 필요로 하며, 이는 Chromium에서만 작동하고 자체적으로도 임시적입니다(WebDriver BiDi로 전환 중). selenium-print 패키지 문서는 명시적으로 경고합니다: "성능이 우선이라면, 이 라이브러리는 적합하지 않습니다."

이 도구들 중 어느 것도 작성 가능한 PDF 양식을 생성하지 않습니다 — Chromium의 PDF로 인쇄 기능은 모든 양식 요소를 평면화합니다. 모두 네이티브로 PDF 암호화, 디지털 서명 또는 수정 기능을 지원하지 않습니다. 이러한 기능을 위해서는 외부 라이브러리(pdf-lib, QPDF, iText)로 후처리가 필요합니다 — 또는 이러한 도구들을 통합하는 Gotenberg를 사용하세요.

상용 CSS 엔진, 페이지가 매겨진 PDF 문서 출판에 탁월

PrinceXML, PDFreactor, Antenna House는 웹 브라우저에서 단순히 구현하지 않는 W3C CSS 페이지 매체 사양을 구현하기 때문에 프리미엄 가격을 책정합니다. 페이지 크기 설정, 왼쪽 여백 상자, 각주, 명명된 페이지 및 자동 목차 생성을 처리합니다.

PrinceXML ($3,800/server one-time, $495/desktop) 는 최고의 표준입니다. Mercury로 작성된 맞춤형 엔진은 2003년 이래 가장 높은 충실도의 CSS Paged Media 출력을 생성해 왔습니다. Prince는 Flexbox (v12, 2018부터)와 CSS Grid (v16, \~2024부터, 교차 페이지 단편화는 아직 성숙해지는 중)를 지원합니다. JavaScript는 ES5로만 제한됩니다 — 화살표 함수, Promise 또는 async/await를 사용할 수 없습니다. PDF/A-1a/1b/3a/3b, PDF/UA-1, PDF/X-1a/3/4, RC4 암호화(40/128비트)를 지원하지만, 디지털 서명은 지원하지 않습니다(오랜 기간 누락된 기능). 개발을 위한 무료 비상업용 라이선스가 워터마크와 함께 제공됩니다.

PDFreactor ($1,908/년 Pro 구독)은 가장 기술적으로 진보된 제품입니다. 그의 GraalJS 통합은 ECMAScript 2025 지원(Java 20+ 필요)을 제공하여, 완전한 최신 JavaScript를 지원하는 유일한 커스텀 CSS 엔진이 됩니다. CSS 레지언, CSS 셰이프, 기준선 그리드 및 가장 광범위한 PDF/A 변형 세트(1a부터 3u까지)를 지원합니다. 중요한 것은 Prince에는 없는 내장 디지털 서명이 포함되어 있다는 점입니다. 배포는 Java JAR, 임베디드 Jetty 웹 서비스, 또는 Docker 컨테이너를 통해 수행됩니다. Enterprise 고객에는 Dell Technologies 및 Deutsche Post (500,000명 이상 직원이 있음)가 포함됩니다.

Antenna House Formatter ($5,000/server 영구 사용권 XSL-FO, $1,250/단독 사용권 CSS)는 XSL-FO 및 CSS 듀얼 엔진으로 독특합니다. 네이티브 C/C++ 구현으로 가장 빠른 성능과 최소 메모리 사용량을 제공합니다. 80개 이상의 언어와 30개 이상의 스크립트를 지원하여 국제화에 탁월합니다. 그러나 JavaScript 지원이 전혀 없으며, CSS Grid는 지원되지 않습니다. 그 주된 대상은 XSL-FO가 CSS보다 더 세밀한 제어를 제공하는 XML 중심의 출판 워크플로우(DITA, DocBook)입니다.

Java 에코시스템 도구는 Enterprise에서 경량까지 다양합니다

iText pdfHTML은 Flexbox(2025년 포괄적), CSS Grid(2024년부터), CSS Paged Media 머리글/바닥글, HTML-to-AcroForm 변환을 지원하는 가장 강력한 Java 옵션입니다. 그것의 중요한 제약 조건은 라이선싱입니다: AGPL v3는 귀하가 애플리케이션을 배포하거나 네트워크 서비스로 제공하는 경우 전체 애플리케이션의 오픈 소스를 요구합니다. 상업 라이선스는 \~$10,000/년 (소규모 배포)에서 $210,000+/년 (Enterprise)까지 다양하며, 업계 평균은 Vendr 데이터에 따르면 \~$45,000/년입니다. iText는 JavaScript를 실행하지 않으며, 정적 HTML/CSS 파서일 뿐입니다.

OpenHTMLtoPDFFlying Saucer는 LGPL 라이선스를 받은 대안으로, 독점 소프트웨어에서 자유롭게 사용할 수 있습니다. 둘 다 CSS 2.1로 제한되어 있으며 Flexbox와 Grid를 지원하지 않으며 JavaScript를 실행하지 않습니다. OpenHTMLtoPDF의 원래 저장소(danfickle/openhtmltopdf, 2.1k stars)는 \~2022년에 방치되었습니다; io.github.openhtmltopdf의 활성 커뮤니티 포크(Maven Central, v1.1.31, 2025년 9월)가 PDFBox 3.x로 마이그레이션되었습니다. Flying Saucer (2.2k stars)은 여전히 @asolntsev에 의해 활발히 유지 관리되고 있으며 (v10.0.6, 2025년 12월) 최신 버전에는 Java 21+가 필요합니다. 두 도구 모두 명확히 작성된 XHTML 입력을 필요로 하며, 임의의 "일반" HTML을 처리할 수 없습니다.

소스 품질 노트: OpenHTMLtoPDF 및 Flying Saucer의 CSS 지원 주장은 주로 프로젝트 README와 커뮤니티 보고서에서 나옵니다. 어느 도구에 대해서도 포괄적인 CSS 지원 매트릭스나 타사 검증이 존재하지 않습니다. 성능 주장은 독립적인 벤치마크 없이 자체적으로 보고된 것입니다.

클라이언트 측 JavaScript 도구는 제한된 사용 사례에 잘 적합합니다

pdfmake (12.2k stars, 1.1M+ weekly npm downloads)은 구조화된 문서를 위한 가장 강력한 클라이언트 사이드 옵션입니다. 이것은 선언적 JSON 문서 정의를 사용하며, HTML이 아닌 내장된 자동 페이지 나누기, 페이지에 걸쳐 테이블 헤더 반복, 페이지 수가 포함된 동적 헤더/푸터, 벡터 출력(검색 가능하고 선택 가능한 텍스트)을 제공합니다. PDF/A(베타) 및 암호화를 지원합니다. 학습 곡선은 선언적 구문으로, 이미 HTML로 존재할 수 있는 콘텐츠를 다시 표현해야 한다는 점이다.

PDFKit (10.5k 스타, 1.2M+ 주간 다운로드)는 낮은 수준의 명령형 제어와 정밀한 위치 지정을 위한 캔버스와 같은 API를 제공합니다. 스트리밍 API는 대용량 서버 측 문서에 대해 메모리 효율적입니다. AcroForm 생성, PDF/UA 접근성 및 RC4/AES 암호화를 지원합니다. 그러나 HTML/CSS 구문 분석 기능이 없으며 내장된 테이블 지원이 없습니다(예: pdfkit-table과 같은 플러그인을 필요로 함).

jsPDF (31.1k stars, \~2.5M 주간 다운로드)은 다운로드 수에서 가장 인기가 많습니다. 그것의 .html() 메소드는 html2canvas를 사용하여 DOM을 래스터 이미지로 캡처하여 선택할 수 없고 검색할 수 없는 PDF를 대용량 파일 크기로 생성합니다. AcroForm 플러그인은 프로그래밍 방식으로 작성 가능한 양식 필드를 생성할 수 있지만, HTML 폼 요소에서 생성할 수는 없습니다. 캔버스 크기 제한(~16,384px 높이)으로 인해 긴 문서에서 빈 페이지가 발생합니다.

html2pdf.js (4.8k stars)은 jsPDF + html2canvas를 가장 간단한 API로 감싸줍니다: html2pdf(element). 출력은 전부 래스터 이미지입니다. 캔버스 크기 제한은 가장 치명적인 결함입니다. \~16,384px를 초과하는 문서는 완전히 빈 페이지로 렌더링됩니다 (GitHub issue #19). 462개의 오픈 이슈가 있으며, 브라우저에서만 실행되고 (Node.js에서는 실행되지 않음) 비접근성 있는 출력을 생성합니다.

클라우드 API는 운영의 단순함을 위해 제어를 거래합니다

DocRaptor ($15–$1,000+/mo)는 PrinceXML을 사용하는 유일한 API로, 비할 데 없는 CSS 페이지 미디어 지원, 자동 HTML-작성 가능 PDF 변환, WCAG/섹션 508 접근 가능한 출력을 제공합니다. 99.99%의 가동 시간 SLA, SOC 2 및 HIPAA 준수, 요금제에 상관없이 30개의 동시 문서 처리, 무제한 무료 워터마크 테스트 문서를 제공합니다. 트레이드오프는 Prince의 ES5 전용 JavaScript 제한 및 클라우드 전용 배포입니다.

Nutrient Document Engine (이전에는 PSPDFKit으로 불렸으며, 2024년 Insight Partners로부터 €100M을 투자받아 리브랜딩됨)는 가장 종합적인 플랫폼으로, 단순히 HTML을 PDF로 변환하는 것뿐만 아니라 웹, iOS, Android, .NET 등 다양한 환경에서의 전체 문서 처리 SDK를 제공합니다. SOC 2 Type II 인증, WCAG 2.2 AA 준수, AI 기반 편집, 암호화 디지털 서명을 제공합니다. 셀프 호스팅 Docker 배포가 가능합니다. DWS 클라우드 API 가격은 월 $67부터 시작합니다 (1,000 크레딧, HTML-to-PDF는 각 0.5 크레딧 소모). SDK 라이선싱은 투명하지 않아 영업 연락이 필요하며, Enterprise 계약은 연간 상당한 약정에 이를 수 있다고 전해집니다.

PDFShift는 간단함으로 돋보입니다: 3줄 통합, 관대한 무료 등급(월 50회 변환), 모든 플랜에서 50회의 병렬 변환, 개인정보 우선 데이터 처리(문서 저장 안 함), 및 HIPAA BAA 이용 가능. 가격은 월 $9~$99 이상입니다. CSS Paged Media, 작성 가능한 양식 및 접근 가능한 PDF 지원이 부족합니다.

PDFCrowd는 출력 파일 크기에 연계된 크레딧 기반 가격 모델로 Chromium을 사용하여, 크기가 변동하는 문서에 대해 비용이 예측 불가능하게 만듭니다 (1 크레딧 = 0.5MB 출력). 요금제에 따라 속도 제한은 분당 15–360 변환 범위입니다. 접근 가능한/태그된 PDF 지원이 부족하고 공공 가용성 SLA가 없습니다.

APITemplate.io (PDF 전용 요금제에 대해 $19–$179/월) 는 템플릿 기반 생성, WYSIWYG 편집기, Zapier/Make.com 통합, 지역 API 엔드포인트 (미국, 유럽, 싱가포르, 호주)에 중점을 둡니다. 이는 임의의 HTML 변환보다는 반복적인 문서 유형(송장, 인증서, 보고서)에 최적화되어 있습니다.

wkhtmltopdf는 교체가 필요한 중요한 보안 위험입니다

wkhtmltopdf는 2023년 1월 GitHub에서 보관 처리되었으며, 2024년 7월 관리자가 더 이상 유지하지 않음으로 표시되었습니다. 마지막 릴리스(0.12.6, 2020년 6월)는 대략 2012년에 나온 Qt WebKit 엔진을 사용하며, 보관 이후로 보안 패치가 없습니다. 가장 심각한 취약점인 CVE-2022-35583 (CVSS 9.8 Critical)은 서버 측 요청 위조를 가능하게 합니다. 공격자가 사용자 제공 HTML에 iframe을 주입하면 내부 네트워크 리소스에 액세스할 수 있으며, 여기에는 169.254.169.254에 위치한 AWS EC2 인스턴스 메타데이터가 포함되어 잠재적으로 전체 인프라를 장악할 수 있습니다. CVE-2020-21365 (CVSS 7.5)는 디렉터리 트래버설을 통해 로컬 파일을 읽을 수 있게 합니다.

wkhtmltopdf의 유지 관리자의 자체 상태 페이지에서는 "신뢰할 수 없는 HTML과 함께 wkhtmltopdf를 사용하지 마십시오."라고 경고합니다. CiviCRM은 CIVI-PSA-2024-01을 발행하여 즉각적인 제거를 권장했습니다. Pantheon은 2025년에 PHP Runtime Gen 2에서 이를 제거했습니다. 그럼에도 불구하고 wkhtmltopdf는 모든 주요 언어 생태계의 래퍼 라이브러리에 계속 포함되어 있습니다 (Python의 pdfkit, Ruby의 wicked_pdf, PHP의 KnpSnappy, .NET의 DinkToPdf).

마이그레이션 경로: 전체 JavaScript 실행을 위한 Puppeteer/Playwright (가장 유사한 기능적 대안), JS가 필요하지 않은 Python 스택을 위한 WeasyPrint, 마이크로서비스 아키텍처를 위한 Gotenberg, 또는 CSS Paged Media 요구 사항을 위한 DocRaptor/PrinceXML.

성능 벤치마크는 분명한 리소스 간의 절충을 드러냅니다

Kyotu Technology와 hardkoded.com의 독립적인 벤치마크는 정량적 비교를 제공합니다:

메트릭wkhtmltopdfPuppeteer (Chromium)비율
10 PDF 생성 시간19.17초 평균7.84초 평균Puppeteer 2.4배 더 빠름
RAM (순차적)34.9 MB85.3 MBwkhtmltopdf 2.4배 더 가벼움
RAM (5명의 동시 사용자)34.7 MB203.3 MBwkhtmltopdf 5.9× 가벼움
CPU (5개 동시 실행)39.3%452.1%wkhtmltopdf 11.5× 가벼움
Docker 이미지 크기\~1.2 GB\~2.0 GBwkhtmltopdf 40% 더 작음

WeasyPrint Docker 이미지의 크기는 200–400 MB로 크게 줄어들었으며, 렌더링 엔진은 Chromium 의존성이 없습니다. 그러나 WeasyPrint는 복잡한 문서에 대해 느린 것으로 알려져 있습니다 — 하나의 벤치마크에서 52페이지 PDF는 약 100초가 걸렸고, 대형 테이블(5,000+ 행)은 1.4GB 이상의 RAM을 소비할 수 있습니다.

서버리스의 경우, 중요한 지표는 콜드 스타트 시간입니다. Chromium 기반 Lambda 함수는 이진 압축 해제 때문에 5-15초의 콜드 스타트를 경험합니다. Puppeteer-core와 함께 @sparticuz/chromium-min (\~50 MB 압축) 사용은 Lambda의 250 MB 제한 내에 맞으며 패키지 크기를 \~41 MB에서 \~769 KB로 줄입니다. 프로비저닝된 동시성은 초기 시작을 약 400 ms로 줄이지만 비용이 추가됩니다. Lambda 메모리는 신뢰할 수 있는 Chromium PDF 생성을 위해 최소 1,024 MB, 이상적으로는 1,600 MB가 되어야 합니다.

보안 기능은 도구마다 크게 다릅니다

기능IronPDFiTextPrincePDFreactorGotenbergPuppeteer/PlaywrightWeasyPrint
암호화AES-256 ✅AES-256, RC4 ✅RC4 (40/128-bit) ✅AES-256 (via QPDF) ✅
디지털 서명X.509, HSM ✅PAdES, PKCS#7, TSA ✅
편집영구 ✅pdfSweep 추가 기능 ✅
PDF/A1A–4F ✅1a–3b ✅1a,1b,3a,3b ✅1a–3u ✅LibreOffice 통해 ✅1a–4f ✅
PDF/UA✅ (기본)
SOC 2

열거에서 iText와 IronPDF만이 암호화, 디지털 서명 및 편집이라는 완전한 보안 삼위일체를 제공합니다. iText Suite 9.5는 미래를 대비하여 양자 이후 저항 서명 알고리즘을 추가하고 있습니다. 클라우드 API 중 DocRaptor (SOC 2, HIPAA)Nutrient (SOC 2 Type II, HIPAA, WCAG 2.2)가 인증 준수에서 선두를 달리고 있습니다.

모든 팀이 예상해야 할 배포 문제

폰트는 개발과 프로덕션 간의 렌더링 차이의 가장 큰 원인입니다. 최소한의 Docker 이미지는 폰트가 전혀 없으며, 비ASCII 텍스트에 대한 두부 문자(□)를 생성합니다. 해결책은 종합적인 폰트 패키지를 설치하는 것입니다 — Noto 폰트 패밀리가 거의 모든 글쓰기 시스템을 포괄합니다. CJK 지원을 위해서는 fonts-noto-cjk가 필수입니다. 사용자 정의 폰트는 /usr/local/share/fonts/에 복사한 후 fc-cache -f -v를 실행해야 합니다.

Docker에서의 Chromium 샌드박싱은 두 번째 배포 문제입니다. Chromium은 Docker 컨테이너에 자주 부족한 Linux 커널 네임스페이스를 필요로 하며, 이 때문에 root 사용자로 실행하면서 --no-sandbox를 사용하지 않으면 지원되지 않는 오류가 발생합니다. 보안적으로 올바른 해결책은 비root 사용자를 생성하는 것입니다 (useradd -r pptruser); 간편한 해결책은 --no-sandbox를 사용하여 보안을 줄이는 것이며, 신뢰할 수 있는 콘텐츠에만 사용해야 합니다.

메모리 축적은 장기간 실행되는 Chromium 프로세스에서 조용한 살인자입니다. 각 변환마다 메모리가 증가하여 결국 OOM 충돌을 유발합니다. 중요한 완화 방법에는 Docker 공유 메모리를 증가시키는 것(--shm-size=512M, 64 MB 기본값이 충돌을 일으킴)을 포함하며, --disable-dev-shm-usage를 사용하고, N번 변환 후 브라우저 인스턴스를 재시작하며(Gotenberg은 100번 이후 자동으로), 멍청한 초기화나 Docker --init을 사용하여 좀비 프로세스를 수확해야 합니다. 한 개의 50,000행 HTML 테이블은 Chromium에서 10+ GB RAM을 소모할 수 있습니다.

JavaScript 타이밍은 동적 콘텐츠가 로드되지 않았을 때 불완전한 PDF를 발생시킵니다. waitUntil: 'networkidle0'을 사용합니다 (500 ms 동안 네트워크 연결이 없을 때까지 기다림) 또는 page.waitForSelector('.data-loaded')를 사용하여 명시적으로 요소 준비 상태를 확인합니다. Gotenberg은 기본적으로 DomContent, Load, NetworkIdle, 및 LoadingFinished 이벤트를 기다림으로써 이를 완화하며, 기본 지연 시간을 약 2초 추가하지만 완전성을 보장합니다.

어떤 도구가 어떤 사용 사례에 적합한지

송장 및 명세서: WeasyPrint (Python 스택 — 경량, 훌륭한 CSS Paged Media, Chromium 오버헤드 없음), Gotenberg (언어 불가지론적 마이크로 서비스), 또는 pdfmake (클라이언트 측 구조적 문서). .NET의 경우, IronPDF는 가장 사용하기 편한 API를 제공합니다.

차트가 포함된 보고서 및 대시보드: Puppeteer나 Playwright — D3.js, Chart.js, 또는 Plotly를 기본적으로 실행할 수 있는 유일한 전체 브라우저 엔진입니다. WeasyPrint는 JavaScript로 생성된 차트를 렌더링할 수 없습니다. IronPDF의 Chromium 엔진은 외부 프로세스를 생성하지 않고 .NET 응용 프로그램 내에서 이를 처리합니다.

SPA를 PDF로 렌더링: Puppeteer나 Playwright는 현실적인 유일한 선택지입니다. 최신 프레임워크 (React, Angular, Vue)는 전체 브라우저 실행이 필요합니다. waitUntil 구성이 모든 비동기 콘텐츠가 로드되었는지 확인하는 데 중요합니다.

준수 및 보안 (PDF/A, 디지털 서명, 암호화): iText (가장 포괄적이지만 비쌈), IronPDF (.NET, 폭넓은 보안 기능), 또는 PDFreactor (Java, 내장 서명). Chromium 기반 도구는 보안 기능에 대해 외부 후처리가 필요합니다.

서버리스 및 컨테이너: Gotenberg (컨테이너 전용으로 설계된, MIT 라이선스, Cloud Run/Lambda 이미지), 또는 Puppeteer-core + @sparticuz/chromium-min AWS Lambda용 (50 MB 압축, 한도 내에 맞춤).

인쇄 품질의 출판: PrinceXML이나 DocRaptor (API) — 달리 그들의 CSS Paged Media 정확성을 따라갈 수 있는 것은 없습니다, 머리글, 주석, 상호 참조 및 전문적인 타이포그래피에서.

규모가 큰 일괄 처리: 수평 확장이 가능한 Gotenberg (부하 분산기 뒤에서 여러 컨테이너), IronPDF 비동기 일괄 처리 (RenderHtmlAsPdfAsync + Parallel.ForEach), 또는 Python 환경용 Celery 작업자가 포함된 WeasyPrint.

결론

2026년에 HTML-to-PDF 생태계는 명확하게 차별화된 등급으로 성숙했습니다. Chromium 기반 도구가 렌더링 정확성 전쟁에서 승리했습니다 — 그들의 출력은 사용자가 Chrome에서 보는 것과 일치하며, 최신 JavaScript 및 CSS를 손상 없이 처리합니다. 그러나 이 정확성은 제한된 환경에서는 경량 대안 (WeasyPrint, pdfmake)이 매력적인 자원 비용을 수반합니다.

이 분석에서 세 가지 통찰이 돋보입니다. 첫째, Chromium 도구와 CSS Paged Media 엔진 간의 격차는 점점 줄어들고 있지만 여전히 근본적입니다 — 만약 문서가 실행되는 머리글, 주석, 또는 페이지 인지 레이아웃이 필요하다면, PrinceXML, PDFreactor 또는 WeasyPrint가 여전히 브라우저 기반 접근 방식을 능가합니다. 둘째, 보안은 대부분의 도구에서 뒷전입니다 — IronPDF와 iText만이 암호화, 서명 및 편집을 한 패키지로 제공하는 반면, 전체 Chromium 생태계는 기본적으로 보호되지 않은 PDF를 생성합니다. 셋째, wkhtmltopdf 마이그레이션은 선택 사항이 아닙니다 — 그들의 CVSS 9.8 SSRF 취약점이 적극적으로 악용될 수 있으며, 여전히 사용하는 모든 조직은 대체를 기능 요청이 아닌 보안 사건으로 간주해야 합니다.

Apache PDFBox, Apitemplate.io, DinkToPdf, Gotenberg, Nutrient, OpenPDF, PDFCrowd, PDFKit, PDFReactor, PDFShift, PDFium, Playwright, PrinceXML, PuppeteerSharp, iText 및 wkhtmltopdf는 각각의 소유자에 등록된 상표입니다. 이 사이트는 APITemplate.io, Apache Software Foundation, Chromium Project, DinkToPdf, Google, Gotenberg, LibrePDF, Microsoft, Nutrient, PDFKit, PDFShift, PSPDFKit, Pdfcrowd, PuppeteerSharp, RealObjects, YesLogic Pty. Ltd., iText Group, 또는 wkhtmltopdf와 관련이 없거나, 승인받거나, 후원되지 않았습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.