이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.
C#에서 PDF 편집
Docotic.Pdf를 사용하여 PDF 문서를 수정할 수 있습니다. 강력한 기능과 직관적인 API를 결합한 C# 및 VB.NET용 PDF 편집 라이브러리입니다.
Docotic.Pdf는 PDF 문서를 편집할 수 있는 다양한 수단을 제공합니다. PDF 편집을 위한 라이브러리의 주요 기능은 다음과 같습니다:
- 여러 PDF를 하나로 결합하거나 단일 PDF를 여러 파일로 분할합니다.
- PDF 파일 크기를 줄입니다.
- 페이지를 재배열, 삭제, 회전 또는 추출합니다.
- PDF 메타데이터를 읽고, 변경하고, 삭제합니다.
- 디지털 서명으로 PDF에 서명합니다.
- 문서를 암호화하거나 PDF에서 암호를 제거합니다.
- 주석과 첨부 파일을 추가, 편집 또는 제거합니다.
- AcroForm을 채우고, 폼 컨트롤을 추가하거나 제거합니다.
- 폼 필드와 주석을 평면화하여 PDF 콘텐츠의 일부로 만듭니다.
- PDF 내의 텍스트를 추가, 삭제 또는 바꿉니다.
- 이미지를 삽입, 교체 및 크기 조정합니다.
- 워터마크와 배경을 추가합니다.
- 스캔한 문서를 편집 가능하고 검색 가능한 텍스트로 변환합니다.
다음 섹션에서는 PDF 편집 기능을 더 자세히 설명합니다. 또한 각 섹션에는 관련 리소스로 연결되는 코드 조각과 링크가 포함되어 있습니다.
PDF 병합 및 분할
이 섹션은 서로 반대되는 목표를 가진 두 기능에 관한 것입니다.

PDF 결합
PDF 파일을 통합하면 하나의 PDF 문서를 만들게 됩니다. 병합된 PDF에는 일반적으로 기존 여러 PDF 파일의 관련 정보가 포함됩니다.
다음은 Docotic.Pdf를 사용하여 PDF 파일을 결합하는 방법을 보여주는 코드 조각입니다.
using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.Save("merged.pdf");
이 코드는 가장 기본적인 경우를 보여주므로 매우 단순합니다. 더 복잡한 병합 사례를 설명하는 문서가 있습니다. 예를 들어, 암호화된 문서를 결합하는 방법을 보여줍니다.
PDF 분할
분할은 원본 PDF에서 선택한 페이지를 추출하여 하나 이상의 새 PDF 파일을 만드는 것을 의미합니다. 이 과정은 문서의 일부만 공유하려는 경우에 유용합니다.
다음 코드 조각은 PDF의 각 페이지에서 새 문서를 만드는 방법을 보여줍니다.
using var pdf = new PdfDocument("compound.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
using PdfDocument copy = pdf.CopyPages(i, 1);
// 복사된 페이지가
// 글꼴, 이미지, 패턴과 같은 사용되지 않는 리소스를 참조할 때 파일 크기를 줄이는 데 도움이 됩니다.
copy.RemoveUnusedResources();
copy.Save(i + ".pdf");
}
전용 문서에서 PDF 분할기 구현에 대한 다른 접근 방식을 읽어보세요.
PDF 압축
PDF를 압축하는 데에는 두 가지 주요 접근 방식이 있습니다. 첫 번째는 파일의 내용은 바꾸지 않고 형식만 변경하는 작업만 적용하는 것입니다. 두 번째는 더 나은 압축을 위해 세부 정보나 문서 품질이 손실될 수 있는 변경도 포함합니다.
무손실 PDF 압축
기본적으로 라이브러리는 PDF 개체가 더 적은 바이트를 차지하도록 저장합니다. 이를 위해 사용되지 않는 개체를 제외하고, 서식 없이 개체를 기록하며, 가능한 경우 더 짧은 형식을 사용합니다.
압축을 더 개선하기 위해 Docotic.Pdf는 출력 PDF에도 개체 스트림을 생성합니다. 이는 개체를 가장 압축된 표현으로 기록하는 또 다른 방식입니다. 개체 스트림은 Flate 알고리즘으로 압축됩니다.
라이브러리가 개체를 저장하는 방식은 저장 옵션으로 제어할 수 있습니다.
일부 문서에는 중복된 글꼴, 이미지, 색상 프로필 및 기타 개체가 포함됩니다. 이는 일반적으로 증분 업데이트된 문서와 여러 문서를 병합하여 만든 파일에서 발생합니다. PdfDocument.ReplaceDuplicateObjects 메서드를 사용하여 이러한 개체를 중복 제거하면 출력 크기를 크게 줄일 수 있습니다.
문서의 페이지는 사용되지 않는 리소스를 참조할 수 있습니다. 예를 들어, 이전에는 페이지에 표시되었지만 더 이상 표시되지 않는 이미지가 이에 해당합니다. 이러한 리소스를 제거하려면 PdfDocument.RemoveUnusedResources 메서드를 사용합니다.
이러한 모든 PDF 작업은 품질 손실 없이 파일 크기를 줄입니다.
손실 변환
이미지가 있는 파일의 경우 PDF 크기를 줄이는 가장 효과적인 방법 중 하나는 이미지의 압축 방식을 변경하는 것입니다. 예를 들어, JPEG 같은 손실 압축을 이미지에 사용하면 크기가 줄어듭니다. 부작용으로 압축 아티팩트와 세부 정보 손실이 이미지에서 보일 수 있습니다.
PDF의 이미지가 필요한 것보다 크면 크기를 조정할 수 있습니다. 그러면 더 나은 압축을 얻을 수 있습니다. 또 다른 방법은 이미지를 흑백(이진)으로 변환하는 것입니다.
공간을 절약하려면 폼 필드와 주석을 평면화할 수 있습니다. 문서에서 편집 가능한 주석과 폼 필드가 더 이상 필요하지 않을 때 적합합니다.
글꼴은 문서에서 많은 공간을 차지할 수 있습니다. PdfDocument.RemoveUnusedFontGlyphs 메서드는 글꼴에서 사용되지 않는 글리프를 제거하여 출력 크기를 최적화할 수 있습니다. 글꼴 서브셋팅은 이 과정의 다른 이름입니다. 문서에서 글꼴 바이트를 완전히 제거할 수도 있습니다(글꼴 비임베드). 문서에 Arial 같은 널리 사용되는 글꼴의 바이트가 포함되어 있을 때 유용할 수 있습니다.
다른 변환은 문서에서 정보를 직접 제거합니다. 메타데이터, 구조 정보, 애플리케이션 전용 데이터를 제거할 수 있습니다. 이 데이터는 표시되지는 않지만, 문서 사용자에게 중요하지 않은 경우에만 제거하세요.
더 자세한 내용과 코드 예제를 보려면 PDF 파일 크기를 줄이는 방법에 대한 문서를 읽어보세요.
PDF에서 페이지 순서 변경
PDF 내부에서 페이지 순서를 바꿔야 하는 이유는 충분히 있습니다. 예를 들어, 관련 정보를 함께 묶거나 문서가 논리적으로 이어지도록 하여 가독성을 높여야 할 수 있습니다.

