푸터 콘텐츠로 바로가기
제품 비교
IronPDF vs SpirePDF 비교

SpirePDF C# HTML to PDF 튜토리얼 & 라이브러리 비교

HTML을 PDF로 변환하는 것은 많은 .NET 애플리케이션에서 중요 요구 사항이며, 송장 및 보고서 생성부터 문서 및 eBook 생성에 이르기까지 다양합니다. IronPDF와 Spire.PDF 중에서 HTML을 PDF로 변환할 때 어떤 것을 선택할지, 그들의 장점, 제한 사항, 실제 성능을 이해하는 것이 필수적입니다. 이 포괄적인 비교는 두 라이브러리의 능력을 검토하여 PDF 생성 요구 사항에 대한 정보를 기반으로 결정을 내리는 데 도움을 줍니다.

HTML을 PDF로 변환할 때 IronPDF와 Spire.PDF의 주요 차이점은 무엇인가요?

IronPDF는 .NET PDF 라이브러리로 PDF 파일 변환, PDF 편집, PDF 생성, PDF 파일 읽기 등을 포함한 다양한 PDF 관련 작업을 처리하도록 설계되었습니다. 기존 .NET 애플리케이션에 쉽게 통합되고, 높은 성능을 제공하며 HTML5, CSS3, JavaScript와 같은 최신 웹 표준을 지원하는 것으로 유명합니다. IronPDF의 Chrome 기반 렌더링 엔진은 HTML 콘텐츠로부터 픽셀 완벽한 PDF 생성을 보장합니다.

Spire.PDF for .NET은 PDF 생성과 조작을 위한 포괄적인 기능 세트를 제공하는 강력한 .NET PDF 라이브러리입니다. 텍스트 및 이미지 추출, PDF 양식 작성, 디지털 서명 등 다양한 PDF 기능을 지원합니다. 기능이 포괄적이기는 하지만, HTML을 PDF로 변환할 때 특정한 제한 사항이 있으므로 개발자들이 고려해야 합니다.

제품 비교 개요
IronPDF와 Spire.PDF의 .NET PDF 처리 기능 비교
범주 특징/측면 IronPDF Spire.PDF 핵심 이점
**핵심 아키텍처** 디자인 철학 단순성 우선, 직관적 API 다중 클래스 접근 방식, 수동 설정 IronPDF: 빠른 개발
API 복잡성 `RenderHtmlAsPdf()`와 같은 간단한 메서드 다중 스레드 접근 방식 필요 IronPDF: 코드 70% 감소
학습 곡선 1-2일 보통 1-2주 보통 IronPDF: 빠른 채택
**플랫폼 지원** 크로스 플랫폼 네이티브 지원, 추가 패키지 필요 없음 제한된 Linux/macOS 지원 IronPDF: 진정한 크로스 플랫폼
.NET 버전 .NET 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ .NET Core 2.0+, Framework 2.0+ 두 가지: 넓은 프레임워크 지원
운영 체제 Windows, Linux, macOS, Docker 네이티브 지원 주로 Windows에 집중함 IronPDF: 더 넓은 OS 지원
**HTML을 PDF로 변환** 렌더링 엔진 풀 Chrome V8 엔진 커스텀 HTML 파서 IronPDF: 98%+ 브라우저 충실도
CSS3/HTML5 지원 완전한 지원 제한적 (기본 CSS만) IronPDF: 최신 웹 표준
JavaScript 실행 완전한 JavaScript 지원 계획은 있으나 구현되지 않음 IronPDF: 동적 콘텐츠 준비 완료
웹 폰트 Google 폰트, 시스템 폰트 제한된 글꼴 지원 IronPDF: 타이포그래피의 유연성
렌더링 속도 0.8-1.2초 보통 간단한 HTML에서 0.5-0.8초 Spire: 기본 HTML에서 더 빠름
**Security & Encryption** 암호화 수준 AES-256, 사용자 정의 핸들러 AES-256 표준 둘 다: 업계 표준
API 간결성 단일 `SecuritySettings` 클래스 다양한 보안 방법 IronPDF: 통합 접근법
**콘텐츠 조작** 수정 방법 진정한 콘텐츠 제거, 원-라인 API 수동 사각형 오버레이 IronPDF: 준수 준비 완료
워터마킹 HTML/CSS 기반, 전체 스타일링 회전 가능한 텍스트 기반 IronPDF: 리치 워터마크
**파일 변환** DOCX 파일을 PDF로 변환 내장 `DocxToPdfRenderer` Spire.Doc 라이브러리 필요 IronPDF: 추가 비용 없음
**성능 측정** 메모리 사용량 150-200MB (Chrome 엔진) 80-120MB Spire: 더 낮은 메모리 사용량
스레딩 지원 네이티브 async/await 최적화 STA 스레드 필요 IronPDF: 현대적 비동기 패턴
**개발자 경험** 코드 예제 100개 이상의 실행 가능한 샘플 기본 예제 IronPDF: 광범위한 자료
오류 메시지 설명적이며 실행 가능한 기술 메시지 IronPDF: 더 나은 디버깅
**Licensing & Pricing** 입문 수준 Lite: $799 (1 dev, 1 project) Developer: $1,199/year (1 dev) IronPDF: 영구 라이선스
팀 라이선스 Plus: $1,199 (3 devs, 3 projects) 사이트: $4,599 (10 개발자) IronPDF: 더 나은 팀 가치
Suite 옵션 Iron Suite: $1,498 (9 products) Suite 옵션 없음 IronPDF: 뛰어난 가치
**지원하다** 지원 포함 예, 24/5 엔지니어링 지원 포럼만 (추가 지원 유료) IronPDF: 지원 포함
지원 채널 이메일, 채팅, 전화, 화면 공유 포럼, 이메일 (유료 등급) IronPDF: 더 많은 채널
**가장 적합한 대상** 사용 사례 현대적 웹 앱, 복잡한 HTML/CSS 간단한 문서, 기본 레이아웃 상황에 따라 다름
*참고.* Spire.PDF는 낮은 메모리 사용량으로 기본 PDF 기능을 제공하고, IronPDF는 HTML 렌더링 및 최신 웹 표준 지원에 우수함을 보입니다. 복잡한 HTML 렌더링 또는 최소 자원 사용이 우선사항인지에 따라 선택하세요.

IronPDF에 대한 상세한 정보는 IronPDF.com을 방문하세요.

라이브러리 간의 크로스 플랫폼 호환성은 어떻게 비교되나요?

IronPDF

