คำอธิบายและแบบฟอร์ม

คำอธิบายและแบบฟอร์ม

คำอธิบายและแบบฟอร์ม

Aspose.PDF FOSS for .NET ให้การเข้าถึงแบบอ่าน/เขียนเต็มรูปแบบต่อคำอธิบาย PDF และฟิลด์ AcroForm แบบโต้ตอบ จุดเข้าหลักสำหรับคำอธิบายคือ Page.Annotations (เป็น AnnotationCollection) ในขณะที่ฟิลด์ฟอร์มเข้าถึงได้ผ่าน Document.Form. ทั้งสองระบบย่อยทำงานทั้งหมดในหน่วยความจำและไม่ต้องใช้คีย์ใบอนุญาต.


เพิ่มคำอธิบาย

AnnotationCollection เปิดเผยเมธอดช่วยเหลือแบบกำหนดประเภทสำหรับทุกประเภทของคำอธิบายมาตรฐาน. แต่ละเมธอดรับ Rectangle ที่กำหนดตำแหน่งของคำอธิบายบนหน้า พร้อมพารามิเตอร์ที่เฉพาะเจาะจงตามประเภท.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// Text (sticky-note) annotation
page.Annotations.AddTextAnnotation(
    new Rectangle(72, 720, 200, 740),
    contents: "Review this paragraph",
    title: "Editor",
    open: true);

// Highlight annotation
page.Annotations.AddHighlightAnnotation(
    new Rectangle(72, 680, 300, 700),
    quadPoints: null,
    color: new double[] { 1, 1, 0 });

// Free-text annotation (rendered directly on the page)
page.Annotations.AddFreeTextAnnotation(
    new Rectangle(72, 640, 350, 660),
    contents: "Inline note",
    fontName: "Helvetica",
    fontSize: 10,
    color: new double[] { 0, 0, 0 });

using var ms = new MemoryStream();
doc.Save(ms);

หมายเหตุลิงก์และการกระทำ

ลิงก์รวมสี่เหลี่ยมคลิกได้กับ PdfAction. ไลบรารีรองรับการกระทำ URI, GoTo, JavaScript, Named, และ Launch.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// URI link
var uriAction = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 700, 200, 720), uriAction);

// GoTo link (jump to page 3)
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 660, 200, 680),
    destinationPage: 3,
    destRect: new Rectangle(0, 0, 612, 792));

// JavaScript link
var jsAction = PdfAction.CreateJavaScript("app.alert('Hello');");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 620, 200, 640), jsAction);

doc.Save("links.pdf");

เพื่ออ่านลิงก์กลับหลังจากเปิด PDF ที่บันทึกไว้ ให้แคสต์ annotation เป็น LinkAnnotation และตรวจสอบคุณสมบัติ Uri ของมัน หรือแก้ไขพจนานุกรมการกระทำผ่าน PdfAction.Create.


การทำเครื่องหมายและคำอธิบายรูปร่าง

การทำเครื่องหมาย (highlight, underline, strikeout) ทำเครื่องหมายข้อความที่มีอยู่. การทำเครื่องหมายรูปทรง (square, circle, line, ink) วาดเรขาคณิตบนหน้า.

var page = doc.Pages[1];

// Underline
page.Annotations.AddUnderlineAnnotation(
    new Rectangle(72, 600, 300, 620),
    quadPoints: null,
    color: new double[] { 1, 0, 0 });

// Square
page.Annotations.AddSquareAnnotation(
    new Rectangle(72, 540, 200, 580),
    borderColor: new double[] { 0, 0, 1 },
    fillColor: null,
    lineWidth: 1.5);

// Line
page.Annotations.AddLineAnnotation(
    new Rectangle(72, 500, 300, 520),
    x1: 72, y1: 510, x2: 300, y2: 510,
    color: new double[] { 0, 0.5, 0 },
    lineWidth: 2);

// Ink (freehand)
page.Annotations.AddInkAnnotation(
    new Rectangle(72, 440, 200, 480),
    inkPaths: new[] { new double[] { 80, 450, 120, 470, 160, 450 } },
    color: new double[] { 0.5, 0, 0.5 },
    lineWidth: 1);

หมายเหตุแสตมป์

การทำเครื่องหมายแสตมป์ซ้อนภาพหรือไอคอนที่กำหนดไว้ล่วงหน้าบนหน้า.

