C#에서 PDF 주석을 추가하고 편집하는 방법

C#에서 PDF 주석을 추가하고 편집하는 방법

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF를 사용하면 C# 개발자가 AddTextAnnotation과 같은 간단한 API 호출을 통해 텍스트 주석 및 메모를 포함한 PDF 주석을 추가, 편집 및 제거할 수 있어, 비즈니스 애플리케이션에서 문서 협업 및 검토 워크플로우를 강화합니다. X

주석 기능을 사용하면 사용자가 문서의 특정 부분에 댓글, 알림 또는 추가 정보를 추가할 수 있습니다. PDF 작업 시 협업 및 의사소통을 향상시켜 사용자가 공유 콘텐츠에 주석을 달고, 댓글을 달고, 맥락을 제공할 수 있도록 합니다. Y

PDF 주석은 비즈니스 워크플로에서 다양한 용도로 사용됩니다. 검토자는 문서에 피드백을 표시할 수 있고, 팀은 원본 콘텐츠를 수정하지 않고 계약서에 대해 협업할 수 있으며, 품질 보증 팀은 기술 문서의 문제를 표시할 수 있습니다. 문서 관리 시스템을 구축하든 기존 PDF 워크플로를 개선하든, IronPDF의 주석 기능은 C# PDF 생성편집 기능 과 완벽하게 통합됩니다. 주석 기능과 더불어 고급 보안 기능이 필요한 조직이라면, 당사의 종합적인 PDF 보안 튜토리얼을 참조하십시오.

빠른 시작: IronPDF를 사용하여 PDF에 주석 추가하기

이 간편 가이드에서는 C#을 사용하여 IronPDF로 PDF 문서에 텍스트 주석을 추가하는 방법을 보여줍니다. 개발자는 단 몇 줄의 코드로 PDF에 주석이나 메모를 추가하여 문서의 상호 작용성과 협업 기능을 향상시킬 수 있습니다. 귀하의 PDF를 로드하고 AddTextAnnotation 메소드를 사용하여 빠르게 주석을 삽입하십시오.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronPdf 설치하기

    PM > Install-Package IronPdf
  2. 다음 코드 조각을 복사하여 실행하세요.

    PdfDocument.FromFile("input.pdf")
        .Annotations.Add(new TextAnnotation(0) { Title="Note", Contents="Review this section.", X=50, Y=700 })
        .SaveAs("annotated.pdf");
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronPDF 사용 시작하기

    arrow pointer


PDF에 주석을 추가하는 방법은 무엇인가요?

Annotations Title Contents X Y

PDF 주석 기능을 사용하면 PDF 페이지에 "포스트잇"과 같은 간단한 메모를 추가할 수 있습니다. Annotations 속성의 Add 메소드를 사용하여 프로그래밍 방식으로 주석을 추가할 수 있습니다.

PDF 파일의 텍스트 주석은 실제 문서에 붙이는 포스트잇과 유사한 기능을 합니다. 페이지에 작은 아이콘 형태로 나타나며, 클릭하면 전체 댓글 내용이 표시됩니다. 이러한 비침해적 접근 방식은 필수적인 피드백 메커니즘을 제공하면서도 문서의 가독성을 유지합니다. HTML을 PDF로 변환 할 때, 변환 후 주석을 추가하여 검토가 필요한 영역을 표시하거나 추가적인 맥락을 제공할 수 있습니다. 이 기능은 특히 추가적인 설명이 필요한 동적 콘텐츠에 대해 JavaScript 렌더링 과 결합될 때 유용합니다.

모든 페이지 인덱스는 0부터 시작하는 인덱싱을 따릅니다.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-add-annotation.cs
using IronPdf;
using IronPdf.Annotations;

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

// Create a PDF annotation object on a specified page index
TextAnnotation annotation = new TextAnnotation(0)
{
    Title = "This is the title",
    Contents = "This is the long 'sticky note' comment content...",
    X = 50,
    Y = 700,
};

// Add the annotation
pdf.Annotations.Add(annotation);
pdf.SaveAs("annotation.pdf");
Imports IronPdf
Imports IronPdf.Annotations

Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Annotation</h1>")

' Create a PDF annotation object on a specified page index
Dim annotation As New TextAnnotation(0) With {
    .Title = "This is the title",
    .Contents = "This is the long 'sticky note' comment content...",
    .X = 50,
    .Y = 700
}

' Add the annotation
pdf.Annotations.Add(annotation)
pdf.SaveAs("annotation.pdf")
$vbLabelText   $csharpLabel

TextAnnotation 클래스는 사용자 정의를 위한 여러 속성을 제공합니다:

  • Title: 주석의 헤더 텍스트 (일반적으로 주석 팝업에 표시됨)
  • Contents: 주석의 본문 텍스트
  • X, Y: 주석 아이콘이 페이지 상에 나타날 위치를 지정하는 좌표
  • PageIndex: 주석이 위치할 페이지의 0부터 시작하는 페이지 번호

보다 복잡한 문서 워크플로의 경우, 주석 기능을 승인 프로세스를 위한 디지털 서명 이나 문서 버전 관리를 위한 워터마킹 과 같은 IronPDF의 다른 기능과 결합하는 것을 고려해 보세요. 민감한 문서를 다룰 때는 주석 기능을 PDF 권한 및 암호 와 연동하여 누가 주석을 보거나 수정할 수 있는지 제어할 수도 있습니다.

텍스트 주석에 설정할 수 있는 속성은 무엇인가요?

