如何在 C# 中新增與編輯 PDF 註解

如何在 C# 中新增與編輯 PDF 註解

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

IronPDF 讓 C# 開發人員能透過簡單的 API 呼叫(例如 AddTextAnnotation),新增、編輯及移除 PDF 註解(包括文字評論和便利貼),從而強化企業應用程式中的文件協作與審閱工作流程。 X

註解功能讓使用者能在文件的特定段落中添加評論、提醒或補充資訊。 這些工具能提升處理 PDF 時的協作與溝通效率,讓使用者得以對共享內容進行註解、留言,並提供背景資訊。 Y

PDF 註解在商業工作流程中具有多種用途:審閱者可透過註解提供回饋、團隊可在不修改原始內容的情況下共同協作合約,而品質保證團隊則可標記技術文件中的問題。 無論您是正在建置文件管理系統,還是想強化現有的 PDF 工作流程,IronPDF 的註解功能都能與您的 C# PDF 建立編輯功能無縫整合。 若您的組織需要兼具進階安全功能與註解功能的解決方案,請參閱我們的完整 PDF 安全教學指南

快速入門:使用 IronPDF 為 PDF 添加註解

本快速指南將示範如何使用 C# 中的 IronPDF 為 PDF 文件添加文字註解。 開發人員只需幾行程式碼,即可透過加入註解或備註來強化 PDF 檔案,從而提升文件的互動性與協作能力。 首先載入您的 PDF 檔案,並使用 AddTextAnnotation 方法快速插入註解。

  1. using 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 頁面中添加類似"便利貼"的註解。 透過 Add 屬性的 Annotations 方法,可程式化地新增註解。

PDF 中的文字註解功能類似於實體文件中的便利貼。 它們在頁面上以小型圖示呈現,點擊後會顯示完整的評論內容。 這種非侵入式的方法在提供必要回饋機制之餘,仍能保持文件的易讀性。 在進行 HTML 轉 PDF 作業時,您可在轉換後添加註解,以標記需要審閱的區域或提供額外背景資訊。 此功能在結合 JavaScript 渲染處理動態內容時尤為實用,此類內容可能需要額外說明。

提示所有頁面索引均採用零起始編號。

: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:註解應放置的零起始頁碼

針對更複雜的文件工作流程,建議將註解功能與其他 IronPDF 功能結合使用,例如用於審批流程的數位簽名,或用於文件版本控制的水印功能。 處理敏感文件時,您亦可將註解與 PDF 權限及密碼整合,以控制誰能檢視或修改註解。

我可以為文字註解設定哪些屬性?

TextAnnotation 類別除了基本屬性外,還提供數個用於自訂的屬性:

  • Title:註解的標題文字,通常顯示於註解彈出視窗中
  • Contents:註解的主體文字
  • X, Y:指定註解圖示在頁面中顯示位置的座標
  • PageIndex:註解應放置的零起始頁碼
  • Subject:用於分類註解的可選主旨行
  • Icon:註解(例如:註記、評論、說明)的視覺呈現
  • Open:註解彈出視窗是否預設為開啟狀態

這些功能讓開發人員能夠建立豐富且具情境關聯的註解,從而提升文件溝通的成效。 若涉及多種文件類型的進階工作流程,建議探索 RTF 轉 PDFMarkdown 轉 PDF 功能,以確保不同來源格式間的註解能完整保留。

PDF 註解中的座標如何運作?

PDF 的座標系統以頁面的左下角為起點,這與許多採用左上角為原點的 UI 框架不同。 XY 屬性決定註解圖示在頁面上的顯示位置,單位以點(1/72 英吋)為準。 在程式化定位註解時,請確保您的座標計算已將此差異納入考量。

計算註解位置時,請注意標準美國信紙尺寸為 8.5 x 11 英吋(612 x 792 點)。 A4 頁面的尺寸為 595 x 842 點。 為了精準定位,您可能需要在放置註解前,透過程式碼檢索頁面的尺寸。 這在處理自訂紙張尺寸,或根據內容實作響應式註解定位時,尤為重要。

附註解的 PDF

上述 PDF 文件中的註解可透過 Chrome 瀏覽器檢視。


