푸터 콘텐츠로 바로가기
IRONPDF 사용하기

C#에서 PDF 페이지 수 얻기

보호되지 않은 PDF 배포의 문제점

IronPDF 홈페이지 기밀 분석 보고서를 일반 PDF 첨부 파일로 이메일로 발송하면, 그 시점에서 이미 건물을 떠난 셈입니다. 수신자는 이를 전달하거나, 공개적으로 게시하거나, 경쟁사의 발표 자료로 내용물을 떼어내거나, 데이터 유출로 인해 손상될 수 있는 이메일함에 그냥 남겨둘 수 있습니다. 이를 작성한 조직은 구제할 방법이 없으며, 규제 산업에서는 잠재적으로 방어 수단이 없습니다.

이러한 상황이 문제가 되는 경우는 다양하지만, 기저의 위험은 일관성이 있습니다. 법률 회사는 대리인 검토를 위해 초안 서류를 상대측 변호사에게 배포하는데, 이러한 초안이 기밀이나 최종 이전 상태라는 표시가 없으면 맥락이나 책임 없이 공유될 수 있습니다. 연구 회사가 분석 보고서를 지불 구독자에게 암호화되지 않은 PDF로 배포하면, 한 명의 구독자가 전체 보고서를 두 번의 클릭으로 메일링 리스트에 재배포할 수 있습니다. 부동산 플랫폼이 요청하는 대리인에게 부동산 감정 평가서를 보내는 경우, 수신자 별 식별자가 없으면 유출 원천을 추적할 방법이 없습니다. 의료 기관이 암호화 없이 이메일을 통해 환자 문서를 전송하면, HIPAA 전송 요건을 위반하는 것입니다.

배달 전에 Acrobat에서 각 파일을 수동으로 워터마크를 삽입하는 것은 하루에 소량의 문서를 넘기지 못합니다. 또한 이는 일관성이 없어서 워터마크를 적용하는 것을 잊거나 잘못된 분류 레이블을 붙여 보호되지 않은 버전이 전달되기도 합니다.

보호는 배달 파이프라인에 구축되어 문서의 분류와 수신자의 접속 수준에 기반해 자동으로 적용되어 수동 단계가 생략될 수 없습니다.

해결책: 매 배달 전 프로그램을 통한 보호

IronPDF는 .NET 애플리케이션이 워터마크, 암호 및 권한의 제한을 PDF에 적용하여 생성 또는 배달 파이프라인의 일부로 처리할 수 있게 합니다. ChromePdfRenderer가 문서를 생성한 후 애플리케이션은 저장되거나 스트리밍되거나 이메일로 전송되기 전에 워터마크를 찍고 암호를 설정하며 권한 플래그를 코드 내에서 구성합니다.

시스템에서 나가는 모든 문서는 그 분류에 적합한 보호 정책을 가지고 있습니다. 내부 초안에는 시각적인 "DRAFT" 오버레이가 배치됩니다. 클라이언트 용 보고서는 수신자의 이름을 매 페이지에 찍습니다. 아카이브로 보관된 규제 문서에는 편집이 불가능한 소유자 비밀번호 암호화가 적용됩니다. Acrobat 불필요, 수동 단계 불필요, 제삼자의 DRM 서비스 불필요. 보호는 기존 .NET 애플리케이션 내의 단일 NuGet 패키지로 적용됩니다.

실제 적용 사례

1. 일반 파이프라인을 통한 PDF 생성

보안 계층은 렌더링 후에 위치하며 내부에 있지 않습니다. ChromePdfRenderer는 HTML 템플릿이나 기존 파일에서 정확히 보호되지 않은 문서처럼 PdfDocument를 생성합니다. PdfDocument 객체가 메모리에 생성되면 보호 파이프라인이 시작됩니다.