IronPDF는 광범위한 플랫폼 간 호환성으로 두드러집니다. .NET Framework 내에서 다양한 환경을 지원하여 다양한 플랫폼에서 원활한 운영을 보장합니다. 아래는 IronPDF의 플랫폼 호환성 요약입니다:

  • .NET 버전:

    • C#, VB.NET, F#로 완전히 작성되고 지원됨
    • .NET Core (8, 7, 6, 5 및 3.1+)
    • .NET Standard (2.0+)
    • .NET Framework (4.6.2+)
  • 앱 환경: IronPDF는 Windows, Linux, Mac, Docker, Azure, AWS와 같은 다양한 앱 환경 내에서 작동합니다.
  • IDE: Microsoft Visual Studio, JetBrains Rider & ReSharper와 같은 IDE와 함께 작동합니다.
  • 운영 체제 및 프로세서: Windows, Mac, Linux, x64, x86, ARM을 포함한 여러 운영 체제 및 프로세서를 지원합니다.

IronPDF의 호환성에 대한 더 많은 세부정보는 IronPDF Features Page를 방문하세요.

Spire.PDF

Spire.PDF는 .NET 환경 내에서 완전한 지원을 제공하지만, Windows 운영 체제 내에서 동작하지만, IronPDF가 갖춘 리눅스 및 macOS에 대한 네이티브 지원은 부족합니다. macOS나 Linux에 배포할 때, Spire.PDF는 각 플랫폼에 대해 다른 플러그인을 필요로 하며, 이는 배포 시나리오를 복잡하게 만들 수 있습니다.

  • .NET 지원:

    • .NET Framework 2.0+
    • .NET Core 2.0+
    • C#로 작성되었으며, VB.NET을 지원함
  • 앱 환경: Spire.PDF는 Windows 및 ASP.NET 애플리케이션과 같은 다양한 애플리케이션 환경에서 작동합니다. Windows Forms도 지원할 수 있습니다.

어떤 라이브러리가 HTML을 PDF로 변환하는 기능을 더 잘 제공합니까?

IronPDF 기능

  • PDF 변환: IronPDF는 HTML을 PDF로 변환할 수 있습니다. 최신 웹 표준에 대한 완전한 지원으로 IronPDF는 HTML 콘텐츠에서 항상 픽셀-정확한 PDF를 일관되게 반환할 것임을 확신할 수 있습니다. IronPDF는 또한 DOCX, 이미지, RTF 등의 형식에서 PDF 파일을 변환할 수 있습니다.
  • PDF 생성: IronPDF를 사용하면 URL, ASPX 파일, HTML 문자열에서 PDF를 생성할 수 있습니다.
  • 보안 기능: IronPDF를 사용하면 보안 기능 덕분에 민감한 PDF 파일이 항상 안전하다는 것을 보장받을 수 있습니다. IronPDF를 사용하여 PDF 파일을 암호화하고, 비밀번호를 설정하며, PDF 파일에 대한 권한을 설정하십시오.
  • PDF 편집 기능: IronPDF를 사용하면 기존 PDF 문서를 처리하고, 편집하고, PDF 파일을 쉽게 읽을 수 있습니다. IronPDF는 머리글과 바닥글 추가, PDF 페이지에 텍스트 및 이미지를 스탬프, PDF에 사용자 지정 워터마크 추가, PDF 양식 작업, PDF 파일 분할 또는 병합 등의 편집 기능을 제공합니다.
  • 통합: ASP.NET 및 MVC 애플리케이션과 원활하게 통합됩니다.
  • PDF 버전 지원: PDF 버전 1.2-1.7을 지원할 수 있습니다.

IronPDF 기능의 포괄적인 목록은 IronPDF Features를 방문하십시오.

Spire.PDF 기능

  • PDF 생성: 처음부터 또는 기존 파일에서 PDF를 생성합니다.
  • 텍스트 및 이미지 추출: Spire.PDF를 사용하여 PDF 페이지 및 내용을 추출할 수 있습니다.
  • PDF 양식 처리: PDF 양식을 채우고 관리합니다.
  • PDF 변환: PDF를 HTML, RTF 및 이미지 등의 다른 형식으로 변환합니다.
  • 페이지 조작: PDF의 페이지를 삽입, 삭제 및 재정렬합니다.
  • 제한된 HTML 지원: HTML을 PDF로 변환하는 엔진은 현대 CSS 및 JavaScript에 대한 제한된 지원을 제공합니다. 기본 Qt 기반 플러그인은 CSS 페이지 브레이크 속성이나 외부 CSS 파일 인식을 지원하지 않으며, JavaScript 실행은 완전히 구현되지 않은 계획된 기능입니다. 더 나은 렌더링을 위해 선택적으로 ChromeHtmlConverter를 사용할 수 있습니다.

Bootstrap 및 현대 CSS 프레임워크 렌더링

현대 웹 개발은 빠른 UI 개발 및 반응형 디자인을 위해 Bootstrap과 같은 CSS 프레임워크에 크게 의존합니다. PDF 생성 라이브러리는 전문 문서 품질과 디자인 일관성을 유지하기 위해 이러한 프레임워크를 정확하게 변환해야 합니다.

IronPDF: 풀 Bootstrap 및 Tailwind 지원

IronPDF의 Chromium 엔진은 모든 현대 CSS 프레임워크를 완벽하게 지원합니다:

  • Bootstrap 5: 모든 반응형 구성 요소가 포함된 완전한 플렉스박스 및 CSS 그리드 지원
  • Bootstrap 4: 완전한 카드 레이아웃, 네비게이션 시스템 및 유틸리티 클래스
  • Tailwind CSS: 모든 유틸리티 우선 클래스 및 반응형 수정자
  • Foundation: 완전한 그리드 및 구성 요소 시스템
  • 현대 CSS3: 플렉스박스, 그리드, 사용자 정의 속성, 애니메이션, 변환

실제 사례로 증명됨: Bootstrap 홈페이지Bootstrap 템플릿을 픽셀 단위로 정확하게 변환합니다.