var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);

ทำให้คำอธิบายแบน

เรียก Flatten() บนหมายเหตุใด ๆ เพื่อบันทึกลักษณะการแสดงผลของมันลงในสตรีมเนื้อหาหน้ากระดาษและลบออกจากรายการหมายเหตุเชิงโต้ตอบ

foreach (var annot in doc.Pages[1].Annotations)
{
    annot.Flatten();
}

แพทเทิร์น Visitor กับ AnnotationSelector

AnnotationSelector ใช้รูปแบบ visitor เพื่อให้คุณสามารถกรอง annotations ตามประเภทโดยไม่ต้องทำการแคสท์ด้วยตนเอง.

var selector = new AnnotationSelector();
doc.Pages[1].Accept(selector);

// selector.Selected now contains all annotations on page 1
foreach (var annot in selector.Selected)
{
    // Process each annotation by type
}

ส่งอินสแตนซ์ของการอธิบายประเภทที่กำหนดให้กับคอนสตรัคเตอร์เพื่อกรองเฉพาะประเภทนั้นเท่านั้น:

var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instances

ฟิลด์แบบฟอร์มโต้ตอบ

เข้าถึงฟิลด์ AcroForm ผ่าน Document.Form. คลาส Form เปิดเผยการดำเนินการอ่าน/เขียนระดับฟิลด์และรองรับการส่งออก JSON.

using var doc = Document.Open(pdfBytes);

// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
    Console.WriteLine($"{field.FullName}: {field.Value}");
}

คลาสย่อยของ Field รวมถึง TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField, และ SignatureField.


การส่งออกข้อมูลฟอร์มเป็น JSON

WidgetAnnotation ให้ overload ExportToJson สำหรับการทำซีเรียลไลซ์ข้อมูลฟิลด์ไปยังสตรีมหรือเส้นทางไฟล์ พารามิเตอร์ ExportFieldsToJsonOptions ทางเลือกควบคุมการจัดรูปแบบผลลัพธ์.

using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];

using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);

เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ระบุพิกัด Rectangle อย่างชัดเจนในหน่วยพื้นที่ผู้ใช้ของ PDF (1/72 นิ้ว)
  • ใช้ AddLinkAnnotation พร้อมกับ PdfAction เพื่อความยืดหยุ่นสูงสุด — รองรับ URI, GoTo, JavaScript, และ Named actions ทั้งหมด
  • เรียก Flatten() ก่อนแจกจ่าย PDF หากต้องการให้หมายเหตุปรากฏในโปรแกรมดูที่ไม่โต้ตอบ
  • เข้าถึงฟิลด์ฟอร์มผ่าน Document.Form.Fields แทนการวนลูปหมายเหตุในแต่ละหน้า — คอลเลกชันฟอร์มจัดการการจัดกลุ่มฟิลด์ข้ามหน้า
  • บันทึกและเปิดเอกสารใหม่เพื่อยืนยันความแม่นยำของการทำซ้ำหมายเหตุ โดยเฉพาะสำหรับการกระทำที่กำหนดเอง

ปัญหาทั่วไป

IssueCauseFix
Annotation ไม่ปรากฏหลังจากบันทึกRectangle มีพื้นที่ศูนย์หรืออยู่นอกขอบเขตของหน้าตรวจสอบให้แน่ใจว่าพิกัดอยู่ภายในหน้า MediaBox
LinkAnnotation.Uri คืนค่า nullLink ใช้การกระทำ GoTo หรือ JavaScript ไม่ใช่การกระทำ URIแก้ไขพจนานุกรมการกระทำผ่าน PdfAction.Create และตรวจสอบ ActionType
ค่า Form field เป็นสตริงว่างฟิลด์มีอยู่แต่ไม่มีรายการ /Vตรวจสอบว่า field.Value ไม่เป็น null ก่อนดำเนินการ
Flatten() เกิดข้อยกเว้นAnnotation ไม่มีการอ้างอิง /P (page)ตรวจสอบให้แน่ใจว่า annotation ถูกเพิ่มผ่าน Page.Annotations

คำถามที่พบบ่อย

ฉันจะเพิ่มไฮเปอร์ลิงก์ไปยังหน้าของ PDF อย่างไร?