적용되는 특정 보호는 전송 트리거, 문서 유형, 또는 수신자의 권한 수준에 의해 결정되는 문서의 분류 및 수신자의 맥락에 따라 달라집니다. 같은 PDF가 세 가지 다른 상태로 시스템을 떠날 수 있습니다: 내부 검토를 위한 워터마크만 있는 상태, 외부 전송을 위한 워터마크와 비밀번호 보호 상태, 규제 보관을 위한 권한 제한이 있는 완전히 잠긴 상태.

2. 워터마킹을 통해 모든 페이지에 스탬프 찍기

HtmlStamper를 사용하여 대각선 텍스트 워터마크가 적용되며, CSS로 글꼴 크기, 색상, 불투명도 및 회전을 제어하는 HTML 조각입니다. 이는 이미지 자산을 요구하지 않고 워터마크의 외형에 대한 완전한 디자인 제어를 제공합니다:

using IronPdf;
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(documentHtml);

// Stamp a recipient-specific diagonal watermark across every page
var stamper = new HtmlStamper
{
    Html = $@"<div style='
        font-size: 48px;
        color: rgba(180, 0, 0, 0.18);
        font-family: Arial, sans-serif;
        font-weight: bold;
        transform: rotate(-40deg);
        white-space: nowrap;'>
        CONFIDENTIAL — {recipient.FullName}
    </div>",
    VerticalAlignment = VerticalAlignment.Middle,
    HorizontalAlignment = HorizontalAlignment.Center,
};

pdf.ApplyStamp(stamper);

pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf");
using IronPdf;
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(documentHtml);

// Stamp a recipient-specific diagonal watermark across every page
var stamper = new HtmlStamper
{
    Html = $@"<div style='
        font-size: 48px;
        color: rgba(180, 0, 0, 0.18);
        font-family: Arial, sans-serif;
        font-weight: bold;
        transform: rotate(-40deg);
        white-space: nowrap;'>
        CONFIDENTIAL — {recipient.FullName}
    </div>",
    VerticalAlignment = VerticalAlignment.Middle,
    HorizontalAlignment = HorizontalAlignment.Center,
};

pdf.ApplyStamp(stamper);

pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf");
Imports IronPdf
Imports IronPdf.Editing

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(documentHtml)

' Stamp a recipient-specific diagonal watermark across every page
Dim stamper As New HtmlStamper With {
    .Html = $"<div style='
        font-size: 48px;
        color: rgba(180, 0, 0, 0.18);
        font-family: Arial, sans-serif;
        font-weight: bold;
        transform: rotate(-40deg);
        white-space: nowrap;'>
        CONFIDENTIAL — {recipient.FullName}
    </div>",
    .VerticalAlignment = VerticalAlignment.Middle,
    .HorizontalAlignment = HorizontalAlignment.Center
}

pdf.ApplyStamp(stamper)

pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf")
$vbLabelText   $csharpLabel

적용된 워터마크가 있는 출력 PDF 문서

IronPDF 예제 출력 일반 레이블이 아닌 수신자의 이름을 사용하면 어떤 유출본도 특정 배달 이벤트에 추적할 수 있습니다. 불투명도 값 — 여기서는 0.18 — 는 워터마크가 내용물을 방해하지 않으면서도 합법적인 독자를 위해 여전히 보이도록 합니다.

3. SecuritySettings에 적용된 비밀번호 및 권한 플래그

using IronPdf;

// Owner password controls who can change security settings
// User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret";
pdf.SecuritySettings.UserPassword = recipientAccessCode;

// Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;

pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf");
using IronPdf;

// Owner password controls who can change security settings
// User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret";
pdf.SecuritySettings.UserPassword = recipientAccessCode;

// Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;

pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf");
Imports IronPdf

' Owner password controls who can change security settings
' User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret"
pdf.SecuritySettings.UserPassword = recipientAccessCode

' Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit

pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf")
$vbLabelText   $csharpLabel

사용자 맞춤형 암호화 설정이 있는 출력 PDF