코드 예제: Bootstrap 사용 팀 멤버 카드

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapTeam = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h1 class='text-center mb-5'>Our Team</h1>

        <div class='row row-cols-1 row-cols-md-3 g-4'>
            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Jennifer Martinez</h5>
                        <p class='text-muted mb-3'>Chief Technology Officer</p>
                        <p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>David Chen</h5>
                        <p class='text-muted mb-3'>Head of Engineering</p>
                        <p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Sarah Johnson</h5>
                        <p class='text-muted mb-3'>Product Manager</p>
                        <p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <h3>Join Our Team</h3>
            <p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
            <a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapTeam = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h1 class='text-center mb-5'>Our Team</h1>

        <div class='row row-cols-1 row-cols-md-3 g-4'>
            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Jennifer Martinez</h5>
                        <p class='text-muted mb-3'>Chief Technology Officer</p>
                        <p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>David Chen</h5>
                        <p class='text-muted mb-3'>Head of Engineering</p>
                        <p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Sarah Johnson</h5>
                        <p class='text-muted mb-3'>Product Manager</p>
                        <p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <h3>Join Our Team</h3>
            <p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
            <a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim bootstrapTeam As String = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h1 class='text-center mb-5'>Our Team</h1>

        <div class='row row-cols-1 row-cols-md-3 g-4'>
            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Jennifer Martinez</h5>
                        <p class='text-muted mb-3'>Chief Technology Officer</p>
                        <p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>David Chen</h5>
                        <p class='text-muted mb-3'>Head of Engineering</p>
                        <p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col'>
                <div class='card h-100 shadow-sm text-center'>
                    <div class='card-body d-flex flex-column'>
                        <img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
                        <h5 class='card-title'>Sarah Johnson</h5>
                        <p class='text-muted mb-3'>Product Manager</p>
                        <p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
                        <div class='d-flex justify-content-center gap-2 mt-auto'>
                            <a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
                            <a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class='text-center mt-5'>
            <h3>Join Our Team</h3>
            <p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
            <a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
        </div>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapTeam)
pdf.SaveAs("team-members.pdf")
$vbLabelText   $csharpLabel

출력: Bootstrap의 카드 그리드, 플렉스박스 정렬, 반응형 이미지 및 버튼 구성요소로 구성된 전문 팀 페이지가 PDF에 정확하게 렌더링됩니다.

Spire.PDF: 제한된 HTML 및 현대 프레임워크 지원

Spire.PDF의 HTML-to-PDF 엔진은 그들 자체의 문서에 명시된 대로 현대 CSS 프레임워크에 대한 중요한 제한을 가지고 있습니다:

  • 제한된 CSS 지원: 기본적인 CSS만 사용 가능하며, 포괄적인 CSS3 기능은 제공하지 않습니다.
  • 플렉스박스 미지원: Bootstrap 4/5는 플렉스박스를 많이 사용하는데, 이는 지원되지 않습니다.
  • CSS 그리드 미지원: CSS 그리드와 같은 현대적인 레이아웃 시스템은 올바르게 렌더링되지 않습니다.
  • JavaScript 한계: 현대 브라우저에 비해 최소한의 JavaScript 실행만 지원
  • 최대 Bootstrap 3: 오래된 테이블 기반 Bootstrap 버전만 안정적으로 작동합니다.
  • 복잡한 레이아웃 실패: 현대의 반응형 디자인은 광범위한 우회가 필요합니다.

Spire.PDF HTML 변환에 대한 개발자 신고 문제:

  • Bootstrap 네비게이션 바는 레이아웃 문제로 렌더링됩니다.
  • 플렉스박스를 사용하는 카드 구성요소는 올바르게 정렬되지 않습니다.
  • 반응형 그리드 브레이크포인트가 PDF 출력에서 무시됩니다.
  • 현대 CSS 기능은 수동 CSS 재작성이나 대체가 필요합니다.

개발 영향: Bootstrap 4+ 또는 현대 CSS 프레임워크를 사용하는 애플리케이션은 Spire.PDF로 인해 심각한 문제에 직면합니다. 개발 팀은 다음을 수행해야 합니다:

  1. PDF 생성을 위해 별도의 간소화된 CSS를 유지 관리해야 합니다 (이중 유지보수)
  2. Bootstrap 3으로 다운그레이드하거나 프레임워크를 완전히 포기해야 합니다 (현대 기능 제한)
  3. 각 구성요소를 철저히 테스트하고 수동으로 수정해야 합니다 (시간이 많이 걸리고 불안정)

현대 CSS 프레임워크 지원이 필요한 프로젝트의 경우, Spire.PDF의 HTML 렌더링 제한은 추가 개발 노력과 지속적인 유지보수 부담 없이는 부적절합니다.

Bootstrap 호환성에 대한 자세한 정보는 Bootstrap & Flexbox CSS Guide를 참조하십시오.

일반적인 PDF 작업에 대한 코드 예제 비교는 어떻게 제공됩니까?

IronPDF와 Spire.PDF for .NET의 기능을 설명하기 위해 몇 가지 주요 PDF 기능의 구현을 코드 예제를 통해 비교하여 PDF 프로젝트에 이러한 기능이 어떻게 도움이 될 수 있는지 보여드립니다.

HTML을 PDF로 변환

IronPDF 예제:

using IronPdf;

// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;

// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = True

' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()

' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")

' Advanced Example with HTML Assets
' Load external HTML assets: images, CSS, and JavaScript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

IronPDF의 ChromePdfRenderer 클래스는 HTML 콘텐츠를 렌더링하기 위해 전체 Chrome 브라우저 엔진을 활용합니다. 이는 CSS3 애니메이션, JavaScript 실행, 그리고 최신 웹 폰트가 Chrome에서 그대로 렌더링된다는 것을 의미합니다. RenderHtmlAsPdf() 메서드는 외부 자산을 불러오기 위한 HTML 문자열과 선택적 기본 경로를 허용하여 간단하고 복잡한 HTML 문서를 변환하기 쉽게 합니다. 렌더러는 사용자 지정 용지 크기, 여백, 그리고 JavaScript 지연 설정을 포함한 고급 렌더링 옵션을 지원합니다.

Spire.PDF 예제:

using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;

namespace ConvertHtmlStringToPdfWithoutPlugin
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a PdfDocument object
            PdfDocument doc = new PdfDocument();

            // Create a PdfPageSettings object
            PdfPageSettings setting = new PdfPageSettings();

            // Set page size and margins through the object
            setting.Size = new SizeF(1000, 1000);
            setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);

            // Create a PdfHtmlLayoutFormat object
            PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

            // Set IsWaiting property to true
            htmlLayoutFormat.IsWaiting = true;

            // Read HTML string from a .html file
            string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");

            // Load HTML from HTML string using LoadFromHTML method
            Thread thread = new Thread(() =>
            { doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();

            // Save to a PDF file
            doc.SaveToFile("HtmlStringToPdf.pdf");
        }
    }
}
using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;