Docotic.Pdf는 페이지 병합 및 분할 기능 외에도 PDF에서 페이지를 재배열할 수 있는 다양한 메서드를 제공합니다. 여기서는 C# 코드 조각과 Docotic.Pdf API를 사용하여 PDF 페이지를 정리하는 방법을 보여줍니다.
이 섹션의 예제에 대한 전체 테스트 프로젝트는 샘플 코드의 Pages and Navigation 그룹에서 찾을 수 있습니다. 코드 조각에서는 ten-pages.pdf를 사용합니다. 각 페이지에 Page N 제목이 있는 단순한 테스트 문서입니다.
PDF 페이지 이동
다음 코드 조각은 연속된 페이지 범위를 이동하는 방법을 보여줍니다. 이 코드는 페이지의 앞 절반을 문서 끝으로 이동합니다.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.MovePages(0, 5, pdf.PageCount);
pdf.Save("continuous-move.pdf");
임의의 페이지 집합도 이동할 수 있습니다. 다음 코드는 홀수 페이지를 문서 끝으로 이동합니다.
using var pdf = new PdfDocument("ten-pages.pdf");
int[] indexes = [0, 2, 4, 6, 8];
pdf.MovePages(indexes, pdf.PageCount);
pdf.Save("arbitrary-move.pdf");
페이지 한 장만 이동하려면 PdfDocument.MovePage 메서드를 사용합니다.
PDF 페이지 교환
두 페이지를 서로 바꾸려면 다음과 같은 코드를 사용합니다.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.SwapPages(9, 0);
pdf.SwapPages(8, 1);
pdf.Save("swapped.pdf");
PdfDocument.SwapPages 메서드는 서로의 위치를 차지해야 하는 두 페이지의 인덱스를 받습니다. 페이지 수가 2가 아닐 경우 페이지 이동 메서드 중 하나를 사용합니다.
페이지 추가 및 삽입
모든 PdfDocument에는 최소 한 페이지가 포함됩니다. 새 문서를 만들면 라이브러리가 한 페이지를 암시적으로 추가합니다.
Docotic.Pdf API를 사용하여 PDF에 빈 페이지를 삽입하는 방법은 다음과 같습니다. 인덱스가 0부터 PageCount까지 포함되는 위치에 페이지를 삽입할 수 있습니다.
using var pdf = new PdfDocument();
var newPage = pdf.InsertPage(0);
newPage.Canvas.DrawString("This is the new first page");
pdf.Save("two-pages.pdf");
PDF에 빈 페이지를 추가하려면 PdfDocument.AddPage 메서드를 사용합니다. 이 메서드는 문서 끝에 새 페이지를 추가합니다. pdf.InsertPage(pdf.PageCount) 호출과 동일하게 동작합니다.
다른 문서에서 페이지를 추가하거나 삽입하려면 PDF 앞에 추가 섹션에서 설명한 것처럼 여러 호출을 조합해서 사용합니다. 이 조합을 사용하여 PDF에 표지 페이지를 추가할 수 있습니다.
PDF 페이지 복제
라이브러리 API에서는 복제 작업을 두 개의 연속된 작업으로 수행할 수 있습니다. 첫 번째는 페이지 복사 작업입니다. PDF 분할 섹션의 코드 예제를 참조하세요.
두 번째는 페이지 붙여넣기 작업입니다. 이 작업에는 PdfDocument.Append 메서드를 사용합니다. 그런 다음 추가된 페이지를 필요한 위치로 이동합니다.
페이지 추출
다음 코드 조각은 PDF에서 페이지를 추출하는 방법을 보여줍니다. 소스 문서에서 앞의 세 페이지를 추출합니다.
using var pdf = new PdfDocument("ten-pages.pdf");
using (var extracted = pdf.ExtractPages(0, 3))
{
extracted.RemoveUnusedResources();
extracted.Save("three-pages.pdf");
}
pdf.Save("seven-pages.pdf");
ExtractPages 메서드는 문서에서 페이지를 제거합니다. 따라서 소스 문서에는 7페이지만 남습니다. 라이브러리는 한 페이지만 포함된 문서에서는 페이지를 추출할 수 없습니다.
추출된 페이지가 있는 문서에서는 사용되지 않는 리소스를 제거하는 것이 좋습니다.
PDF에서 페이지 제거
PDF 문서에서 페이지를 삭제하는 방법을 보여주는 코드 조각을 확인해 보세요. 실제로는 RemovePage 메서드의 서로 다른 오버로드를 사용하여 두 페이지를 삭제합니다. 첫 번째 오버로드는 페이지 인덱스를 매개 변수로 받습니다. 두 번째 오버로드는 페이지 객체를 받습니다.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.RemovePage(0);
pdf.RemovePage(pdf.Pages[0]);
pdf.Save("without-first-two-pages.pdf");
한 번에 여러 페이지를 제거하려면 PdfDocument.RemovePages 메서드를 사용합니다. 이 메서드의 오버로드는 페이지 인덱스 배열 또는 페이지 객체 배열을 사용합니다.
디지털 서명
Docotic.Pdf는 PDF에서 디지털 서명을 위한 다양한 작업을 구현하며, PDF 문서의 신뢰성과 법적 유효성을 유지하는 데 도움을 줍니다. 라이브러리가 수행할 수 있는 작업의 예는 다음과 같습니다.
인증서로 PDF 서명. PDF에 디지털 서명을 추가하는 것은 서명자의 신원을 확인하고 서명 후 문서가 변경되지 않았음을 보장하는 방법입니다.
서명 인증. PDF에 추가 제한을 적용하려면 인증 서명으로 서명할 수 있습니다. 서명 후 PDF를 완전히 잠그거나 일부 변경만 허용할 수 있습니다.
PDF에서 서명 확인. 디지털 서명의 유효성을 확인하여 문서의 서명된 부분이 변경되지 않았는지 검증합니다.
여러 서명 허용. 계약서, 합의서, 양식은 종종 여러 당사자가 하나의 문서에 서명해야 합니다. PDF에 여러 서명을 추가하려면 문서를 증분 저장해야 합니다.
서명 타임스탬프 포함. 서명 옵션에서 Timestamping Authority URL과 필요에 따라 자격 증명을 지정할 수 있습니다. 라이브러리는 수신한 타임스탬프를 서명에 포함합니다.
인증서 포함. 라이브러리는 서명 인증서를 디지털 서명에 자동으로 포함합니다.
Digital Signatures 페이지에는 각 작업에 대한 샘플 코드와 추가 정보가 포함되어 있습니다.
PDF 보호
PDF 보안을 보장하기 위해 사용할 수 있는 기능은 세 가지입니다. Docotic.Pdf는 양방향으로 작동할 수 있습니다. 즉, 라이브러리로 PDF를 보호하거나 보호된 PDF를 잠금 해제할 수 있습니다.