보안 PDF 출력 소유자 비밀번호는 내부에 저장되며 절대 배포되지 않습니다. 이는 조직이 문서의 보안 설정을 수정해야 할 때만 사용됩니다. 사용자 비밀번호는 별도의 채널을 통해 수신자에게 전달되는 비밀번호입니다. AllowUserCopyPasteContent = false를 설정하면 수신자가 문서를 열어도 텍스트를 선택하고 추출할 수 없게 되어, 내용 추출이 아닌 접근 자체가 문제인 독점 연구나 법률 문서에 중요한 사항입니다.

실제 이점

유출 억제. 수신자의 이름이나 이메일을 각 페이지에 스탬프 찍어 무단 공유를 추적 가능한 행위로 만듭니다. 대부분의 무단 공유는 결과가 없다고 느껴지기 때문에 발생합니다. 수신자 별로 표시된 워터마크는 그런 변수를 바꾸며 어떠한 DRM 인프라를 필요로 하지 않습니다.

접근 제어. 사용자 비밀번호는 지정된 수신자만 문서를 열 수 있도록 보장합니다. 이메일이 중간에 가로채이거나 파일이 전달된 스레드에서 발견되더라도, 원래 수신자가 받은 비밀번호 없이는 읽을 수 없습니다.

사용 제한. 권한 플래그는 수신자가 열고 나서 할 수 있는 작업을 제한합니다. 연구 보고서를 위해 돈을 지불한 구독자는 이를 읽을 수는 있지만, 내용을 경쟁사 분석에 복사하거나 무제한 복사본을 인쇄하거나 메모를 작성해 내보낼 수는 없습니다. 내용은 접근 가능하지만; 추출 및 재목적화는 불가능합니다.

분류 유연성. 동일한 문서가 맥락에 따라 다른 보호 프로파일을 가집니다: 내부 검토 사이클을 위한 비밀번호 없는 "DRAFT" 워터마크, 클라이언트 용 배달을 위한 사용자 비밀번호와 수신자 특화 워터마크, 규제 보관을 위한 편집 불가한 전체 암호화. 하나의 파이프라인에서 여러 출력 정책.

준수. AES-256 암호화된 PDF는 HIPAA, SOC 2 문서 처리 정책, 및 FINRA 전자 통신 표준에서 전송 보안 요건을 충족합니다. 암호화는 별도의 준수 도구가 아니라 프로세스 내에서 적용됩니다.

문서 당 비용 없음. 워터마킹 및 암호화는 .NET 애플리케이션 내에서 인 프로세스로 실행됩니다. 제삼자 DRM이나 워터마킹 API가 없고, 문서 당 비용이 없으며, 대량의 배포 실행을 비용 증가시키는 가격 모델이 없습니다.

마무리

보호 없이 시스템을 떠나는 PDF는 조직이 그에 대한 통제를 포기한 문서입니다. 이는 공개 콘텐츠에 대해서는 수용 가능한 트레이드 오프입니다. 그러나 기밀 보고서, 드래프트 계약, 규제된 환자 문서, 지불된 연구에 대해서는 그렇지 않습니다.

생성 파이프라인에 보호를 구축하여 분류에 따라 자동으로 적용하여 매 배달 이벤트 전에 수동 단계를 제거하면 생략되며 잘못된 인적 판단을 방지합니다. IronPDF는 C#에서 PDF 생명주기를 ironpdf.com에서 HTML 템플릿 렌더링부터 워터마킹, 암호화 및 출력에 대한 권한 제어까지 처리합니다. 문서 배달 파이프라인에 보안 정책을 추가할 준비가 되었다면, 30일 무료 체험을 시작하세요 그리고 다음 민감한 문서가 나가기 전에 워터마크 및 접근 통제를 자체 콘텐츠 분류와 비교하여 확인하세요.

Curtis Chau
기술 문서 작성자

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

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

아이언 서포트 팀

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