namespace ConvertHtmlStringToPdfWithoutPlugin
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a PdfDocument object
            PdfDocument doc = new PdfDocument();

            // Create a PdfPageSettings object
            PdfPageSettings setting = new PdfPageSettings();

            // Set page size and margins through the object
            setting.Size = new SizeF(1000, 1000);
            setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);

            // Create a PdfHtmlLayoutFormat object
            PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

            // Set IsWaiting property to true
            htmlLayoutFormat.IsWaiting = true;

            // Read HTML string from a .html file
            string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");

            // Load HTML from HTML string using LoadFromHTML method
            Thread thread = new Thread(() =>
            { doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();

            // Save to a PDF file
            doc.SaveToFile("HtmlStringToPdf.pdf");
        }
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.HtmlConverter
Imports System.IO
Imports System.Threading
Imports System.Drawing

Namespace ConvertHtmlStringToPdfWithoutPlugin
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			' Create a PdfDocument object
			Dim doc As New PdfDocument()

			' Create a PdfPageSettings object
			Dim setting As New PdfPageSettings()

			' Set page size and margins through the object
			setting.Size = New SizeF(1000, 1000)
			setting.Margins = New Spire.Pdf.Graphics.PdfMargins(20)

			' Create a PdfHtmlLayoutFormat object
			Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()

			' Set IsWaiting property to true
			htmlLayoutFormat.IsWaiting = True

			' Read HTML string from a .html file
			Dim htmlString As String = File.ReadAllText("C:\Users\Administrator\Desktop\Document\Html\Sample.html")

			' Load HTML from HTML string using LoadFromHTML method
			Dim thread As New Thread(Sub()
				doc.LoadFromHTML(htmlString, True, setting, htmlLayoutFormat)
			End Sub)
			thread.SetApartmentState(ApartmentState.STA)
			thread.Start()
			thread.Join()

			' Save to a PDF file
			doc.SaveToFile("HtmlStringToPdf.pdf")
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Spire.PDF의 HTML을 PDF로 변환하려면 PdfDocument, PdfPageSettings, PdfHtmlLayoutFormat과 같은 여러 개체를 생성해야 합니다. 변환은 단일 스레드 아파트먼트 (STA) 스레드에서 실행해야 하므로 구현에 복잡성이 추가됩니다. 사용자는 'Spire는 PDF 파일을 이미지 형태로 생성합니다. 일부 CSS는 굵은 글꼴을 무시하는 등 정확하지 않습니다'라는 보고를 하여, CSS 렌더링 충실도의 한계를 나타냅니다.

IronPDF는 최신 웹 표준 지원 덕분에 웹 콘텐츠를 정확하게 표현할 수 있는 고충실도 HTML에서 PDF로의 변환을 위한 Chrome의 렌더링 엔진을 사용합니다. Spire.PDF도 강력한 HTML에서 PDF로의 변환을 제공합니다. 그러나 IronPDF의 렌더링 정밀도에 미치지 못할 수 있으며, 훨씬 긴 수동 접근 방식을 취합니다.

PDF 문서를 어떻게 암호화할 수 있습니까?

IronPDF 예제:

using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System

' Open an Encrypted File, alternatively create a new PDF from HTML
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now

' Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights

' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

IronPDF의 SecuritySettings 클래스는 PDF 보안을 관리하기 위한 포괄적인 API를 제공합니다. 개별 권한을 불리언 속성으로 제어하고, 인쇄 권한을 다른 수준으로 설정하며, 다른 보안 설정과는 별도로 비밀번호를 관리할 수 있습니다. API 설계는 PdfPrintSecurity와 같은 강력한 형식의 열거형이 포함된 .NET 관례를 따릅니다. 문서에서 PDF 권한 및 비밀번호에 대해 더 알아보세요.

Spire.PDF 예제:

using Spire.Pdf;
using Spire.Pdf.Security;

// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();

// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");

// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);

// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
using Spire.Pdf;
using Spire.Pdf.Security;

// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();

// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");

// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);

// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
Imports Spire.Pdf
Imports Spire.Pdf.Security

' Create a PdfDocument object
Private pdf As New PdfDocument()

' Load a sample PDF file
pdf.LoadFromFile("E:\Files\sample.pdf")

' Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print Or PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit)

' Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF)
$vbLabelText   $csharpLabel

Spire.PDF의 암호화 접근 방식은 권한을 위한 비트 연산자 플래그와 함께 Security.Encrypt() 메서드를 사용합니다. 좀 더 간결하지만, 이 접근 방식은 비트 연산에 대한 이해를 요구하며, IronPDF의 개별 권한 속성에 비해 덜 세분화된 제어를 제공합니다.

두 라이브러리는 PDF 암호화 및 암호화된 PDF 문서의 가독성 설정을 위한 사용하기 쉬운 방법을 제공합니다. IronPDF는 PDF 보안 설정을 완벽히 제어할 수 있는 간단한 접근 방식을 제공합니다. Spire.PDF는 약간 더 짧은 프로세스를 사용하지만, 여전히 권한 설정을 위한 추가 옵션을 포함합니다.

PDF 콘텐츠를 가리기 위한 옵션은 무엇입니까?

IronPDF 예제:

using IronPdf;

// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

// Save the redacted document
pdf.SaveAs("redacted.pdf");
using IronPdf;

// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

// Save the redacted document
pdf.SaveAs("redacted.pdf");
Imports IronPdf

' Load the PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")

' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")

' Save the redacted document
pdf.SaveAs("redacted.pdf")
$vbLabelText   $csharpLabel

IronPDF는 진정한 콘텐츠 제거를 수행하는 전용 가리기 API를 제공합니다. RedactTextOnAllPages() 메서드는 특정 텍스트를 찾아서 영구적으로 제거하여 데이터 보호 규정을 준수합니다. 추가 메서드는 특정 페이지 또는 영역에서 가리기를 허용합니다.

사각형 오버레이를 통한 Spire.PDF 가리기 예제:

Spire.PDF에는 전용 가리기 도구가 없지만, 수동 프로세스를 사용하여 콘텐츠를 가릴 수 있으며, 아래에 설명되어 있습니다:

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";

// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";

// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();

// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);

// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
    // Define the area to redact (e.g., coordinates and size of the rectangle)
    RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size

    // Apply redaction
    page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}

// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";

// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";

// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();

// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);

// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
    // Define the area to redact (e.g., coordinates and size of the rectangle)
    RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size

    // Apply redaction
    page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}

// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

' Specify the input PDF file path
Private inputPdfFilePath As String = "path/to/your/input.pdf"

' Specify the output redacted PDF file path
Private outputPdfFilePath As String = "path/to/your/redacted_output.pdf"

' Create a new PdfDocument object
Private pdfDocument As New PdfDocument()

' Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath)

' Redact content on each page
For Each page As PdfPageBase In pdfDocument.Pages
	' Define the area to redact (e.g., coordinates and size of the rectangle)
	Dim redactArea As New RectangleF(100, 100, 200, 50) ' Example coordinates and size

	' Apply redaction
	page.Canvas.DrawRectangle(New PdfSolidBrush(Color.Black), redactArea)
Next page

' Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath)
$vbLabelText   $csharpLabel