암호 보호
이 기능을 사용하면 PDF에 대한 액세스를 제한하는 암호를 설정할 수 있습니다. 암호 유형에 따라 PDF를 열거나 수정하려면 올바른 암호가 필요합니다.
PDF에는 두 가지 유형의 암호가 있습니다:
- 열기 암호(사용자 암호). 이 암호는 PDF를 열고 보는 데 필요합니다. 올바른 암호가 없으면 규격을 준수하는 PDF 뷰어는 문서를 열지 않습니다.
- 권한 암호(소유자 암호). 이 암호는 PDF의 권한을 제거하는 데 필요합니다. 소유자 암호로 PDF를 열면 인쇄, 복사, 편집 같은 일부 작업이 권한으로 제한되어 있어도 모든 작업이 허용됩니다.
같은 PDF 문서에 대해 두 암호를 모두 설정할 수 있습니다. PDF 문서에서 암호를 제거하는 방법은 PDF 파일 복호화를 읽어보세요.
암호화
PDF 암호화와 PDF 암호는 함께 작동하여 PDF의 민감한 정보가 정당한 사용자에게만 제공되도록 합니다. 올바른 복호화 키나 암호를 가진 사용자만 내용을 볼 수 있습니다.
Docotic.Pdf는 RC4 40비트, RC4 128비트, AES 128비트, AES 256비트 암호화 알고리즘을 사용하여 PDF 파일을 암호화할 수 있습니다.
권한 및 제한
PDF에서 인쇄, 텍스트 복사, 문서 편집 등을 제한하는 등 다양한 권한을 설정할 수 있습니다. 권한은 사용자 암호로 PDF를 열 때의 경험에만 영향을 줍니다. 소유자 암호로 PDF를 여는 사용자에게는 어떠한 제한도 적용되지 않습니다.
PDF에서 권한을 제거하려면 먼저 PDF 보안 암호를 제거해야 합니다. C#과 Docotic.Pdf API를 사용하여 이를 수행하는 방법을 읽어보세요.
PDF 보안 외에 PDF 무결성까지 보장하는 방법은 디지털 서명 섹션을 참조하세요.
PDF의 메타데이터
PDF 메타데이터는 PDF 파일에 포함된 정보로, 문서에 대한 세부 정보를 제공합니다. 메타데이터의 주요 출처는 두 가지입니다. PDF 문서 속성과 XMP 메타데이터입니다.
문서 속성은 문서 정보 사전, 파일 정보, 메타데이터 필드, 문서 특성, 파일 특성이라고도 합니다.
XMP(Extensible Metadata Platform) 메타데이터는 기본적으로 PDF에 포함된 XML 파일입니다. XMP는 모든 메타데이터 속성 집합을 저장할 수 있는 유연한 데이터 모델을 사용합니다. 이 메타데이터는 네임스페이스를 사용하여 관련 속성을 그룹화합니다. 일반적인 네임스페이스에는 XMP Core/XMP Basic과 Dublin Core가 있습니다.
Docotic.Pdf는 XMP 메타데이터와 문서 속성을 모두 완벽하게 지원합니다. PDF 2.0 표준은 문서 정보 사전 속성 대부분을 사용 중단으로 표시했습니다. 예외는 생성 날짜와 수정 날짜뿐입니다.
이 섹션의 예제에 대한 전체 테스트 프로젝트는 샘플 코드의 메타데이터 그룹에서 찾을 수 있습니다.
문서 속성
Docotic.Pdf로 문서 속성을 편집하는 방법을 확인하세요.
using var pdf = new PdfDocument("file.pdf");
pdf.Info.Author = "An example code";
pdf.Info.Subject = "Showing how to access and change document metadata";
pdf.Info.Title = "Custom title goes here";
pdf.Info.Keywords = "pdf Docotic.Pdf";
pdf.Save("updated-file.pdf");
각 속성 값을 변경할 수 있지만, 기본적으로 라이브러리는 PDF를 저장하기 전에 일부 속성을 자동으로 업데이트한다는 점에 유의하세요. 이 동작은 저장 옵션에서 변경할 수 있습니다.
문서 속성에 지정된 모든 메타데이터를 제거하려면 PdfInfo.Clear 메서드를 사용합니다. 원하면 사용자 지정 속성만 제거할 수도 있습니다.
XMP 메타데이터
이 코드 조각은 PDF 문서의 XMP 메타데이터 속성을 변경하는 방법을 보여줍니다.
using var pdf = new PdfDocument("file.pdf");
pdf.Metadata.DublinCore.Creators = new XmpArray(XmpArrayType.Ordered);
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("me"));
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("Docotic.Pdf"));
pdf.Metadata.DublinCore.Format = new XmpString("application/pdf");
pdf.Metadata.Pdf.Producer = new XmpString("me too!");
pdf.Save("updated-file.pdf");
이 코드는 Dublin Core 및 Adobe PDF 스키마의 속성을 변경합니다. 기본 저장 옵션 때문에 Producer 속성은 덮어써진다는 점에 유의하세요.
XmpMetatada.Save 메서드 중 하나를 사용하여 원시 XMP 메타데이터를 추출할 수 있습니다. 이 메서드는 모든 속성이 포함된 XML을 생성합니다.
문서에서 모든 XMP 메타데이터를 제거하려면 XmpMetadata.Unembed 메서드를 사용합니다.
메타데이터 동기화
XMP 메타데이터와 Document Info 속성이 대응하는 속성에 대해 동일한 값을 갖도록 하는 것이 바람직합니다. 특히 같은 파일에서 두 메타데이터 원본을 모두 편집하는 경우 더욱 그렇습니다.
PdfDocument.SyncMetadata 메서드를 사용하여 XMP 메타데이터와 Document Info의 값을 동기화하세요. 어떤 속성이 두 원본에서 모두 변경된 경우, 이 메서드는 한 원본을 다른 원본의 값으로 덮어씁니다. 더 자세한 내용은 이 메서드의 문서를 읽어보세요.
PDF 책갈피
PDF 문서에는 독자가 특정 섹션이나 페이지로 빠르게 이동할 수 있도록 돕는 특수한 바로가기나 링크가 포함될 수 있습니다. PDF 개요는 책갈피의 다른 이름입니다.