如何檢索和編輯現有的註解?

檢索與編輯 PDF 註解可透過提升清晰度、準確性及易用性,進而改善協作效率。 透過 Annotations 屬性存取註解集合,並使用新資訊更新 Y 等屬性。

在處理現有 PDF 檔案時,尤其是來自 URL 轉換DOCX 匯入的檔案,您可能需要修改其他使用者或系統所添加的註解。 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

編輯過程將保留文件的所有其他屬性與內容,確保僅修改指定的註解。 這在審核工作流程中特別有用,因為註解可能需要根據文件修訂或變更的需求進行更新。 若要實現全面的文件管理,建議將註解編輯與元資料操作結合,以追蹤文件版本及修訂歷史紀錄。

為什麼我需要編輯現有的註解?

在協作文件工作流程中,編輯註解變得至關重要,例如當需要根據修訂內容更新回饋、對含糊的評論進行澄清,或是因內容變更而需重新定位註解時。 此功能可確保文件審閱在整個修訂週期中始終保持最新且切合實際。

在Enterprise環境中,註解編輯功能通常會與審核工作流程整合,主管可能需要修改審閱者的評論後,才能進行最終批准。 此外,當文件進行翻譯或在地化時,註解可能需要更新,以反映語言變更或文化適應。 在此類情境下,IronPDF 的 UTF-8 及國際化語言支援,可確保註解在不同語言與字元集下皆能正確顯示。

編輯註解時,其他文件屬性會發生什麼變化?

編輯過程將保留文件的所有其他屬性與內容,確保僅修改指定的註解。 文件的結構、格式、嵌入資源及其他註解均保持不變,在維持 PDF 完整性的同時,允許針對特定審閱意見進行有針對性的更新。

這種精選編輯的方法對於維持文件完整性至關重要,特別是在受監管的行業中,必須避免文件遭篡改。 此流程可完整保留數位簽章、表單欄位、書籤以及所有其他 PDF 功能。 對於需要稽核追蹤的文件,請考慮在註解修改時同步實施修訂歷史記錄追蹤

附有編輯註解的 PDF 檔案

上述 PDF 文件中的註解可透過 Chrome 瀏覽器檢視。


如何從 PDF 文件中移除註解?

請使用以下方法移除不必要或過時的註解:RemoveAllAnnotationsForPage 以及 Clear

  • RemoveAt:移除指定索引的單一註解。
  • RemoveAllAnnotationsForPage:移除指定頁面上的所有註解。
  • Clear:移除文件中的所有註解。

註解的移除對於文件的最終定稿至關重要。 在整合回饋並進行必要修改後,建議您在發布最終版本前先刪除審閱評論。 此流程可與 IronPDF 的其他功能(如 PDF 壓縮)完美整合,以建立簡潔且經過優化的文件供分發使用。 若文件需歸檔保存,請考慮在移除註解後轉換為 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 方法並指定頁面索引。 若要移除整份文件中的所有註解,請在 Annotations 屬性上呼叫 Clear 方法。