이 수동 접근 방식은 각 가리기 영역에 대한 정확한 좌표를 계산해야 하며, 진정한 콘텐츠 제거보다는 시각적 가리기만을 제공합니다. 기본 텍스트는 여전히 PDF 편집 도구를 통해 추출할 수 있습니다.

IronPDF는 강력하지만 간단한 가리기 도구를 통해 가리기를 간단하게 만듭니다. Spire.PDF는 내장된 가리기 도구가 없기 때문에 가리기를 위한 더욱 수동적인 처리가 필요하며, 잠재적으로 덜 효율적인 작업 흐름을 초래할 수 있습니다.

PDF 문서를 어떻게 서명할 수 있습니까?

IronPDF 예제:

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature with certificate
var sig = new PdfSignature(cert);

// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature with certificate
var sig = new PdfSignature(cert);

// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

' Instantiate the renderer
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature with certificate
Private sig = New PdfSignature(cert)

' Sign PDF document
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

IronPDF의 디지털 서명 구현은 .NET 인증서 처리 패턴을 따릅니다. PdfSignature 클래스는 표준 X509Certificate2 개체를 허용하고 PDF 서명을 내부적으로 처리하는 복잡성을 담당합니다. 시각적 서명 모습을 추가하고 서명 필드를 구성할 수도 있습니다.

Spire.PDF 예제:

using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;

// Create a PdfDocument object
PdfDocument doc = new PdfDocument();

// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");

// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");

// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;

// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;

// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;

// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");

// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));

// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;

// Save to file
doc.SaveToFile("VisiableSignature.pdf");
using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;

// Create a PdfDocument object
PdfDocument doc = new PdfDocument();

// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");

// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");

// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;

// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;

// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;

// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");

// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));

// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;

// Save to file
doc.SaveToFile("VisiableSignature.pdf");
Imports Spire.Pdf
Imports Spire.Pdf.Security
Imports System.Drawing

' Create a PdfDocument object
Private doc As New PdfDocument()

' Load a sample PDF file
doc.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")

' Load the certificate
Dim cert As New PdfCertificate("C:\Users\Administrator\Desktop\MyCertificate.pfx", "e-iceblue")

' Create a PdfSignature object and specify its position and size
Dim signature As New PdfSignature(doc, doc.Pages(doc.Pages.Count - 1), cert, "MySignature")
Dim rectangleF As New RectangleF(doc.Pages(0).ActualSize.Width - 260 - 54, 200, 260, 110)
signature.Bounds = rectangleF
signature.Certificated = True

' Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail

' Set various details about the signature
signature.NameLabel = "Signer:"
signature.Name = "Gary"
signature.ContactInfoLabel = "Phone:"
signature.ContactInfo = "0123456"
signature.DateLabel = "Date:"
signature.Date = DateTime.Now
signature.LocationInfoLabel = "Location:"
signature.LocationInfo = "USA"
signature.ReasonLabel = "Reason:"
signature.Reason = "I am the author"
signature.DistinguishedNameLabel = "DN:"
signature.DistinguishedName = signature.Certificate.IssuerName.Name

' Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\Users\Administrator\Desktop\handwrittingSignature.png")

' Set the signature font
signature.SignDetailsFont = New PdfTrueTypeFont(New Font("Arial Unicode MS", 12F, FontStyle.Regular))

' Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges Or PdfCertificationFlags.AllowFormFill

' Save to file
doc.SaveToFile("VisiableSignature.pdf")
$vbLabelText   $csharpLabel

Spire.PDF는 서명 모양을 광범위하게 제어할 수 있지만, 상당히 더 많은 코드를 필요로 합니다. 각 레이블을 수동으로 설정하고 서명 위치를 정확하게 지정하며, 시각적 요소를 별도로 구성해야 합니다.

디지털 서명은 다양한 설정에서 유용할 수 있으며, 이는 PDF 문서를 진위 확인하는 데 사용되거나 새로운 프로젝트에 서명하기 위해 간단히 사용될 수 있습니다. IronPDF는 디지털 서명을 추가하는 간단한 접근 방식을 제공하여 서명 프로세스의 자동화를 용이하게 합니다. Spire.PDF도 PDF에 대한 디지털 서명을 지원합니다; 그러나, 구현하기 위해 더 많은 수동 입력과 노력이 필요할 수 있습니다.

PDF에 워터마크를 추가할 수 있는 방법은 무엇입니까?

IronPDF 예제:

using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf

' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()

Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
$vbLabelText   $csharpLabel

IronPDF의 워터마크 기능은 CSS를 사용하여 스타일링할 수 있는 HTML 콘텐츠를 수락합니다. ApplyWatermark() 메서드는 회전 각도 및 정렬을 위한 매개 변수를 제공하여 워터마크를 정확하게 배치하기 쉽게 합니다. 맞춤형 워터마크 및 고급 스타일링 옵션에 대해 더 알아보세요.

Spire.PDF 예제:

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();

// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");

// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);

// Set the watermark text
string text = "CONFIDENTIAL";

// Measure the text size
SizeF textSize = font.MeasureString(text);

// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);

// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
    // Set the page transparency
    page.Canvas.SetTransparency(0.8f);

    // Translate the coordinate system by specified coordinates
    page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);

    // Rotate the coordinate system 45 degrees counterclockwise
    page.Canvas.RotateTransform(-45);

    // Draw watermark text on the page
    page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}

// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();

// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");

// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);

// Set the watermark text
string text = "CONFIDENTIAL";

// Measure the text size
SizeF textSize = font.MeasureString(text);

// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);

// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
    // Set the page transparency
    page.Canvas.SetTransparency(0.8f);

    // Translate the coordinate system by specified coordinates
    page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);

    // Rotate the coordinate system 45 degrees counterclockwise
    page.Canvas.RotateTransform(-45);

    // Draw watermark text on the page
    page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}

// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

' Create a PdfDocument object
Private pdf As New PdfDocument()

' Load a sample PDF document
pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")

' Create a PdfTrueTypeFont object
Dim font As New PdfTrueTypeFont(New Font("Arial", 50F), True)

' Set the watermark text
Dim text As String = "CONFIDENTIAL"

' Measure the text size
Dim textSize As SizeF = font.MeasureString(text)

' Calculate the values of two offset variables,
' which will be used to calculate the translation amount of the coordinate system
Dim offset1 As Single = CSng(textSize.Width * Math.Sqrt(2) / 4)
Dim offset2 As Single = CSng(textSize.Height * Math.Sqrt(2) / 4)

' Traverse all the pages in the document
For Each page As PdfPageBase In pdf.Pages
	' Set the page transparency
	page.Canvas.SetTransparency(0.8F)

	' Translate the coordinate system by specified coordinates
	page.Canvas.TranslateTransform(page.Canvas.Size.Width \ 2 - offset1 - offset2, page.Canvas.Size.Height \ 2 + offset1 - offset2)

	' Rotate the coordinate system 45 degrees counterclockwise
	page.Canvas.RotateTransform(-45)

	' Draw watermark text on the page
	page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