TextAnnotation 클래스는 기본적인 것 외에도 사용자 정의를 위한 여러 속성을 제공합니다:

  • Title: 주석의 헤더 텍스트 (일반적으로 주석 팝업에 표시됨)
  • Contents: 주석의 본문 텍스트
  • X, Y: 주석 아이콘이 페이지 상에 나타날 위치를 지정하는 좌표
  • PageIndex: 주석이 위치할 페이지의 0부터 시작하는 페이지 번호
  • Subject: 주석 카테고리를 위한 선택적인 주제 라인
  • Icon: 주석의 시각적 표현 (예: 메모, 주석, 도움말)
  • Open: 주석 팝업이 기본적으로 열려 있는지 여부

이러한 속성을 통해 개발자는 문서의 의사소통을 향상시키는 풍부하고 맥락에 맞는 주석을 생성할 수 있습니다. 다양한 문서 유형을 사용하는 고급 워크플로의 경우, 서로 다른 소스 형식 간에 주석을 유지하기 위해 RTF를 PDF로 변환 하거나 Markdown을 PDF로 변환하는 방법을 고려해 보세요.

PDF 주석에서 좌표는 어떻게 작동하나요?

PDF 좌표는 페이지의 왼쪽 하단 모서리에서 시작하는데, 이는 왼쪽 상단을 시작점으로 사용하는 많은 UI 프레임워크와는 다른 점입니다. 페이지 상에 주석 아이콘이 나타날 위치를 측정단위 포인트(1/72 인치)로 결정하는 XY 속성 주석을 프로그래밍 방식으로 배치할 때 좌표 계산에 이러한 차이를 고려해야 합니다.

주석 위치를 계산할 때 표준 미국 레터 용지 크기는 8.5 x 11인치(612 x 792포인트)임을 기억하십시오. A4 용지 크기는 595 x 842포인트입니다. 정확한 위치 지정을 위해 주석을 배치하기 전에 프로그램적으로 페이지 크기를 가져오는 것이 좋습니다. 이는 특히 사용자 지정 용지 크기를 사용하거나 콘텐츠에 따라 반응형 주석 배치를 구현할 때 중요해집니다.

주석이 포함된 PDF

위 PDF 문서의 주석은 Chrome 브라우저에서 볼 수 있습니다.


기존 주석을 불러오고 편집하려면 어떻게 해야 하나요?

PDF 주석을 검색하고 편집하면 명확성, 정확성 및 사용 편의성이 향상되어 협업이 개선됩니다. Annotations 속성을 통해 주석 컬렉션에 접근하고 Header, Body, X, Y 등의 속성을 새 정보로 업데이트하십시오.

기존 PDF 파일, 특히 URL 변환 이나 DOCX 파일 가져오기를 통해 생성된 PDF 파일을 작업할 때 다른 사용자나 시스템에서 추가한 주석을 수정해야 할 수 있습니다. IronPDF는 주석 모음에 대한 전체 액세스 권한을 제공하므로 특정 주석을 프로그래밍 방식으로 반복, 식별 및 업데이트할 수 있습니다. 이 기능은 문서 검토 워크플로를 구현하거나 기존 문서 관리 시스템과 통합할 때 필수적입니다.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-edit-annotation.cs
using IronPdf;
using IronPdf.Annotations;
using System.Linq;

PdfDocument pdf = PdfDocument.FromFile("annotation.pdf");

// Retrieve annotation collection
PdfAnnotationCollection annotationCollection = pdf.Annotations;

// Select the first annotation
TextAnnotation annotation = (TextAnnotation)annotationCollection.First();

// Edit annotation
annotation.Title = "New title";
annotation.Contents = "New content...";
annotation.X = 150;
annotation.Y = 800;

pdf.SaveAs("editedAnnotation.pdf");
Imports IronPdf
Imports IronPdf.Annotations
Imports System.Linq

Private pdf As PdfDocument = PdfDocument.FromFile("annotation.pdf")

' Retrieve annotation collection
Private annotationCollection As PdfAnnotationCollection = pdf.Annotations

' Select the first annotation
Private annotation As TextAnnotation = CType(annotationCollection.First(), TextAnnotation)

' Edit annotation
annotation.Title = "New title"
annotation.Contents = "New content..."
annotation.X = 150
annotation.Y = 800

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

편집 과정은 다른 모든 문서 속성과 내용을 유지하면서 지정된 주석만 수정하도록 합니다. 이 기능은 문서 수정이나 변경된 요구 사항에 따라 주석을 업데이트해야 할 수 있는 검토 워크플로에서 특히 유용합니다. 포괄적인 문서 관리를 위해 주석 편집과 메타데이터 조작을 결합하여 문서 버전 및 수정 이력을 추적하는 것을 고려해 보세요.

기존 주석을 수정해야 하는 이유는 무엇인가요?

공동 작업 문서 워크플로에서 주석 편집은 필수적인 기능이 됩니다. 수정 사항에 따라 피드백을 업데이트하거나, 모호한 의견에 대한 설명이 필요하거나, 콘텐츠 변경으로 인해 주석의 위치를 ​​변경해야 하는 경우에 유용합니다. 이 기능은 문서 검토가 개정 주기 전반에 걸쳐 최신 상태를 유지하고 관련성이 있도록 보장합니다.