此批量移除功能在準備文件進行最終發佈時,或在實作文件版本控制系統時(需移除先前審閱週期的註解)特別實用。 建議結合元資料編輯功能,以更新文件屬性並標示審閱狀態。 若工作流程需要經過淨化的文件,請探索 [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 轉換為其他格式時,批量移除註解至關重要。 在高安全性環境中,於分發前移除所有註解,可避免無意間洩露內部審查意見或不應向外部受眾公開的敏感回饋。

處理 PDF 註解的最佳實務有哪些?

在應用程式中實作註解功能時,請參考以下最佳實務:

  1. 座標系統:PDF 座標以頁面的左下角為起點,這與許多採用左上角為原點的 UI 框架不同。 請確保您的座標計算已將此差異納入考量。

  2. 效能優化:當添加多個註解時,建議採用批次處理,而非每次添加後都進行儲存。 此方法可提升效能,特別是在處理大型 PDF 檔案時。

  3. 註解可見性:並非所有 PDF 檢視器都會以相同方式顯示註解。 請在各種檢視器中測試您的註解 PDF,以確保使用者體驗的一致性。

  4. 與表單的整合:註解功能可透過提供情境說明或指示來補充 PDF 表單,且無需修改表單結構。

  5. 安全性考量:處理敏感文件時,請注意註解可能包含機密資訊。 請實施適當的安全措施以保護標註的內容。

  6. 無障礙性:請考慮添加註解以提升文件的可存取性,為身心障礙使用者提供額外的背景資訊。 此翻譯符合 PDF/UA 規範中關於無障礙文件的合規要求。

座標系統為何對註解如此重要?

以左下角為起點的 PDF 座標系統,可能會讓習慣以左上角為起點系統的開發人員感到困惑。 座標計算錯誤可能會導致註解出現在意料之外的位置,進而遮蔽重要內容或顯示在頁面之外。 在與 UI 框架或使用者輸入系統整合時,請務必適當轉換座標。

在實作"點擊註解"等功能,或將使用者互動產生的螢幕座標轉換為 PDF 座標時,理解座標系統的重要性便顯得更加關鍵。 若面臨複雜的定位需求,建議利用 IronPDF 的視口與 Zoom 功能,確保註解無論在何種檢視條件下皆能正確顯示。

在添加多個註解時,如何優化效能?

若需新增多項註解,請先將所有註解加入集合中,再儲存文件,以批次處理方式進行操作。 此方法可減少檔案 I/O 操作,並顯著提升效能,特別是在處理大型 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 檢視器可能會以不同的圖示樣式、彈出視窗行為或定位方式來呈現註解。 請務必在 Adobe Acrobat、Chrome、Edge 及行動版 PDF 閱讀器等常見檢視工具中測試您的註解 PDF 檔案,以確保註解在使用者可能使用的各平台上皆能正確顯示且功能正常。

部分瀏覽器可能不支援所有註解類型,或顯示方式有所不同。 為確保最佳相容性,請採用標準註解類型,並避免依賴特定檢視器的功能。 在部署至 AzureAWS 等特定環境時,請於目標環境的預設 PDF 檢視器中測試註解功能,以確保行為一致。

準備好探索更多可能性了嗎? 請點此查看我們的教學頁面:編輯 PDF

常見問題

如何在 C# 中為 PDF 文件添加文字註解?

IronPDF 提供了一個簡單的 API,可透過 AddTextAnnotation 方法新增文字註解。您可以透過指定頁碼、位置座標 (X, Y)、標題和內容來建立註解。例如,您可以使用 Annotations.Add 方法搭配 TextAnnotation 物件,僅需一行程式碼即可新增便條紙註解。

支援哪些類型的 PDF 註解?

IronPDF 支援類似便利貼功能的文字註解,可在 PDF 文件中使用。這些註解會以小型圖示顯示於頁面,點擊後會顯示完整的註解內容,提供一種不干擾閱讀的方式,讓使用者能在文件的特定段落中添加註解、提醒或補充資訊。

我可以透過程式碼編輯現有的 PDF 註解嗎?

是的,IronPDF 允許您透過其 API 檢索並編輯現有的 PDF 註解。您可以使用 PdfDocument 物件的 Annotations 屬性存取註解,修改其標題、內容和位置等屬性,然後將變更儲存回 PDF 檔案中。

如何從 PDF 文件中移除註解?

IronPDF 提供方法,可透過程式設計方式從 PDF 文件中移除註解。您可以存取 PdfDocument 的 Annotations 集合,並移除特定註解,或清除頁面或整個文件中的所有註解。

PDF 註解有哪些常見的商業應用情境?

IronPDF 的註解功能非常適合文件審閱工作流程,讓審閱者能在文件上標註回饋意見、讓團隊在不修改原始內容的情況下共同協作合約,以及讓品質保證團隊在技術文件中標記問題。這些功能可與文件管理系統無縫整合。

using PDF 註解功能是否需要安裝額外的軟體?

不,IronPDF 是一個自包含的 C# 函式庫,內建所有 PDF 註解功能。您只需在專案中下載並引用 IronPDF 函式庫,即可開始在 PDF 文件中新增、編輯及移除註解,無需任何外部依賴項。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 19,014,616 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。