Next page

' Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf")
$vbLabelText   $csharpLabel

Spire.PDF의 워터마크는 좌표 시스템 변환을 사용하여 위치 및 회전을 수동으로 계산해야 합니다. 이는 세밀한 제어를 제공하지만, 그래픽 프로그래밍 개념에 대한 이해가 필요합니다.

IronPDF는 텍스트 워터마크를 추가하는 간단한 메서드를 제공하며, 워터마크의 위치와 디자인에 대한 완전한 제어를 제공합니다. HTML과 CSS를 사용하는 IronPDF의 사용은 이러한 언어에 대한 경험이 있다면 프로세스를 더 쉽게 만듭니다. Spire.PDF의 접근 방식은 더 길며보다 수동적인 프로세스를 요구하지만, 여전히 디자인과 위치에 대한 완전한 제어가 가능한 강력한 워터마킹 도구를 제공합니다.

PDF에 이미지와 텍스트를 찍는 방법은?

IronPDF 예제:

using IronPdf;
using IronPdf.Editing;

// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;

// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing

' Instantiate Renderer
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")

' Create text stamper
Private textStamper As New TextStamper() With {
	.Text = "Text Stamper!",
	.FontFamily = "Bungee Spice",
	.UseGoogleFont = True,
	.FontSize = 30,
	.IsBold = True,
	.IsItalic = True,
	.VerticalAlignment = VerticalAlignment.Top
}

' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")

' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}

' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
$vbLabelText   $csharpLabel

IronPDF의 스탬핑 API는 다른 스탬프 유형에 대해 전용 클래스를 사용합니다. TextStamperUseGoogleFont 속성을 통해 Google Fonts를 직접 지원하며, ImageStamper는 URL 또는 로컬 파일에서 이미지를 불러올 수 있습니다. 두 스탬퍼 모두 일관된 위치를 위해 공통 정렬 속성을 공유합니다. HTML 스탬프 및 바코드 통합을 포함하여 더 많은 스탬핑 옵션을 탐색하세요.

Spire.PDF (텍스트 스탬핑 예제):

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();

// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);

// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);

// Restore graphics to previous state
page.Canvas.Restore(state);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();

// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);

// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);

// Restore graphics to previous state
page.Canvas.Restore(state);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

' Assumes a PdfDocument is already loaded as `doc` object
Private page As PdfPageBase = doc.Pages(0)
Private state As PdfGraphicsState = page.Canvas.Save()

' Define font and brushes for different effects
Private font As New PdfFont(PdfFontFamily.Helvetica, 18F)
Private brush1 As New PdfSolidBrush(Color.DeepSkyBlue)
Private brush2 As New PdfSolidBrush(Color.CadetBlue)

' Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200)
page.Canvas.ScaleTransform(1F, 0.6F)
page.Canvas.SkewTransform(-10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0)
page.Canvas.SkewTransform(10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0)
page.Canvas.ScaleTransform(1F, -1F)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18)

' Restore graphics to previous state
page.Canvas.Restore(state)
$vbLabelText   $csharpLabel

Spire.PDF는 각 효과에 대해 수동 변환을 포함한 직접 캔버스 조작이 필요합니다. 복잡한 스탬프를 만들려면 그래픽 상태 관리와 좌표 변환을 이해해야 합니다.

IronPDF의 텍스트 및 이미지 스탬핑 도구는 HTML 및 CSS와 유사한 접근 방식을 따르는 강력하고 사용하기 쉬운 스탬핑 도구입니다. Spire.PDF도 기본 텍스트 스탬핑 도구를 제공하지만 PDF 파일에 스탬프된 텍스트를 적용하려면 더 많은 노력이 필요합니다.

어느 라이브러리가 DOCX를 PDF로 변환하는데 더 나은가요?

IronPDF 예제:

using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()

' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")

' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
$vbLabelText   $csharpLabel

IronPDF에는 DOCX 변환을 본격적으로 처리하는 전용 DocxToPdfRenderer 클래스가 포함되어 있습니다. API는 IronPDF의 다른 렌더링 클래스와 일관되어 기본 변환에 두 줄의 코드만 필요합니다. 페이지 설정 및 서식에 대한 고급 옵션은 렌더러의 속성을 통해 사용할 수 있습니다. DOCX 파일을 PDF로 변환 변환 기능에 대해 더 알아보세요.

Spire.PDF Spire.Doc로 DOCX 파일을 PDF로 변환 변환:

Spire.PDF 자체는 DOCX를 PDF로 변환할 수 없습니다; 그러나, Spire.Doc 라이브러리를 사용하여 이 변환을 처리한 후 Spire.PDF를 사용하여 결과 PDF를 작업할 수 있습니다.

using Spire.Doc;

// Create a Document object
Document doc = new Document();

// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");

// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);

// Dispose of resources
doc.Dispose();
using Spire.Doc;

// Create a Document object
Document doc = new Document();

// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");

// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);

// Dispose of resources
doc.Dispose();
Imports Spire.Doc

' Create a Document object
Private doc As New Document()

' Load a Word document
doc.LoadFromFile("C:\Users\Administrator\Desktop\Sample.docx")

' Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF)

' Dispose of resources
doc.Dispose()
$vbLabelText   $csharpLabel

이 접근 방식은 추가 라이브러리 (Spire.Doc)를 구입하고 관리해야 하므로 비용과 복잡성이 증가합니다.

IronPDF는 직접 DOCX 파일을 PDF로 변환 변환을 위한 내장 지원을 제공하여 추가 라이브러리 없이 이 작업을 처리하는 데 필요한 시간을 절약할 수 있습니다. 반면, Spire.PDF는 DOCX 파일을 PDF로 변환 변환을 직접 처리할 수 없으며, DOCX 파일을 PDF로 변환하려면 Spire.Doc 라이브러리가 필요합니다.

성능 메트릭스는 무엇을 보여주나요?

테스트 및 사용자 피드백에 따르면, 실전 사용에서 라이브러리 간의 비교는 다음과 같습니다:

렌더링 성능

기본 레이아웃의 경우, Spire.PDF는 정적 테이블이나 기본 스타일의 텍스트와 같은 단순한 콘텐츠에 최적화되어 있어 이러한 사용 사례에 대해 빠르고 효율적입니다. 그러나 현대 CSS3 기능, JavaScript 또는 반응형 레이아웃을 포함하는 복잡한 HTML을 다룰 때 IronPDF의 Chrome 기반 엔진은 렌더링 시간이 약간 더 걸리지만 더 정확한 결과를 제공할 수 있습니다.