ใช้ page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) เพื่อสร้างลิงก์ URI ที่คลิกได้บนสี่เหลี่ยมที่ระบุ.

ฉันสามารถอ่านค่าฟิลด์ฟอร์มจาก PDF ที่มีอยู่ได้หรือไม่?

ใช่. เปิดเอกสารด้วย Document.Open, จากนั้นวนซ้ำ Document.Form.Fields และอ่านคุณสมบัติ Value ของแต่ละ Field.

ไลบรารีรองรับประเภทของคำอธิบายอะไรบ้าง?

ไลบรารีรองรับ text, free-text, link, highlight, underline, strikeout, square, circle, line, ink, stamp, caret, file-attachment, sound, polygon, polyline, widget, watermark, และ 3D annotations. ประเภททั้งหมดสามารถใช้ได้ผ่าน AnnotationCollection helper methods หรือการสร้างโดยตรง.

ฉันจะกรองคำอธิบายตามประเภทได้อย่างไร?

ใช้ AnnotationSelector พร้อมกับการระบุเทมเพลตที่มีประเภท. เรียก page.Accept(selector) และตรวจสอบ selector.Selected สำหรับการระบุที่ตรงกัน.

ฉันสามารถทำให้แบนเฉพาะคำอธิบายที่ต้องการได้หรือไม่?

ใช่. เรียก Flatten() บนแต่ละอินสแตนซ์ของ Annotation แทนการวนซ้ำคอลเลกชันทั้งหมด.


สรุปการอ้างอิง API

Class / MethodDescription
AnnotationCollectionคอลเลกชันที่มีประเภทบนแต่ละ Page; ให้เครื่องมือช่วยเหลือ Add* สำหรับทุกประเภทของคำอธิบาย
AnnotationCollection.AddTextAnnotationเพิ่มคำอธิบายแบบโน้ตติดกาว
AnnotationCollection.AddLinkAnnotationเพิ่มลิงก์ด้วย URI, ปลายทางหน้า, หรือการกระทำแบบกำหนดเอง
AnnotationCollection.AddHighlightAnnotationเพิ่มคำอธิบายการไฮไลท์ข้อความ
AnnotationCollection.AddInkAnnotationเพิ่มคำอธิบายการวาดด้วยมืออิสระ
AnnotationCollection.AddSquareAnnotationเพิ่มคำอธิบายรูปสี่เหลี่ยม
AnnotationCollection.AddCircleAnnotationเพิ่มคำอธิบายรูปวงรี
AnnotationCollection.AddLineAnnotationเพิ่มคำอธิบายเส้น
Annotation.Flattenฝังลักษณะของคำอธิบายลงในเนื้อหาหน้า
Annotation.Acceptส่งต่อไปยังการโอเวอร์โหลด AnnotationSelector.Visit ที่มีประเภท
AnnotationSelectorผู้เยี่ยมชมที่รวบรวมคำอธิบายตามประเภท
LinkAnnotationคลาสย่อยของคำอธิบายที่บรรจุ URI หรือการกระทำ
TextAnnotationคำอธิบายแบบโน้ตติดกาว
InkAnnotationคำอธิบายการวาดด้วยมืออิสระพร้อมเส้นทางการวาด
StampAnnotationคำอธิบายการซ้อนภาพหรือไอคอน
WidgetAnnotation.ExportToJsonแปลงข้อมูลฟอร์มฟิลด์เป็น JSON
Formฟาซาดของ AcroForm; แสดงรายการและจัดการฟิลด์
Fieldคลาสฐานสำหรับฟิลด์ฟอร์ม (TextBoxField, CheckboxField, ฯลฯ)
CheckboxFieldฟิลด์ฟอร์มแบบช่องทำเครื่องหมาย
TextBoxFieldฟิลด์อินพุตข้อความบรรทัดเดียว/หลายบรรทัด
ComboBoxFieldฟิลด์ตัวเลือกแบบดรอปดาวน์
RadioButtonFieldฟิลด์กลุ่มปุ่มวิทยุ
AnnotationTypeการนับประเภทของคำอธิบาย
PdfAction.CreateUriโรงงานสำหรับการกระทำลิงก์ URI
PdfAction.CreateJavaScriptโรงงานสำหรับการกระทำ JavaScript

ดูเพิ่มเติม

 ภาษาไทย