문서 관리
문서 관리
Document은 .NET용 Aspose.PDF FOSS의 루트 객체이며,
전체 PDF 파일을 나타내고 페이지, 메타데이터, 양식 필드 및 모든
다른 PDF 구조에 접근할 수 있습니다. 기존 파일은 Document.Open으로 열고 새
파일은 Document 생성자를 사용하여 만들 수 있습니다.
문서 열기 및 만들기
// Open from a byte array
using var doc = Document.Open(File.ReadAllBytes("input.pdf"));
// Open from a file path
using var doc2 = new Document("input.pdf");
// Create a new empty document
using var newDoc = new Document();
newDoc.Pages.Add();
newDoc.Save("new.pdf");페이지 작업
PageCollection은(는) 문서의 페이지를 관리합니다. 1부터 시작하는 인덱스로 페이지에 접근하고, 새 페이지를 추가하거나 기존 페이지를 제거할 수 있습니다.
using var doc = Document.Open(pdfBytes);
// Access first page
var page = doc.Pages[1];
// Add a blank page
var newPage = doc.Pages.Add();
// Get page count
int count = doc.Pages.Count;페이지 기하학
각 페이지는 여러 개의 경계 상자를 정의합니다. Page의 설정자 메서드를 사용하여 이를 조정하십시오.
var page = doc.Pages[1];
page.SetMediaBox(new Rectangle(0, 0, 612, 792));
page.SetCropBox(new Rectangle(36, 36, 576, 756));
page.SetRotation(90);문서 저장
파일 경로, 스트림 또는 바이트 배열에 저장합니다.
// Save to file
doc.Save("output.pdf");
// Save to stream
using var ms = new MemoryStream();
doc.Save(ms);파일 첨부
FileSpecification는 PDF의 임베디드 파일 첨부를 나타냅니다.
var spec = new FileSpecification("data.csv", "Embedded data file");
doc.EmbeddedFiles.Add(spec);이미지 스탬프
ImageStamp 지정된 위치에 페이지에 래스터 이미지를 오버레이합니다.
var stamp = new ImageStamp("logo.png");
stamp.Put(doc.Pages[1]);
doc.Save("stamped.pdf");연산자 컬렉션
OperatorCollection는 각 페이지에서 원시 콘텐츠 스트림 연산자를 보유합니다. 저수준 콘텐츠 검사 또는 조작에 사용하십시오.
var ops = doc.Pages[1].Contents;
foreach (var op in ops)
{
// Inspect each operator
}팁 및 모범 사례
- 파일 핸들을 즉시 해제하려면
Document를using문으로 감싸세요. - 파일 잠금 문제를 피하기 위해 인메모리 워크플로에
Document.Open(byte[])를 사용하세요. - 올바른 좌표 공간을 보장하려면 콘텐츠를 추가하기 전에 페이지 박스(MediaBox, CropBox)를 수정하세요.
- 모든 수정이 끝난 후에
Save를 한 번만 호출하세요 — 반복 저장은 느리지만 안전합니다. - 전체 페이지에 걸쳐 주석을 일괄 처리하려면
PageCollection.Accept(AnnotationSelector)를 사용하세요.
일반적인 문제
| Issue | Cause | Fix |
|---|---|---|
Document.Open이(가) 유효한 PDF에서 예외 발생 | 파일이 비밀번호로 암호화됨 | 생성자에 password 매개변수를 제공 |
| 구성을 한 후 페이지 수가 0임 | 새 Document()이 비어 있음 | doc.Pages.Add()을 호출하여 빈 페이지를 추가 |
| 저장된 파일이 예상보다 큼 | 이미지 또는 글꼴이 여러 번 포함됨 | 최적화를 사용 (Conversion and Optimization 가이드 참조) |
Pages[0]이(가) 인덱스 오류를 발생 | 페이지 번호는 0이 아니라 1부터 시작 | 첫 페이지에 Pages[1] 사용 |
자주 묻는 질문
두 개의 PDF 문서를 병합하려면 어떻게 해야 하나요?
Facades API의 PdfFileEditor.Concatenate를 사용하거나, PageCollection를 사용하여 한 문서에서 다른 문서로 페이지를 수동으로 복사하십시오.
URL 또는 스트림에서 PDF를 열 수 있나요?
예. URL 내용을 먼저 byte[]에 읽은 다음,
Document.Open(byte[])에 전달하십시오.
페이지를 삭제하려면 어떻게 해야 하나요?
doc.Pages.Delete(pageNumber)를 호출하고, pageNumber은 1 기반입니다.
Document는 스레드 안전합니까?
아니요. 각 스레드는 자체 Document 인스턴스를 사용해야 합니다.
API 참조 요약
| Class / Method | Description |
|---|---|
Document | 루트 PDF 객체; 페이지, 메타데이터 및 양식 필드를 보유함 |
Document.Open | 바이트 배열에서 PDF를 열기 위한 정적 팩터리 |
Document.Save | 문서를 파일 또는 스트림에 직렬화 |
Page | 콘텐츠, 주석 및 기하학이 포함된 단일 PDF 페이지 |
Page.SetMediaBox | 페이지 미디어 박스 정의 |
Page.SetCropBox | 보이는 잘라내기 영역 정의 |
Page.SetRotation | 페이지를 0, 90, 180, 또는 270도 회전 |
PageCollection | 문서 내 페이지의 순서가 지정된 컬렉션 |
PageCollection.Add | 빈 페이지 추가 |
OperatorCollection | 페이지에 대한 원시 콘텐츠 스트림 연산자 |
FileSpecification | 임베디드 파일 첨부 설명자 |
ImageStamp | 페이지용 이미지 오버레이 스탬프 |
XFormCollection | 문서 내 재사용 가능한 폼 XObject |