메모리 사용

Spire.PDF는 일반적으로 더 간단한 렌더링 엔진 덕분에 IronPDF(150-200MB)에 비해 더 적은 메모리(80-120MB)를 사용합니다. 그러나 이는 렌더링 충실도와 기능 지원의 비용이 따릅니다. 메모리가 중요하고 HTML 복잡성이 최소인 애플리케이션에서는 Spire.PDF가 이점이 있을 수 있습니다.

스레딩 및 비동기 지원

IronPDF는 RenderHtmlAsPdfAsync()과 같은 메서드를 통해 본격적인 async/await 지원을 제공하여 최신 .NET 애플리케이션에 적합합니다. Spire.PDF는 STA 스레드로 수동 스레드 관리가 필요하여 멀티 스레드 애플리케이션이 복잡해질 수 있습니다.

가격 및 라이선스 모델은 어떻게 비교되나요?

IronPDF 가격 및 라이선스

IronPDF는 구매할 다양한 수준과 추가 기능을 제공합니다. 개발자는 또한 Iron Suite를 구입하여 Iron Software의 모든 제품을 두 개의 가격으로 액세스할 수 있습니다. 라이선스를 구매할 준비가 되지 않았다면, IronPDF은 30일 동안 지속되는 무료 체험판을 제공합니다.

가격 (2025년 기준):

  • 영구 라이선스: 팀의 크기, 프로젝트 요구 사항 및 위치 수에 따라 다양한 영구 라이선스를 제공합니다. 각 라이선스 유형에는 이메일 지원이 포함됩니다.
  • Lite License: 이 라이센스는 $799이며, 하나의 개발자, 하나의 위치, 하나의 프로젝트를 지원합니다.
  • Plus License: 세 명의 개발자, 세 개의 위치, 세 개의 프로젝트를 지원하며 이는 Lite License보다 한 단계 업그레이드된 것입니다. 가격은 $1,199입니다. Plus 라이선스는 기본 이메일 지원 외에도 채팅 지원 및 전화 지원을 제공합니다.
  • Professional License: 이것은 더 큰 팀에 적합하며, 열 명의 개발자, 열 개의 위치, 열 개의 프로젝트를 $2,399에 지원합니다. 그것은 이전 등급과 동일한 연락 지원 채널을 제공하면서도 화면 공유 지원을 추가로 제공합니다.
  • Royalty-free redistribution: IronPDF의 라이센스는 또한 추가 $2,399에 대한 로열티 없는 재배포 범위를 제공합니다.
  • 끊김 없는 제품 지원: IronPDF는 매년 $999 또는 한 번 구매로 5년 동안 $1,999로 제품 업데이트, 보안 기능 업그레이드 및 엔지니어링 팀의 지원에 액세스할 수 있습니다.
  • Iron Suite: $1,498에 대해서는 IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint, IronWebScraper를 포함한 모든 Iron Software 제품에 접근할 수 있습니다.

IronPDF 가격표 IronPDF는 영구 라이선스와 포괄적인 지원이 포함된 유연한 라이선스 옵션을 제공합니다

Spire.PDF 가격 및 라이선스

Spire.PDF는 필요에 따라 다양한 라이선스를 제공합니다.

  • 무료 버전: Spire.PDF는 10 페이지의 PDF로 제한된 무료 버전을 제공합니다; 이 이상은 유료 라이선스를 구매해야 합니다.
  • 개발자 구독: 연간 $999 또는 $1,199의 가격으로, 필요에 따라 PDF 관련 기능을 구축해야 하지만 OEM 배포 권한이 필요하지 않은 개발자를 위한 옵션입니다.
  • 개발자 OEM 구독: 연간 $2,549 - $4,248의 가격으로 지원량에 따라 비용이 들며, 무료 업그레이드, 프리미엄 지원, 애플리케이션을 최종 사용자에게 배포할 수 있는 능력을 포함합니다.
  • 사이트 중소기업: 최대 10명의 개발자가 최대 10개의 위치에서 지원할 수 있으며, 연간 $4,599 또는 $7,598의 가격으로 원하는 지원량에 따라 가격이 다릅니다.
  • 사이트 OEM 구독: 지원 유형에 따라 연간 $13,088 - $16,687의 가격이 들며, 여러 위치에 애플리케이션을 배포해야 하는 대기업을 위한 것입니다.

어느 라이브러리가 더 나은 문서와 지원을 제공하나요?

IronPDF

IronPDF는 광범위한 문서화 및 지원을 제공하는 데 탁월합니다:

  • 종합 문서: 모든 기능을 다루는 광범위하고 사용자 친화적인 문서.
  • 24/5 지원: 활동적인 엔지니어 지원이 가능합니다.
  • 비디오 튜토리얼: YouTube에서 단계별 비디오 가이드를 제공합니다.
  • 커뮤니티 포럼: 추가 지원을 위한 참여 커뮤니티입니다.
  • 정기 업데이트: 최신 기능과 보안 패치를 보장하기 위해 월별 제품 업데이트를 제공합니다.
  • PDF API 참조: 우리의 도구에서 제공하는 모든 것을 최대한 활용할 수 있도록 API 참조를 제공합니다.

자세한 정보는 IronPDF의 방대한 문서를 확인하고, Iron Software YouTube 채널을 방문하세요.

Spire.PDF for .NET 문서 및 지원

  • 포럼: Spire.PDF는 사용자가 서로 상호작용하여 Spire.PDF와 관련된 팁, 사용, 문제를 공유할 수 있는 포럼을 갖추고 있습니다.
  • 코드 샘플: Spire.PDF는 다양한 사용 사례에서 제품을 사용하는 방법을 보여주는 코드 예제를 웹사이트에서 제공합니다.
  • 뉴스레터: Spire.PDF는 업데이트 공지와 다른 중요한 정보를 위한 개발자 뉴스레터를 제공합니다.
  • 지원: 지원은 주로 포럼을 통해 제공되며, 사용 권한 버전에 따라 추가 비용으로 유료 이메일/전화 지원이 제공됩니다.

일반적인 개발자 경험과 피드백은 무엇인가요?

커뮤니티 피드백 및 실제 사용에 따르면:

IronPDF 피드백

개발자들은 IronPDF가 "원본 HTML 페이지의 보다 포괄적이고 정밀한 표현을 제공한다"고 지속적으로 칭찬합니다. 라이브러리는 복잡한 CSS3 레이아웃, JavaScript 중심의 페이지 및 현대적인 웹 프레임워크를 처리할 수 있어 높은 충실도의 PDF 생성이 필요한 응용 프로그램에 선호됩니다.