뷰어 앱은 보통 책의 목차처럼 책갈피를 표시하지만, 상호 작용형입니다. 독자가 책갈피를 클릭하면 뷰어 앱은 문서의 지정된 부분으로 이동합니다. 유사한 동작은 링크 주석으로 구현할 수 있습니다.
다음은 PDF에 책갈피를 추가하는 방법을 보여주는 C# 코드 조각입니다.
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
root.AddChild("Fifth page", 4);
root.AddChild("Seventh page", pdf.Pages[6]);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("simple-bookmarks.pdf");
PDF 개요는 주 책갈피와 하위 책갈피를 가질 수 있어, 큰 문서를 구조화하기가 더 쉽습니다. PDF에서 하위 책갈피를 만드는 방법은 다음과 같습니다.
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
var evenPages = root.AddChild("Even pages");
evenPages.AddChild("Second page", 1);
evenPages.AddChild("Fourth page", 3);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("even-pages-bookmarks.pdf");
책갈피 항목에 글꼴과 색상을 적용할 수 있습니다. 스타일이 적용된 개요 만들기의 전체 예제를 확인해 보세요.
PDF에서 책갈피를 제거하려면 RemoveChild 또는 RemoveChildAt 메서드를 사용합니다. 루트 노드에서 RemoveAllChildren 메서드를 호출하여 모든 책갈피를 제거할 수 있습니다.
파일 첨부
PDF 첨부 파일은 PDF 문서 안에 포함된 외부 파일입니다. 이러한 파일은 embedded files 및 file attachments라고도 흔히 부릅니다. 이미지, 오디오/비디오 파일, 다른 PDF, Word 문서, Excel 스프레드시트 등 어떤 파일이든 첨부할 수 있습니다.
PDF를 함께 첨부하여 결합된 PDF 파일을 만들려면 PDF 문서 병합에 대한 문서를 읽어보세요.
다음은 Docotic.Pdf API를 사용하여 PDF에 첨부 파일을 추가하는 C# 코드입니다.
using var pdf = new PdfDocument();
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.SharedAttachments.Add(excelFile);
pdf.Save("shared-attachment.pdf");
위 코드는 파일을 공유 첨부 파일로 추가했습니다. 독자는 뷰어의 첨부 파일 패널에서 첨부된 파일을 찾을 수 있습니다.
PDF 페이지에 첨부 파일을 추가하는 것도 가능합니다. 이러한 첨부 파일은 다른 주석처럼 페이지 내용 안에 표시됩니다.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
page.Canvas.DrawString(20, 100, "Here is this year's figures document:");
var bounds = PdfRectangle.FromLTRB(155, 100, 165, 110);
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.Pages[0].AddFileAnnotation(bounds, excelFile);
pdf.Save("page-attachment.pdf");
이 섹션의 예제에 대한 전체 테스트 프로젝트는 샘플 코드의 첨부 파일 그룹에서 찾을 수 있습니다.
PDF에서 첨부 파일을 제거하려면 공유 첨부 파일과 페이지 주석을 모두 열거한 뒤 필요하지 않은 항목을 제거해야 합니다. 아래 열거 코드의 예제를 참조하세요. 모든 공유 첨부 파일을 제거하려면 pdf.SharedAttachments.Clear() 호출을 사용할 수 있습니다.
내장 파일을 PDF에서 추출하려면 컬렉션도 열거해야 합니다. 예제 코드는 다음과 같습니다.
using var pdf = new PdfDocument("file-with-attachments.pdf");
int i = 0;
foreach (var attachment in pdf.SharedAttachments)
{
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
foreach (var widget in pdf.GetWidgets())
{
var attachment = (widget as PdfFileAttachmentAnnotation)?.File;
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
페이지 레이블
PDF 페이지 레이블은 PDF 문서의 페이지에 할당된 사용자 지정 이름 또는 번호입니다. 표준 페이지 번호와 달리 페이지 레이블에는 문자, 숫자, 심지어 로마 숫자까지 혼합하여 사용할 수 있습니다. 페이지 레이블의 다른 이름은 페이지 식별자와 페이지 이름입니다.
Docotic.Pdf를 사용하여 PDF에 페이지 레이블을 추가하는 방법은 다음과 같습니다.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.PageLabels.AddRange(0, 3, PdfPageNumberingStyle.LowercaseRoman);
pdf.PageLabels.AddRange(4, PdfPageNumberingStyle.DecimalArabic, string.Empty, 5);
pdf.PageLabels.AddRange(7, PdfPageNumberingStyle.DecimalArabic, "Appendix page ", 1);
pdf.Save("page-labels.pdf");
처음 네 페이지의 레이블은 i, ii, iii, iv가 됩니다. 다음 세 레이블은 5, 6, 7입니다. 나머지 페이지의 레이블은 Appendix page 1, Appendix page 2, Appendix page 3입니다.
PDF OCR
일부 PDF 문서에는 스캔한 페이지가 포함되어 있으며, 텍스트를 추출하기 전에 광학 문자 인식(OCR)이 필요합니다. OCR의 또 다른 사용 사례는 사용자 정의 글리프-유니코드 매핑을 사용하는 PDF에서 텍스트를 추출하는 것입니다.

스캔한 문서를 OCR 처리하는 방법을 보여주는 블로그 게시물이 있습니다. 이 게시물에는 검색할 수 없는 PDF 예제가 포함되어 있으며, Tesseract OCR, C# 코드, Docotic.Pdf를 사용하여 이미지 전용 PDF에서 텍스트를 인식하는 방법을 보여줍니다. Docotic.Pdf를 사용하여 스캔한 PDF 파일에 OCR 텍스트 레이어를 추가할 수도 있습니다.
페이지 편집
이 섹션에서는 다음과 같은 기존 PDF 페이지의 변경 사항을 다룹니다.
- PDF 페이지를 회전하는 방법
- 페이지 크기를 변경하는 방법
- 페이지 캔버스에서 벡터 그래픽을 사용하는 방법
- HTML 콘텐츠를 추가하는 방법
머리글과 바닥글, 표, 이미지, 텍스트 단락 등의 구성 요소로 PDF 문서를 만드는 방법을 알아보려면 라이브러리의 Layout API를 참조하세요.
다음 사항에 대한 정보는 다른 섹션을 확인하세요.
페이지 회전
PDF에서 한 페이지만 회전하는 방법은 다음 C# 코드 조각을 참조하세요.
using var pdf = new PdfDocument("existing.pdf");
pdf.Pages[0].Rotation = PdfRotation.Rotate180;
pdf.Save("rotated.pdf");
이 코드는 첫 번째 페이지를 180도 회전합니다. PDF 페이지는 0도, 90도, 270도로도 회전할 수 있습니다.
페이지 크기 변경
Docotic.Pdf는 PDF의 페이지 크기를 변경하는 방법을 하나 이상 제공합니다. 가장 간단한 경우에는 PdfPage 객체의 Width 및 Height 속성을 사용하여 원하는 크기를 지정할 수 있습니다. 기존 문서의 경우 문서 페이지 내용의 크기를 조정하지 않습니다. 또한 어떤 콘텐츠도 제거하지 않습니다. 지정한 크기의 사각형 밖에 있는 페이지 콘텐츠만 숨깁니다.
비슷한 접근 방식으로 페이지를 자를 수 있습니다. 다음과 같은 C# 코드로 페이지의 CropBox를 변경할 수 있습니다.
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var cropBoxBefore = page.CropBox;
page.CropBox = new PdfBox(0, cropBoxBefore.Height - 256, 256, cropBoxBefore.Height);
pdf.Save("cropped.pdf");
페이지의 일부를 이미지로 저장하려면 자르기 상자를 변경하는 것이 적합합니다.
다른 크기의 페이지에서 모든 콘텐츠를 보이게 유지하는 것이 목표라면 스케일링 접근 방식을 사용합니다. 다음 코드 조각에서는 페이지에서 XObject를 만듭니다. XObject는 벡터 이미지와 같습니다. 필요에 따라 크기를 조정하고 회전하여 같은 객체를 여러 페이지에 그릴 수 있습니다.
XObject가 준비되면 이전 페이지 콘텐츠를 지우고, 페이지 크기를 조정한 다음, 조정된 페이지에 객체를 그립니다.
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var pageXObject = pdf.CreateXObject(page);
page.Canvas.Clear();
page.Width /= 2;
page.Height /= 2;
page.Canvas.DrawXObject(pageXObject, 0, 0, page.Width, page.Height, 0);
pdf.Save("resized.pdf");
벡터 그래픽
Docotic.Pdf 라이브러리는 선, 곡선, 도형 같은 벡터 그래픽을 PDF 문서에 추가할 수 있습니다. 그래픽 개체로 그래픽 경로를 구성할 수 있습니다. 그런 다음 다양한 색상 공간의 색을 사용하여 경로를 채우거나 윤곽선을 그릴 수 있습니다.
그래픽 관련 기능의 예제 코드는 샘플 코드의 Graphics 그룹에서 찾을 수 있습니다.
PDF에서 그래픽을 추출하는 것도 가능합니다. GetObjects 메서드를 호출한 다음 PdfPageObjectType.Path 형식의 객체에서 정보를 추출하면 됩니다. XObject에도 중첩된 경로가 포함될 수 있다는 점을 잊지 마세요.
using var pdf = new PdfDocument("existing.pdf");
var options = new PdfObjectExtractionOptions();
var objects = pdf.Pages[0].GetObjects(options);
foreach (var obj in objects)
{
if (obj.Type == PdfPageObjectType.Path)
{
var path = (PdfPath)obj;
Console.WriteLine($"Found path {path}");
}
else if (obj.Type == PdfPageObjectType.XObject)
{
var paintedXObject = (PdfPaintedXObject)obj;
var nestedObjects = paintedXObject.XObject.GetObjects(options);
// ...
}
}
PDF 페이지에 HTML 추가
HTML 콘텐츠를 PDF 문서 위에 오버레이하면 차트나 주식 시세 표시기 같은 동적 요소를 PDF에 추가하는 데 유용할 수 있습니다.
더 자세한 내용을 보려면 PDF에 HTML 삽입 방법을 읽고 예제 코드를 다운로드하세요.
PDF 텍스트 편집
이 섹션은 PDF에서 텍스트를 편집하는 방법, PDF에서 텍스트 색을 변경하는 방법, 새 텍스트를 추가하는 방법에 관한 내용입니다.

PDF에서 텍스트를 추출하는 방법에 대한 전용 문서가 있습니다. 이 주제에 대한 더 자세한 정보는 해당 문서를 확인하세요.
텍스트 평면화도 Docotic.Pdf를 사용해 수행할 수 있습니다.
찾기 및 바꾸기
PDF의 텍스트를 수정하려면 텍스트가 포함된 영역을 찾은 다음 해당 영역의 텍스트를 제거해야 합니다. 마지막 단계는 같은 문서 영역에 새 텍스트를 추가하는 것입니다.
PDF 검색은 문서 내부에서 단어가 어떤 순서로든 포함될 수 있기 때문에 까다로울 수 있습니다. 텍스트가 회전되어 있을 수도 있습니다. 다행히도 PDF에서 단어나 구를 검색하는 방법을 보여주는 샘플 코드가 있습니다.
제거할 텍스트의 좌표를 알게 되면, 해당 페이지 콘텐츠를 편집해야 합니다. 라이브러리는 페이지 객체를 열거하고 복사하는 수단을 제공합니다. 따라서 객체를 복사하는 동안 일부 텍스트를 생략할 수 있습니다. 이렇게 하면 텍스트가 사실상 제거됩니다. PDF 페이지 콘텐츠 편집 예제의 코드는 이 과정의 모든 세부 사항을 보여줍니다. 찾은 좌표를 사용하도록 ShouldRemoveText 메서드를 업데이트해야 합니다.
문서에 새 텍스트를 추가하는 방법은 다음 섹션을 참조하세요.
플레이스홀더 텍스트가 포함된 문서를 만든 뒤 나중에 그 플레이스홀더를 다른 텍스트로 바꾸는 경우에는 대신 텍스트 상자를 사용할 수 있습니다.
아이디어는 문서에 테두리가 없는 읽기 전용 텍스트 상자를 추가하고 그 안에 플레이스홀더 텍스트를 넣는 것입니다. 나중에 문서를 열고 이름으로 텍스트 상자를 찾아 box.Text = "new text";라는 간단한 호출로 플레이스홀더를 바꿀 수 있습니다. 이후 추가 변경을 원하지 않으면 교체 후 텍스트 상자를 평면화하세요.
새 텍스트 추가
문서에 텍스트를 추가하려면 PdfCanvas 객체의 DrawString 및 DrawText 메서드를 사용합니다. 이 메서드들은 현재 캔버스 글꼴을 사용합니다. 글꼴에는 텍스트의 모든 문자를 위한 글리프가 포함되어 있어야 합니다. 글꼴이 이 요구 사항을 충족하는지 확인하려면 PdfFont.ContainsGlyphsForText 메서드를 사용합니다.
var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.CreateFont("NSimSun");
canvas.DrawString(10, 50, "Olá. 你好. Hello. This is some new text");
Type1, TrueType, OpenType 글꼴로 그려진 유니코드 텍스트를 추가할 수 있습니다. 라이브러리는 시스템에 설치된 글꼴, 내장된 14개의 Type1 글꼴 또는 파일에서 로드한 필요한 글꼴을 사용할 수 있습니다.
텍스트 색 변경
PDF에서 텍스트 색을 변경하려면 텍스트 제거와 같은 접근 방식을 사용합니다. 샘플 코드에서 최소한 ReplaceColor 메서드는 변경해야 합니다.
이미지 편집
Docotic.Pdf는 PDF 이미지 편집에 필요한 모든 기능을 제공합니다. 아래에는 가장 일반적인 작업에 대한 C# 코드 조각이 있습니다.
이 섹션의 예제에 대한 전체 테스트 프로젝트는 샘플 코드의 이미지 그룹에 포함되어 있습니다.
PDF에 이미지 추가
라이브러리는 GIF/TIFF/PNG/BMP/JPEG 형식의 이미지를 가져올 수 있습니다. System.Drawing.Image 객체에서 이미지를 추가할 수도 있습니다.
var canvas = pdf.Pages[0].Canvas;
var image = pdf.CreateImage("image.jpg");
canvas.DrawImage(image, 10, 50);
DrawImage 메서드의 오버로드를 사용하여 회전 각도와 출력 크기를 지정할 수 있습니다. 같은 이미지를 여러 페이지에 그리려면 이미지를 한 번만 추가하고 여러 DrawImage 호출에서 같은 PdfImage 객체를 사용합니다.
이미지를 PDF로 결합
여러 이미지를 하나의 PDF로 결합하는 방법을 보여주는 C# 코드는 다음과 같습니다.
using var pdf = new PdfDocument();
var imagePaths = new string[] { "image.jpg", "another-image.png" };
foreach (var path in imagePaths)
{
var image = pdf.CreateImage(path);
var page = pdf.AddPage();
page.Width = image.Width;
page.Height = image.Height;
page.Canvas.DrawImage(image, 0, 0);
}
pdf.RemovePage(0);
pdf.Save("combined-images.pdf");
이 코드는 여러 이미지를 PDF에 추가하면서 각 페이지 크기를 해당 이미지 크기에 맞게 변경합니다. 결과를 저장하기 전에, 코드는 암시적으로 추가된 첫 번째 빈 페이지를 제거합니다.
PDF 이미지 추출
Docotic.Pdf는 이미지의 품질을 손상시키지 않고 PDF 파일에서 이미지를 추출하도록 설계되었습니다. 라이브러리는 이미지 크기나 압축 방식을 변경하지 않습니다. PDF와 동일한 품질의 이미지를 얻게 됩니다.
using var pdf = new PdfDocument("file-with-images.pdf");
int i = 0;
foreach (PdfImage image in pdf.GetImages())
{
var path = image.Save($"image{i++}");
Console.WriteLine($"Saved to {path}");
}
이미지 제거 및 교체
PdfPage.RemovePaintedImages 메서드를 사용하면 PDF 페이지에서 모든 이미지 또는 특정 이미지를 제거할 수 있습니다. 위치, 크기, 변환 또는 다른 매개 변수로 이미지를 필터링할 수 있습니다.
using var pdf = new PdfDocument("file-with-images.pdf");
pdf.Pages[0].RemovePaintedImages(
image =>
{
return image.Size.Width > 100;
}
);
pdf.RemoveUnusedResources();
pdf.Save("no-wide-images.pdf");
위 C# 코드는 Docotic.Pdf를 사용하여 이미지를 제거하는 방법을 보여줍니다. 이미지를 변경하거나 제거한 뒤에는 사용되지 않는 리소스를 제거하는 것이 좋습니다.
PdfImage.ReplaceWith 메서드를 사용하여 PDF 문서 내의 이미지 모든 발생을 교체할 수 있습니다.
using var pdf = new PdfDocument("file-with-images.pdf");
var firstImage = pdf.GetImages(false).FirstOrDefault()
?? throw new ArgumentException("No images found");
firstImage.ReplaceWith("another-image.png");
pdf.RemoveUnusedResources();
pdf.Save("replaced-image.pdf");
압축 방식 변경
Docotic.Pdf는 PDF 이미지의 압축을 변경하는 메서드를 제공합니다. JPEG, CCITT Group 3 및 4(fax), JPEG 2000, zip/deflate 압축 알고리즘을 사용하여 이미지를 다시 패키징할 수 있습니다.
초기 압축과 새 압축에 따라 변경으로 인해 이미지의 세부 정보나 품질이 손상될 수 있습니다. 하지만 손실 변환은 일반적으로 문서 크기 줄이기에 도움이 됩니다.
firstImage.RecompressWithJpeg2000(25);
이미지를 다시 패키징하는 다른 메서드도 있습니다. 이름이 RecompressWith로 시작하는 PdfImage 메서드를 확인하세요. Uncompress 메서드를 사용하여 이미지의 모든 압축을 제거할 수 있습니다.
이미지 크기 조정
PDF 문서의 일부 이미지가 필요한 것보다 크다면, 라이브러리가 대신 크기를 조정하거나 축소할 수 있습니다.
firstImage.Scale(0.5, PdfImageCompression.Jpeg2000, 25);
위 코드는 첫 번째 이미지를 가로세로 모두 두 배 더 작게 만듭니다. 라이브러리는 결과 이미지에 JPEG 2000 압축을 사용합니다.
ResizeTo 메서드 중 하나를 사용하여 결과 너비와 높이의 정확한 값을 지정할 수 있습니다.
이미지 크기 조정은 일반적으로 압축 방식을 변경하는 것보다 PDF 파일 크기를 더 줄이지만(위 섹션 참조), 손실이 발생하는 과정입니다.
워터마크 및 배경

PDF 워터마킹은 다음 단계를 포함합니다.
- 워터마크 콘텐츠를 담는 컨테이너인 XObject를 만듭니다.
- 텍스트, 이미지, 벡터 그래픽으로 객체를 채웁니다.
- 객체로 PDF 페이지에 스탬프를 찍습니다.
다음은 PDF에 Confidential 워터마크를 추가하는 C# 코드입니다.
using var pdf = new PdfDocument("existing.pdf");
var watermark = pdf.CreateXObject();
watermark.DrawOnBackground = true;
var canvas = watermark.Canvas;
canvas.FontSize = 72;
canvas.Brush.Color = new PdfRgbColor(222, 35, 35);
canvas.Brush.Opacity = 45;
canvas.Pen.Color = canvas.Brush.Color;
canvas.Pen.Opacity = canvas.Brush.Opacity;
canvas.Pen.Width = 5;
var padding = 10;
var text = "CONFIDENTIAL";
canvas.DrawString(padding, padding, text);
var textSize = canvas.MeasureText(text);
var watermarkRect = new PdfRectangle(
padding, padding, textSize.Width, textSize.Height);
canvas.DrawRoundedRectangle(watermarkRect, new PdfSize(padding, padding));
foreach (var page in pdf.Pages)
{
page.Canvas.DrawXObject(
watermark,
(page.Width - watermarkRect.Width) / 2,
(page.Height - watermarkRect.Height) / 2);
}
pdf.Save("watermarked.pdf");
이 코드는 워터마크 캔버스의 브러시와 펜 속성을 설정합니다. 브러시는 텍스트를 채우는 데 사용됩니다. 텍스트 크기를 확인하기 위해 코드는 텍스트를 측정합니다. 그런 다음 텍스트 주위에 둥근 모서리 사각형을 그립니다. 펜은 사각형의 윤곽선을 그리는 데 사용됩니다.
워터마크 콘텐츠가 준비되면, 코드는 각 페이지의 가운데에 이를 그립니다.
PDF 배경은 워터마크와 매우 비슷합니다. 적어도 거의 같은 방식으로 만들 수 있습니다. PDF에 배경을 추가하려면 위 코드와 동일하게 수행하되, CreateXObject 호출 뒤에 watermark.DrawOnBackground = true;를 추가하세요. 이미지처럼 불투명한 콘텐츠는 배경을 가릴 수 있다는 점에 유의하세요.
주석
Docotic.Pdf는 PDF 주석을 위한 풍부한 API를 제공합니다. PDF 문서에서 주석을 만들고, 편집하고, 제거할 수 있습니다. 주석을 평면화하는 것도 가능합니다.
텍스트에 주석을 추가하는 방법은 다음과 같습니다.
- 스티키 노트 또는 텍스트 주석.
PdfPage클래스의AddTextAnnotation메서드를 참조하세요. - 하이라이트.
AddHighlightAnnotation메서드를 참조하세요. - 취소선.
AddStrikeoutAnnotation메서드를 참조하세요. - 밑줄.
AddJaggedUnderlineAnnotation및AddUnderlineAnnotation메서드를 참조하세요.
링크를 사용하여 한 페이지에서 다른 페이지로 이동하거나 외부 리소스로 이동할 수 있습니다. 잉크 주석을 사용하면 PDF 페이지에 자유롭게 그릴 수 있습니다. 문서에서 제거하도록 지정된 부분에는 마크업 제거 주석을 사용할 수 있습니다. 오디오, 비디오 또는 3D 콘텐츠도 포함할 수 있습니다.
텍스트 강조
PDF 문서에서 텍스트를 강조 표시하는 방법은 다음과 같습니다.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
var canvas = page.Canvas;
canvas.FontSize = 30;
var text = "Highlighted text.";
var position = new PdfPoint(10, 50);
canvas.DrawString(position, text);
canvas.DrawString(" Not highlighted.");
var size = canvas.MeasureText(text);
var bounds = new PdfRectangle(position, size);
var color = new PdfRgbColor(145, 209, 227);
var annotationText = "Please pay attention to this part.";
page.AddHighlightAnnotation(annotationText, bounds, color);
pdf.Save("highlighted.pdf");
링크
PDF에서 특정 페이지로 연결하려면 다음과 같은 코드를 사용합니다.
using var pdf = new PdfDocument();
var secondPage = pdf.AddPage();
secondPage.Canvas.DrawString(10, 50, "Welcome to the second page.");
var firstPage = pdf.Pages[0];
var canvas = firstPage.Canvas;
var linkRect = new PdfRectangle(10, 50, 100, 60);
canvas.DrawRectangle(linkRect, PdfDrawMode.Stroke);
var options = new PdfTextDrawingOptions(linkRect)
{
HorizontalAlignment = PdfTextAlign.Center,
VerticalAlignment = PdfVerticalAlign.Center
};
canvas.DrawText("Go to 2nd page", options);
firstPage.AddLinkToPage(linkRect, 1);
pdf.Save("linked.pdf");
코드에서 동작 영역 주석은 내부 하이퍼링크처럼 작동합니다. 이러한 영역은 외부 리소스로 이동할 수도 있고, 탐색하지 않는 작업도 수행할 수 있습니다.
주석 제거
PDF에서 주석을 제거하려면 다음을 수행합니다.
PdfPage.Widgets속성 또는PdfDocument.GetWidgets메서드를 사용하여 위젯 컬렉션에 접근합니다.- 형식, 속성 또는 기타 기준을 확인하여 더 이상 필요하지 않은 주석을 결정합니다.
PdfDocument.RemoveWidget메서드 또는PdfWidgetCollection객체의 메서드를 사용하여 주석을 제거합니다.
PDF에서 첨부 파일을 제거하려면 파일 주석과 공유 첨부 파일을 모두 제거해야 합니다.
PDF 마스킹
PDF 마스킹 라이브러리로서 Docotic.Pdf는 PDF 문서에서 민감한 정보를 영구적으로 제거하거나 빠르게 검게 가리는 메서드를 제공합니다.

텍스트 마스킹
Redact 도구 없이, C#과 Docotic.Pdf만 사용하여 PDF의 텍스트를 검게 가리는 방법은 다음과 같습니다.
int i = 0;
foreach (var page in pdf.Pages)
{
foreach (var word in page.GetWords())
{
if (i % 3 == 0)
{
page.Canvas.AppendRectangle(word.Bounds);
page.Canvas.FillPath(PdfFillMode.Winding);
}
i++;
}
}
이 코드는 문서의 세 번째 단어마다 검은 사각형을 그립니다. 사각형 뒤의 텍스트는 문서에 그대로 남아 있으며 나중에 추출할 수 있다는 점에 유의하세요. 텍스트를 영구적으로 제거하려면 텍스트 바꾸기 섹션의 접근 방식을 사용합니다.
이미지 마스킹
검은 사각형을 사용하여 이미지를 가릴 수도 있습니다. 하지만 더 쉬운 방법은 이미지를 검은 1x1 픽셀 이미지로 교체하는 것입니다. 이렇게 하면 마스킹된 이미지를 시각적으로 강조할 뿐 아니라 원본 이미지 데이터도 제거됩니다.
코드 예제는 이미지 제거 및 교체 섹션을 참조하세요. 교체 후 PdfDocument.ReplaceDuplicateObjects 메서드를 호출하는 것도 권장합니다.
PDF 폼
Docotic.Pdf는 버튼, 체크박스, 드롭다운 목록, 목록 상자, 라디오 버튼, 텍스트 필드 같은 모든 종류의 상호 작용 요소를 사용하여 Acroforms(PDF 폼의 다른 이름)를 만들 수 있습니다.
보통 폼 필드를 추가하고 설정하는 데 몇 줄의 코드만 있으면 됩니다. 예를 들어, PdfPage.AddTextBox 메서드를 호출하는 것만으로 PDF에 편집 가능한 필드를 추가할 수 있습니다. Forms and Annotations 그룹의 샘플 코드는 폼 생성 및 사용에 대한 더 많은 정보를 제공합니다.
PDF 폼 작성 방법
PdfDocument.TryGetControl 메서드를 사용하여 전체 또는 일부 이름으로 PDF 컨트롤을 검색합니다. 또는 GetControls 메서드를 사용하여 문서의 모든 컨트롤을 열거할 수도 있습니다. 두 방법 모두 결과를 예상되는 필드 형식으로 캐스팅해야 합니다.
using var pdf = new PdfDocument(@"example-form.pdf");
if (pdf.TryGetControl("txt-name", out var c) && c is PdfTextBox nameTextBox)
nameTextBox.Text = "Bit Miracle team";
if (pdf.TryGetControl("txt-email", out c) && c is PdfTextBox emailTextBox)
emailTextBox.Text = "support@bitmiracle.com";
if (pdf.TryGetControl("check-agree", out c) && c is PdfCheckBox agreeCheckBox)
agreeCheckBox.Checked = true;
pdf.Save("filled-form.pdf");
이 코드는 이 PDF 폼 예제를 사용합니다. 코드에서는 두 텍스트 필드에 값을 설정하고 체크박스를 선택합니다.
폼 작성이 끝나면 모든 필드를 평면화할 수 있습니다.
폼에서 JavaScript 사용
컨트롤 이벤트에 동작을 추가할 수 있습니다. PdfControl 클래스는 미리 정의된 이벤트 집합에 접근할 수 있게 합니다. 이벤트 이름은 "On"으로 시작합니다(예: OnMouseDown).
PDF 폼에서 JavaScript를 사용하는 예제는 다음과 같습니다.
using var pdf = new PdfDocument(@"example-form.pdf");
foreach (var field in pdf.GetControls())
field.OnChange = pdf.CreateJavaScriptAction($"app.alert('{field.Name} changed!',3)");
pdf.Save("javascript-events.pdf");
Forms Data Format
PDF를 전자적으로 작성하는 또 다른 방법이 있습니다. 라이브러리의 FDF to PDF 기능을 사용하여 데이터베이스나 다른 소스에서 PDF 폼을 자동으로 채울 수 있습니다.
using var pdf = new PdfDocument(@"example-form.pdf");
pdf.ImportFdf("form-data.fdf");
pdf.Save("auto-populated.pdf");
이 코드는 이 FDF 파일을 사용하여 모든 폼 필드를 한 번에 채웁니다.
PDF 평면화
이 섹션은 PDF를 평면화하는 방법에 관한 내용입니다.

PDF를 평면화할 때는 폼과 주석 같은 상호 작용 요소를 정적 콘텐츠로 변환하여 추가 편집을 방지합니다. 평면화된 PDF는 모양은 같으면서도 훨씬 적은 바이트를 차지할 수 있습니다.
폼과 주석 평면화
작성 가능한 PDF를 평면화하려면 PdfDocument.FlattenControls 메서드를 사용합니다. 이 메서드는 모든 폼 필드와 기타 컨트롤을 부모 페이지에 그려서 원본 컨트롤을 문서에서 제거합니다.
PDF 폼을 평면화할 때는 주석도 평면화하는 것이 좋습니다. PdfDocument.FlattenWidgets 메서드를 사용하면 컨트롤과 주석을 동시에 평면화할 수 있습니다.
일부 컨트롤 및/또는 주석만 시각적 표현으로 변환하려면 PdfWidget.Flatten 메서드를 사용합니다. 먼저 필요한 컨트롤을 찾아야 합니다.
텍스트 평면화
Docotic.Pdf를 사용하여 PDF 텍스트를 윤곽선으로 변환할 수 있습니다. 일반적으로 이것은 글꼴 독립성을 얻기 위한 것입니다. 글꼴이 설치되어 있는지 여부와 상관없이 평면화된 텍스트는 어떤 장치에서도 동일하게 보입니다.
하지만 텍스트를 윤곽선으로 변환하면 더 이상 텍스트로 편집할 수 없습니다. 또한 평면화 과정에서 라이브러리는 텍스트를 벡터 그래픽으로 변환합니다. 이로 인해 파일 크기가 증가할 수 있습니다.
PDF 텍스트를 평면화하려면 텍스트를 벡터 경로로 추출하여 새 페이지나 같은 페이지에 복사해야 합니다. 이를 위한 샘플 코드가 있습니다.
저장 옵션
위의 코드 조각에서는 추가 인수 없이 PdfDocument.Save 메서드를 사용했습니다. 이 경우 라이브러리는 기본 저장 옵션을 사용합니다. 기본값은 일반적인 경우에 잘 동작하도록 선정했습니다.
그럼에도 불구하고 기본 옵션을 재정의해야 하는 경우가 있습니다. 이를 위해 PdfSaveOptions 객체를 만들고 옵션을 설정한 다음 저장 메서드 중 하나에 전달합니다. 아래에서 그런 경우를 설명합니다.
암호나 인증서로 PDF를 보호하려면 암호화 핸들러를 만들고 EncryptionHandler 속성에 설정합니다.
같은 PDF에 여러 번 서명하려면 WriteIncrementally 속성을 true로 설정하여 증분 업데이트 모드를 켭니다. 이전에 서명된 파일을 새 주석이나 폼 데이터와 함께 저장할 때도 동일하게 합니다.
Linearize 속성을 true로 설정하면 선형화된(Fast Web View 최적화된) PDF 파일이 생성됩니다. 이 최적화를 인식하는 뷰어는 이러한 파일을 더 빠르게 표시할 수 있습니다.
일부 메타데이터 필드의 저장 시 변경을 방지하려면 UpdateProducer 및 UpdateModifiedDate 속성을 false로 설정합니다.