기업 환경에서 주석 편집은 종종 승인 워크플로와 통합되는데, 이 경우 관리자는 최종 승인 전에 검토자의 의견을 수정해야 할 수 있습니다. 또한 문서가 번역 또는 현지화 과정을 거칠 때, 언어 변경이나 문화적 적응을 반영하기 위해 주석을 업데이트해야 할 수도 있습니다. 이러한 시나리오에서 IronPDF의 UTF-8 및 국제 언어 지원은 다양한 언어 및 문자 집합에서 주석이 올바르게 표시되도록 보장합니다.

주석을 편집할 때 다른 문서 속성은 어떻게 되나요?

편집 과정은 다른 모든 문서 속성과 내용을 유지하면서 지정된 주석만 수정하도록 합니다. 문서 구조, 서식, 포함된 리소스 및 기타 주석은 변경되지 않으므로 PDF의 무결성을 유지하면서 특정 검토 의견에 대한 대상별 업데이트가 가능합니다.

이러한 선택적 편집 방식은 문서의 무결성을 유지하는 데 매우 중요하며, 특히 문서 변조를 방지해야 하는 규제 산업에서 더욱 그렇습니다. 이 과정은 디지털 서명, 양식 필드, 책갈피 및 기타 모든 PDF 기능을 보존합니다. 감사 추적이 필요한 문서의 경우, 주석 수정과 함께 개정 내역 추적 기능을 구현하는 것을 고려해 보세요.

편집된 주석이 포함된 PDF

위 PDF 문서의 주석은 Chrome 브라우저에서 볼 수 있습니다.


Icon Quote related to 편집된 주석이 포함된 PDF

이 종류의 라이브러리 중 가장 좋아하는 것은 IronPDF입니다. PDF 파일을 빠르고 효율적으로 조작할 수 있습니다. 또한 PDF/A 형식으로 내보내기 및 PDF 문서의 디지털 서명과 같은 많은 유용한 기능을 가지고 있습니다.

Milan Jovanovic related to 편집된 주석이 포함된 PDF

Milan Jovanovic

마이크로소프트 MVP

사례 연구 보기
Icon Quote related to 편집된 주석이 포함된 PDF

IronOCR 덕분에 연간 $40,000를 수동 프로세싱에서 절약하고 생산성을 높이며 고부가가치 작업에 자원을 활용할 수 있습니다. 강력히 추천합니다.

Brent Matzelle related to 편집된 주석이 포함된 PDF

브렌트 마첼

최고 기술 책임자, OPYN

사례 연구 보기
Icon Quote related to 편집된 주석이 포함된 PDF

IronSuite는 우리의 운영에서 중요한 역할을 합니다. 이것들은 사업 전반에 걸쳐 효율성을 높이는 도구로, 평면도 생성 및 재고 관리 개선을 포함합니다.

David Jones related to 편집된 주석이 포함된 PDF

데이비드 존스

리드 소프트웨어 엔지니어, Agorus Build

사례 연구 보기

PDF 문서에서 주석을 제거하려면 어떻게 해야 하나요?

다음 메소드 RemoveAt, RemoveAllAnnotationsForPage, Clear를 사용하여 불필요하거나 구식인 주석을 제거하십시오.

  • RemoveAt: 지정된 인덱스의 단일 주석 제거
  • RemoveAllAnnotationsForPage: 지정한 페이지의 모든 주석 제거
  • Clear: 문서의 모든 주석 제거

주석 제거는 문서 최종본 작성에 매우 중요합니다. 피드백을 반영하고 필요한 변경 사항을 적용한 후에는 최종 버전을 배포하기 전에 검토 댓글을 정리하는 것이 좋습니다. 이 프로세스는 PDF 압축 과 같은 IronPDF의 다른 기능과 잘 통합되어 배포에 적합한 깔끔하고 최적화된 문서를 생성합니다. 장기 보존이 필요한 문서의 경우, 주석을 제거한 후 PDF/A 형식 으로 변환하여 장기 보존 규정을 준수하는 것을 고려하십시오.

특정 주석 하나만 삭제하려면 어떻게 해야 하나요?

단일 주석을 제거하려면 해당 주석 컬렉션 인덱스를 기반으로 인덱스를 사용하여 RemoveAt 메소드를 사용하십시오.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-remove-single-annotation.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("multipleAnnotation.pdf");

// Remove a single annotation with specified index
pdf.Annotations.RemoveAt(1);