일반적인 긍정적인 점은 다음과 같습니다:

  • 개발 시간을 줄여주는 직관적 API 설계
  • 브라우저 출력과 일치하는 우수한 렌더링 품질
  • 실용적인 예제가 포함된 포괄적인 문서
  • 빠른 기술 지원

Spire.PDF 피드백

커뮤니티 피드백에 따르면, "Spire는 단순히 이미지만 있는 PDF 파일을 생성합니다. 일부 CSS는 굵은 글꼴을 무시하는 것처럼 올바르지 않기도 합니다." 또한, JavaScript 지원은 "이를 완성하기에는 너무 어려워 짧은 시간 내에 완료되지 않을" 예정 기능으로 남아 있습니다.

일반적인 우려 사항은 다음과 같습니다:

  • 제한된 CSS3 및 최신 웹 표준 지원
  • JavaScript 실행 기능의 부족
  • HTML 변환을 위한 복잡한 스레딩 요구 사항
  • 특정 기능의 추가 라이브러리 요구 사항

각 도서관은 언제 선택해야 할까요?

IronPDF를 선택할 경우:

  • HTML에 최신 CSS3, JavaScript 또는 반응형 디자인이 포함되어 있습니다
  • 브라우저 출력과 일치하는 픽셀 정확한 렌더링이 필요합니다
  • 다중 플랫폼 배포가 필요합니다 (Linux, macOS, Docker)
  • 라이선스에 포함된 종합적인 지원이 필요합니다
  • 추가 라이브러리 없이 DOCX 변환 같은 내장 기능이 필요합니다
  • 최소한의 코드로 빠르게 개발하는 것을 중시합니다

Spire.PDF를 선택할 때:

  • PDF에 간단한 스타일이 포함된 기본 HTML만 포함되어 있습니다
  • 메모리 사용량이 중요한 제약 조건입니다
  • 주로 Windows 환경에서 작업합니다
  • HTML에 JavaScript 실행이 필요하지 않습니다
  • 이미 스택에 다른 Spire 제품을 사용하고 있습니다

결론

결론적으로 IronPDF와 Spire.PDF for .NET는 .NET 응용 프로그램에서 PDF 문서를 처리하는 데에 모두 능력 있는 도구입니다. IronPDF는 사용의 용이성, 다중 플랫폼 호환성, 현대 웹 표준 지원에서 뛰어나며 PDF 문서 작업을 한 단계 높이고 싶을 때 선호되는 선택입니다. Spire.PDF는 포괄적인 기능을 제공하지만 복잡한 작업에는 더 많은 노력이 필요하며 현대 웹 응용 프로그램이 요구하는 렌더링 정밀도가 부족할 수 있습니다.

현대적인 웹 기술을 다루거나 정확한 HTML을 PDF로 변환해야 하거나 신뢰할 수 있는 크로스 플랫폼 지원이 필요한 개발자에게는 IronPDF가 더 완벽한 솔루션을 제공합니다. Chrome 기반 렌더링 엔진, 직관적인 API 및 포괄적인 지원으로 인해 특히 기업 응용 프로그램 및 복잡한 문서 생성 시나리오에 적합합니다.

30일 무료 체험판을 시도하여 이용 가능한 기능을 확인할 수 있습니다.

참고해 주세요Spire.PDF는 해당 소유자의 등록 상표입니다. 본 사이트는 Spire.PDF와 제휴, 보증 또는 후원 관계가 없습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

자주 묻는 질문

C#에서 HTML을 PDF로 변환하는 방법은 무엇인가요?

IronPDF의 RenderHtmlAsPdf 메서드를 사용하여 HTML 문자열을 PDF로 변환할 수 있습니다. 또한 RenderHtmlFileAsPdf 사용하여 HTML 파일을 PDF로 변환할 수도 있습니다.

IronPDF가 HTML을 PDF로 변환할 때 JavaScript 실행을 지원하나요?

네, IronPDF는 JavaScript의 완전한 실행을 지원하므로 동적 콘텐츠 또는 JavaScript 기반 레이아웃을 PDF로 변환하는 데 이상적입니다.

IronPDF가 PDF 변환을 지원하는 플랫폼은 무엇인가요?

IronPDF는 Windows, Linux, macOS, Docker뿐만 아니라 Azure 및 AWS와 같은 클라우드 서비스에 대한 기본 지원을 제공합니다.

IronPDF의 메모리 사용량은 Spire.PDF와 어떻게 비교되나요?

IronPDF는 일반적으로 150-200MB 사이로 약간 더 많은 메모리를 사용하지만, Spire.PDF의 80-120MB보다 더 나은 렌더링 품질과 현대식 비동기패턴 지원을 제공합니다.

IronPDF가 DOCX 파일을 직접 PDF로 변환할 수 있나요?

네, IronPDF는 DocxToPdfRenderer 클래스를 통해 추가 라이브러리가 필요 없이 DOCX를 PDF로 변환하는 기능을 내장하고 있습니다.

IronPDF의 라이선스 옵션은 무엇인가요?

IronPDF는 모든 기능과 지원이 포함된 단일 개발자용 $749부터의 영구 라이선스를 제공합니다. 또한 9개 제품이 포함된 Iron Suite 번들을 $1,498에 제공합니다.

IronPDF는 어떤 종류의 지원을 제공하나요?

IronPDF는 모든 라이선스와 함께 이메일, 채팅, 전화, 화면 공유를 통한 24/5 엔지니어링 지원을 제공하여 포괄적인 지원을 보장합니다.

IronPDF를 사용하여 PDF 보안 및 암호화를 보장할 수 있는 방법은 무엇인가요?

IronPDF는 SecuritySettings 클래스를 통해 AES-256 암호화 및 비밀번호 보호를 지원하여 PDF 권한을 세밀하게 제어할 수 있습니다.

IronPDF가 현대 CSS로 복잡한 웹 페이지를 렌더링하기에 적합한가요?

네, IronPDF는 CSS3, 플렉스박스, 그리드 레이아웃, 웹 글꼴 및 JavaScript를 지원하는 전체 Chrome 렌더링 엔진을 사용하여 복잡한 웹 페이지에 적합합니다.

IronPDF의 무료 버전에는 어떤 제한이 있나요?

IronPDF는 30일 동안 기능 제한이 없는 무료 체험판을 제공하여 구매 전에 모든 기능을 충분히 시험할 수 있는 기회를 제공합니다.

IronPDF는 어떻게 고품질 HTML 렌더링을 보장하나요?

IronPDF는 Chrome 브라우저 출력과 일치하는 픽셀 완벽한 렌더링을 제공하여 원본 HTML 내용의 충실도와 정확한 표현을 보장합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

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