pdf.SaveAs("removeSingleAnnotation.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("multipleAnnotation.pdf")

' Remove a single annotation with specified index
pdf.Annotations.RemoveAt(1)

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

어노테이션을 프로그램적으로 제거할 때는 어노테이션 컬렉션이 제거될 때마다 다시 인덱싱된다는 점을 이해하는 것이 중요합니다. 여러 개의 특정 주석을 제거해야 하는 경우, 전체 주석 모음을 역순으로 살펴보거나 제거할 주석을 먼저 수집한 다음 역순으로 제거하세요. 이 접근 방식은 잘못된 주석이 제거되는 결과를 초래할 수 있는 인덱스 이동 문제를 방지합니다.

PDF에서 주석 하나를 제거했습니다.

위 PDF 문서의 주석은 Chrome 브라우저에서 볼 수 있습니다.

모든 주석을 한 번에 삭제하려면 어떻게 해야 하나요?

특정 페이지에 있는 모든 주석을 제거하려면 RemoveAllAnnotationsForPage 메소드를 사용하고 페이지 인덱스를 지정하십시오. 전체 문서에 있는 모든 주석을 제거하고 싶다면, Clear 메소드를 Annotations 속성에서 호출하세요.

이러한 일괄 삭제 기능은 최종 배포를 위해 문서를 준비하거나 이전 검토 주기의 주석을 제거해야 하는 문서 버전 관리 시스템을 구현할 때 특히 유용합니다. 문서 속성을 업데이트하고 검토 상태를 표시하기 위해 메타데이터 편집 기능을 함께 사용하는 것을 고려해 보세요. 정화된 문서가 필요한 워크플로우의 경우, 주석을 포함하여 잠재적으로 민감한 모든 정보를 제거하는 [PDF 정화](https://ironpdf.com/how to sanitize-pdf/) 옵션을 탐색하세요.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-remove-all-annotation.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("multipleAnnotation.pdf");

// Remove all annotaions on a specified page
pdf.Annotations.RemoveAllAnnotationsForPage(0);

// Remove all annotaions on the document
pdf.Annotations.Clear();

pdf.SaveAs("removeAllAnnotation.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("multipleAnnotation.pdf")

' Remove all annotaions on a specified page
pdf.Annotations.RemoveAllAnnotationsForPage(0)

' Remove all annotaions on the document
pdf.Annotations.Clear()

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

일괄 주석 삭제는 언제 사용해야 할까요?

일괄 삭제는 배포용 문서를 최종 확정하거나, 보관용으로 깔끔한 버전을 만들거나, 이전 검토 주기의 주석을 지워야 하는 문서 버전 관리를 구현할 때 이상적입니다. 이 접근 방식은 주석을 개별적으로 제거하는 것보다 시간을 절약하고 검토 댓글이 프로덕션 문서에 실수로 남아 있지 않도록 보장합니다.

또한, 주석을 제대로 처리하지 못할 수 있는 자동 처리 시스템용 문서를 준비하거나 주석이 포함된 PDF를 다른 형식으로 변환할 때 일괄 제거는 필수적입니다. 보안 수준이 높은 환경에서는 배포 전에 모든 주석을 제거하여 내부 검토 의견이나 외부 공개를 의도하지 않은 민감한 피드백이 실수로 유출되는 것을 방지할 수 있습니다.


PFD에 클릭 가능한 내부 링크를 어떻게 추가합니까?

LinkAnnotation DestinationType Hidden

LinkAnnotation 클래스는 클릭시 동일한 PDF 내의 다른 페이지로 이동하는 페이지 상의 클릭 가능한 사각형을 만듭니다. 이는 사용자 정의 색인, 상호 참조, '맨 위로 돌아가기' 버튼 및 문서 내 네비게이션을 구축하는 데 이상적입니다. TextAnnotation처럼, LinkAnnotationAnnotations.Add 메소드를 통해 추가되므로, 코멘트 및 스티키 노트에 이미 사용하고 있는 동일한 컬렉션과 통합됩니다.

X, Y, WidthHeight으로 위치가 설정됩니다 (포인트 단위, 72 포인트 = 1 인치), 또는 Rectangle를 직접 할당하여 설정할 수 있습니다. 링크가 있는 페이지와 대상 페이지는 생성자에서 0부터 시작하는 인덱스로 지정됩니다.

X, Y, WidthHeight이 모두 -1을 반환합니다. 설정하시기전까지. 설정하지 않으면 잘못된 주석이 생성되므로, 항상 클릭 가능한 영역을 할당하세요.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-link-basic.cs
using IronPdf;
using IronPdf.Annotations;

// Load an existing multi-page PDF
PdfDocument pdf = PdfDocument.FromFile("multipage.pdf");

// Create a clickable link on page 1 (index 0) that jumps to page 6 (index 5).
// Page indexes are zero-based. The default DestinationType (Page) fits the
// whole destination page in the viewer when the link is clicked.
LinkAnnotation link = new LinkAnnotation(pageIndex: 0, destinationPageIndex: 5)
{
    X = 72,        // points from the LEFT edge of the page (72 points = 1 inch)
    Y = 700,       // BOTTOM edge of the clickable area (PDF origin is bottom-left)
    Width = 200,
    Height = 20,
    Contents = "Go to Chapter 6"
};

// LinkAnnotation lives in the same collection as TextAnnotation
pdf.Annotations.Add(link);
pdf.SaveAs("internal-link.pdf");
Imports IronPdf
Imports IronPdf.Annotations

' Load an existing multi-page PDF
Dim pdf As PdfDocument = PdfDocument.FromFile("multipage.pdf")

' Create a clickable link on page 1 (index 0) that jumps to page 6 (index 5).
' Page indexes are zero-based. The default DestinationType (Page) fits the
' whole destination page in the viewer when the link is clicked.
Dim link As New LinkAnnotation(pageIndex:=0, destinationPageIndex:=5) With {
    .X = 72,        ' points from the LEFT edge of the page (72 points = 1 inch)
    .Y = 700,       ' BOTTOM edge of the clickable area (PDF origin is bottom-left)
    .Width = 200,
    .Height = 20,
    .Contents = "Go to Chapter 6"
}

' LinkAnnotation lives in the same collection as TextAnnotation
pdf.Annotations.Add(link)
pdf.SaveAs("internal-link.pdf")
$vbLabelText   $csharpLabel

배치 외에, 몇 가지 속성이 외관과 메타데이터를 제어합니다: Color는 링크의 테두리 색상을 설정하고, Contents는 설명 텍스트나 툴팁을 제공합니다. Title은 주석의 이름을 지정합니다. 기존 콘텐츠에 보이지 않는 클릭 오버레이를 만들려면 Color를 설정하지 말고 Hidden = true을 설정하세요. (이 가이드의 후반부에서 보여드릴 것입니다.)

링크 주석과 텍스트 주석의 차이점은 무엇입니까?

TextAnnotation은 '스티키 노트'입니다: 클릭시 텍스트가 표시되는 주석 아이콘입니다. LinkAnnotation은 탐색 컨트롤입니다. 보이지 않거나 테두리가 있는 클릭 가능한 영역으로 독자를 대상 페이지로 이동시킵니다. 둘 다 Annotations 컬렉션과 Add, RemoveAt, RemoveAllAnnotationsForPageClear 작업을 공유하므로, 동일 문서에 주석과 탐색 링크를 혼합하여 관리할 수 있습니다.

LinkAnnotation은 동일 파일 내의 페이지를 대상으로 하기 때문에 IronPDF의 개요 및 북마크 (뷰어의 사이드바 네비게이션 트리 구축) 및 자동 생성된 목차 기능과 HTML-to-PDF 렌더링 시 결합됩니다. 사이드바에는 북마크를, 렌더된 HTML에는 TOC 기능, LinkAnnotation는 기존 PDF에 클릭 가능한 핫스팟이 필요한 경우 사용합니다.

독자가 목적지에서 볼 내용을 어떻게 제어할 수 있습니까?

DestinationType 속성은 링크 클릭 시 대상 페이지가 표시되는 방식을 제어하기 위해 기존 BookmarkDestinations 열거형을 사용합니다. 기본값은 BookmarkDestinations.Page으로, 전체 대상 페이지를 창에 맞춥니다. 다른 값들은 DestinationTop, DestinationLeft, DestinationRight, DestinationBottomDestinationZoom 좌표를 사용하여 위치로 스크롤하거나, 줌 수준을 설정하거나, 특정 사각형에 맞출 수 있습니다.

BookmarkDestinations 클릭 시 행동 사용된 목적지 좌표
Page (기본값) 창에 전체 대상 페이지를 맞춥니다. none
PageY 수직 위치로 스크롤합니다; 전체 너비를 보여줍니다. DestinationTop
PageX 수평 위치로 스크롤합니다; 전체 높이를 보여줍니다. DestinationLeft
PageZoom 위치에 가서 줌 수준을 설정합니다. DestinationLeft, DestinationTop, DestinationZoom
PageRect 페이지에서 특정 사각형에 맞춥니다. DestinationLeft, DestinationBottom, DestinationRight, DestinationTop
PageBounds 페이지 경계 박스에 따라 페이지를 맞춥니다. none
PageBoundsY PageY와 같은, 페이지 경계 박스를 기반으로 합니다. DestinationTop
PageBoundsX PageX와 같은, 페이지 경계 박스를 기반으로 합니다. DestinationLeft

DestinationZoom = 0 현재 줌 상속을 의미하며, 제로 줌이 아닙니다. 예를 들어 150와 같은 값을 설정하여 150%로 설정하세요.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-link-destination-types.cs
using IronPdf;
using IronPdf.Annotations;
using IronPdf.Bookmarks;

PdfDocument pdf = PdfDocument.FromFile("multipage.pdf");

// 1. Scroll to a specific vertical position on the destination page (full width shown)
LinkAnnotation scrollLink = new LinkAnnotation(0, 2)
{
    X = 72, Y = 680, Width = 300, Height = 16,
    DestinationType = BookmarkDestinations.PageY,
    DestinationTop = 400        // scroll so y=400 sits at the top of the view
};
pdf.Annotations.Add(scrollLink);

// 2. Jump to a position AND set the zoom level
LinkAnnotation zoomLink = new LinkAnnotation(0, 3, "Zoom to figure")
{
    X = 72, Y = 650, Width = 200, Height = 16,
    DestinationType = BookmarkDestinations.PageZoom,
    DestinationLeft = 100,
    DestinationTop = 500,
    DestinationZoom = 150       // 150% zoom; use 0 to inherit the current zoom
};
pdf.Annotations.Add(zoomLink);

// 3. Fit a specific rectangle on the destination page
LinkAnnotation rectLink = new LinkAnnotation(0, 4)
{
    X = 72, Y = 620, Width = 200, Height = 16,
    DestinationType = BookmarkDestinations.PageRect,
    DestinationLeft = 50,
    DestinationBottom = 100,
    DestinationRight = 550,
    DestinationTop = 700
};
pdf.Annotations.Add(rectLink);

pdf.SaveAs("link-destinations.pdf");
Imports IronPdf
Imports IronPdf.Annotations
Imports IronPdf.Bookmarks

Dim pdf As PdfDocument = PdfDocument.FromFile("multipage.pdf")

' 1. Scroll to a specific vertical position on the destination page (full width shown)
Dim scrollLink As New LinkAnnotation(0, 2) With {
    .X = 72, .Y = 680, .Width = 300, .Height = 16,
    .DestinationType = BookmarkDestinations.PageY,
    .DestinationTop = 400        ' scroll so y=400 sits at the top of the view
}
pdf.Annotations.Add(scrollLink)

' 2. Jump to a position AND set the zoom level
Dim zoomLink As New LinkAnnotation(0, 3, "Zoom to figure") With {
    .X = 72, .Y = 650, .Width = 200, .Height = 16,
    .DestinationType = BookmarkDestinations.PageZoom,
    .DestinationLeft = 100,
    .DestinationTop = 500,
    .DestinationZoom = 150       ' 150% zoom; use 0 to inherit the current zoom
}
pdf.Annotations.Add(zoomLink)

' 3. Fit a specific rectangle on the destination page
Dim rectLink As New LinkAnnotation(0, 4) With {
    .X = 72, .Y = 620, .Width = 200, .Height = 16,
    .DestinationType = BookmarkDestinations.PageRect,
    .DestinationLeft = 50,
    .DestinationBottom = 100,
    .DestinationRight = 550,
    .DestinationTop = 700
}
pdf.Annotations.Add(rectLink)

pdf.SaveAs("link-destinations.pdf")
$vbLabelText   $csharpLabel

기존 텍스트 위에 링크를 어떻게 위치합니까?

이미 페이지에 있는 텍스트에 클릭 가능한 링크를 겹쳐놓기 위해서는 PdfPage.TextChunks으로 텍스트를 추출하고 각 조각의 BoundingBox를 사용하여 링크 크기를 설정하십시오. PDF 좌표는 페이지의 왼쪽 하단에서 시작되므로, BoundingBox.BottomY에 할당하고 BoundingBox.Top에 할당하지 마십시오. 그렇게 할 경우, 클릭 가능한 영역이 보이는 텍스트 위에 배치되게 됩니다. 가시적인 경계를 제거하려면 Hidden = true을 설정하여 링크가 렌더링된 텍스트 위에 보이지 않게 놓이도록 하십시오.

이는 정적인 인쇄형 목차를 탐색 가능한 것으로 바꾸는 기초입니다. 아래의 예시는 TOC 페이지를 스캔하고, 각 항목을 텍스트에 맞추고, 올바른 페이지로 이동하는 보이지 않는 LinkAnnotation를 오버레이합니다.

:path=/static-assets/pdf/content-code-examples/how-to/annotation-link-toc.cs
using IronPdf;
using IronPdf.Annotations;
using IronPdf.Bookmarks;
using System;
using System.Collections.Generic;

PdfDocument pdf = PdfDocument.FromFile("report-with-toc.pdf");

// Zero-based index of the page that holds the table-of-contents text
int tocPageIndex = 1;

// Map each TOC entry's leading text to the page index it should jump to
var tocEntries = new Dictionary<string, int>
{
    { "Introduction", 2 },
    { "Methodology",  4 },
    { "Results",      6 },
    { "Conclusion",   9 },
};

// Walk the text chunks on the TOC page and overlay a clickable link on each match
foreach (var chunk in pdf.Pages[tocPageIndex].TextChunks)
{
    string text = chunk.Contents.Trim();

    foreach (var entry in tocEntries)
    {
        if (!text.StartsWith(entry.Key)) continue;

        var box = chunk.BoundingBox;
        pdf.Annotations.Add(new LinkAnnotation(tocPageIndex, entry.Value)
        {
            X = (int)box.Left,
            Y = (int)box.Bottom,                       // Bottom, NOT Top (PDF origin is bottom-left)
            Width = (int)Math.Max(box.Width, 400),
            Height = (int)Math.Abs(box.Top - box.Bottom),
            DestinationType = BookmarkDestinations.PageY,
            DestinationTop = 792,                      // top of a US Letter page
            Hidden = true                              // invisible overlay on the existing TOC text
        });
        break;
    }
}

pdf.SaveAs("clickable-toc.pdf");
Imports IronPdf
Imports IronPdf.Annotations
Imports IronPdf.Bookmarks
Imports System
Imports System.Collections.Generic

Dim pdf As PdfDocument = PdfDocument.FromFile("report-with-toc.pdf")

' Zero-based index of the page that holds the table-of-contents text
Dim tocPageIndex As Integer = 1

' Map each TOC entry's leading text to the page index it should jump to
Dim tocEntries As New Dictionary(Of String, Integer) From {
    {"Introduction", 2},
    {"Methodology", 4},
    {"Results", 6},
    {"Conclusion", 9}
}

' Walk the text chunks on the TOC page and overlay a clickable link on each match
For Each chunk In pdf.Pages(tocPageIndex).TextChunks
    Dim text As String = chunk.Contents.Trim()

    For Each entry In tocEntries
        If Not text.StartsWith(entry.Key) Then Continue For

        Dim box = chunk.BoundingBox
        pdf.Annotations.Add(New LinkAnnotation(tocPageIndex, entry.Value) With {
            .X = CInt(box.Left),
            .Y = CInt(box.Bottom),                       ' Bottom, NOT Top (PDF origin is bottom-left)
            .Width = CInt(Math.Max(box.Width, 400)),
            .Height = CInt(Math.Abs(box.Top - box.Bottom)),
            .DestinationType = BookmarkDestinations.PageY,
            .DestinationTop = 792,                      ' top of a US Letter page
            .Hidden = True                              ' invisible overlay on the existing TOC text
        })
        Exit For
    Next
Next

pdf.SaveAs("clickable-toc.pdf")
$vbLabelText   $csharpLabel

상위로 돌아가기 또는 동일 페이지 링크를 만들 수 있습니까?

예. 동일 페이지 링크는 pageIndexdestinationPageIndex와 같은 경우로, 완전히 지원되며, '맨 위로 돌아가기' 버튼을 구성하는 전형적인 방법입니다. 동일 페이지 링크를 DestinationType = BookmarkDestinations.PageY와 높은 DestinationTop 값과 결합하여 클릭 시 현재 페이지의 상단으로 스크롤하도록 설정합니다. 긴 보고서에 일관된 상위로 복귀 제어를 제공하기 위해 모든 페이지 하단에 동일한 링크를 추가하세요.


PDF 주석 작업을 위한 최적의 방법은 무엇일까요?

애플리케이션에 주석 기능을 구현할 때 다음 모범 사례를 고려하십시오.

  1. 좌표계 : PDF 좌표는 페이지의 왼쪽 하단 모서리에서 시작합니다. 이는 왼쪽 상단을 시작점으로 사용하는 많은 UI 프레임워크와는 다른 점입니다. 좌표 계산 시 이러한 차이를 고려해야 합니다.

  2. 성능 최적화 : 여러 어노테이션을 추가할 때, 각 어노테이션을 추가할 때마다 저장하는 대신 일괄 처리 방식을 고려하십시오. 이러한 접근 방식은 특히 대용량 PDF 파일을 처리할 때 성능을 향상시킵니다.

  3. 주석 표시 여부 : 모든 PDF 뷰어에서 주석이 동일하게 표시되는 것은 아닙니다. 주석이 달린 PDF 파일을 다양한 뷰어에서 테스트하여 일관된 사용자 경험을 보장하세요.

  4. 양식과의 통합 : 주석 기능은 양식 구조를 변경하지 않고도 상황에 맞는 도움말이나 지침을 제공하여 PDF 양식을 보완합니다.

  5. 보안 고려 사항 : 중요한 문서를 다룰 때는 주석에 기밀 정보가 포함될 수 있다는 점을 명심하십시오. 주석이 달린 콘텐츠를 보호하기 위해 적절한 보안 조치를 시행하십시오.

  6. 접근성 : 장애가 있는 사용자를 위해 추가적인 맥락을 제공하는 문서 접근성 향상 주석 추가를 고려하십시오. 이는 접근성 있는 문서에 대한 PDF/UA 규정 준수 요건과 일치합니다.

주석 작성 시 좌표계가 중요한 이유는 무엇일까요?

PDF 좌표계가 왼쪽 아래 모서리에서 시작되는 방식은 왼쪽 위 모서리를 기준으로 하는 시스템에 익숙한 개발자들에게 혼란을 야기할 수 있습니다. 좌표 계산이 잘못되면 주석이 예상치 못한 위치에 표시되어 중요한 콘텐츠를 가리거나 페이지 밖으로 나타날 수 있습니다. UI 프레임워크 또는 사용자 입력 시스템과 통합할 때는 항상 좌표를 적절하게 변환해야 합니다.

클릭하여 주석 달기 기능과 같은 기능을 구현하거나 사용자 상호 작용에서 얻은 화면 좌표를 PDF 좌표로 변환할 때 좌표계를 이해하는 것이 더욱 중요해집니다. 복잡한 위치 지정 요구 사항이 있는 경우 IronPDF의 뷰포트 및 확대/축소 기능을 활용하여 보기 환경에 관계없이 주석이 올바르게 표시되도록 하십시오.

여러 개의 어노테이션을 추가할 때 성능을 최적화하려면 어떻게 해야 할까요?

여러 개의 주석을 추가할 때는 모든 주석을 컬렉션에 추가한 후 문서를 저장하여 일괄 처리하십시오. 이 접근 방식은 파일 입출력 작업을 줄여 성능을 크게 향상시키며, 특히 대용량 PDF 파일이나 여러 문서를 연속해서 처리할 때 효과적입니다. 대량 작업 시 사용자 경험 향상을 위해 진행률 표시기를 도입하는 것을 고려해 보세요.

// Example of batch annotation processing
var annotations = new List<TextAnnotation>();
for (int i = 0; i < 100; i++)
{
    annotations.Add(new TextAnnotation(0) 
    { 
        Title = $"Note {i}", 
        Contents = $"Content for note {i}",
        X = 50 + (i * 10),
        Y = 700 - (i * 20)
    });
}

// Add all annotations at once
foreach (var annotation in annotations)
{
    pdf.Annotations.Add(annotation);
}

// Save once after all additions
pdf.SaveAs("batch-annotated.pdf");
// Example of batch annotation processing
var annotations = new List<TextAnnotation>();
for (int i = 0; i < 100; i++)
{
    annotations.Add(new TextAnnotation(0) 
    { 
        Title = $"Note {i}", 
        Contents = $"Content for note {i}",
        X = 50 + (i * 10),
        Y = 700 - (i * 20)
    });
}

// Add all annotations at once
foreach (var annotation in annotations)
{
    pdf.Annotations.Add(annotation);
}

// Save once after all additions
pdf.SaveAs("batch-annotated.pdf");
Imports System.Collections.Generic

' Example of batch annotation processing
Dim annotations As New List(Of TextAnnotation)()
For i As Integer = 0 To 99
    annotations.Add(New TextAnnotation(0) With {
        .Title = $"Note {i}",
        .Contents = $"Content for note {i}",
        .X = 50 + (i * 10),
        .Y = 700 - (i * 20)
    })
Next

' Add all annotations at once
For Each annotation In annotations
    pdf.Annotations.Add(annotation)
Next

' Save once after all additions
pdf.SaveAs("batch-annotated.pdf")
$vbLabelText   $csharpLabel

대용량 처리 환경에서 더욱 뛰어난 성능을 발휘하려면 비동기 처리 또는 멀티스레딩 기술을 사용하여 주석 작업을 병렬로 처리하는 것을 고려해 보세요.

다양한 뷰어와의 호환성을 위해 무엇을 고려해야 할까요?

PDF 뷰어에 따라 주석을 표시하는 아이콘 스타일, 팝업 동작 또는 위치 지정 방식이 다를 수 있습니다. 주석이 추가된 PDF 파일은 Adobe Acrobat, Chrome, Edge와 같은 인기 있는 뷰어 및 모바일 PDF 리더에서 항상 테스트하여 주석이 올바르게 표시되고 사용자가 사용하는 모든 플랫폼에서 제대로 작동하는지 확인하십시오.

일부 뷰어는 모든 주석 유형을 지원하지 않거나 표시 방식이 다를 수 있습니다. 호환성을 최대한 높이려면 표준 주석 유형을 사용하고 뷰어별 기능에 의존하지 마십시오. Azure 또는 AWS 와 같은 특정 환경에 배포할 때는 대상 환경의 기본 PDF 뷰어에서 주석을 테스트하여 일관된 동작을 보장해야 합니다.

당신이 할 수 있는 다른 일들을 알아볼 준비가 되셨나요? PDF 편집 방법 튜토리얼 페이지는 여기에서 확인하세요.

자주 묻는 질문

C#에서 PDF 문서에 텍스트 주석을 추가하는 방법은 무엇인가요?

IronPDF는 AddTextAnnotation 메서드를 사용하여 텍스트 주석을 추가하는 간단한 API를 제공합니다. 페이지 번호, 위치 좌표(X, Y), 제목 및 내용을 지정하여 주석을 생성할 수 있습니다. 예를 들어, Annotations.Add 메서드와 TextAnnotation 객체를 사용하면 단 한 줄의 코드로 스티커 메모 주석을 추가할 수 있습니다.

지원되는 PDF 주석 유형은 무엇입니까?

IronPDF는 PDF 문서에서 스티커 메모처럼 작동하는 텍스트 주석 기능을 지원합니다. 이러한 주석은 페이지에 작은 아이콘으로 표시되며, 클릭하면 전체 주석 텍스트가 나타나므로 문서의 특정 부분에 의견, 알림 또는 추가 정보를 간편하게 추가할 수 있습니다.

기존 PDF 주석을 프로그램으로 편집할 수 있나요?

네, IronPDF는 API를 통해 기존 PDF 주석을 검색하고 편집할 수 있도록 지원합니다. PdfDocument 객체의 Annotations 속성을 사용하여 주석에 접근하고, 제목, 내용, 위치 등의 속성을 수정한 후 변경 사항을 PDF에 저장할 수 있습니다.

PDF 문서에서 주석을 제거하려면 어떻게 해야 하나요?

IronPDF는 PDF 문서에서 주석을 프로그래밍 방식으로 제거하는 방법을 제공합니다. PdfDocument의 Annotations 컬렉션에 접근하여 특정 주석을 제거하거나 페이지 또는 전체 문서에서 모든 주석을 지울 수 있습니다.

PDF 주석의 일반적인 비즈니스 활용 사례는 무엇인가요?

IronPDF의 주석 기능은 문서 검토 워크플로에 이상적입니다. 검토자가 문서에 피드백을 표시하거나, 원본 내용을 수정하지 않고 계약서에 대한 팀 공동 작업을 수행하거나, 품질 보증 팀이 기술 문서의 문제를 표시할 수 있습니다. 이러한 기능은 문서 관리 시스템과 원활하게 통합됩니다.

PDF 주석 기능을 사용하려면 추가 소프트웨어를 설치해야 하나요?

아니요, IronPDF는 모든 PDF 주석 기능을 포함하는 독립형 C# 라이브러리입니다. IronPDF 라이브러리를 다운로드하고 프로젝트에서 참조하기만 하면 외부 종속성 없이 PDF 문서에 주석을 추가, 편집 및 삭제할 수 있습니다.

C#에서 PDF에 클릭 가능한 내부 내비게이션 링크를 어떻게 추가합니까?

IronPDF의 LinkAnnotation 클래스를 사용하세요. 이는 텍스트 주석과 동일한 Annotations.Add 메서드를 통해 추가됩니다. 페이지 인덱스 및 목적지 페이지 인덱스가 있는 LinkAnnotation을 생성하고, X, Y, 폭, 높이(포인트 단위)로 클릭 가능한 영역을 설정하면 IronPDF가 목적지 페이지로 이동하는 클릭 가능한 영역을 생성합니다. 이는 사용자 정의 목차, 교차 참조 및 맨 위로 돌아가는 버튼에 이상적입니다.

PDF 링크 클릭 시 줌 및 스크롤 위치를 어떻게 제어합니까?

LinkAnnotation의 DestinationType 속성을 BookmarkDestinations 열거형을 사용하여 설정하세요. 기본 Page 값은 목적지 페이지 전체에 맞추고, PageY는 세로 위치로 이동, PageZoom은 위치와 줌 레벨을 설정하며, PageRect는 특정 직사각형을 맞춥니다. DestinationTop, DestinationLeft, DestinationRight, DestinationBottom 및 DestinationZoom으로 뷰를 세부 조정하세요. DestinationZoom = 0은 현재 줌을 상속하는 것을 의미하며 0 줌이 아닙니다.

Curtis Chau
기술 문서 작성자

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

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

시작할 준비 되셨나요?
Nuget 다운로드 19,936,792 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronPdf
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.