Anotasi dan Borang

Anotasi dan Borang

Anotasi dan Borang

Aspose.PDF FOSS for .NET memberi anda akses penuh baca/tulis ke anotasi PDF
dan medan AcroForm interaktif. Titik masuk utama untuk anotasi ialah
Page.Annotations (sebuah AnnotationCollection), manakala medan borang diakses
melalui Document.Form. Kedua-dua subsistem berfungsi sepenuhnya dalam memori dan tidak memerlukan
kunci lesen.


Menambah anotasi

AnnotationCollection memperlihatkan kaedah pembantu berjenis untuk setiap jenis anotasi standard. Setiap kaedah menerima Rectangle yang mendefinisikan kedudukan anotasi pada halaman serta parameter khusus jenis.

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);

Anotasi pautan dan tindakan

Pautan menggabungkan segi empat tepat yang boleh diklik dengan PdfAction. Perpustakaan menyokong tindakan URI, GoTo, JavaScript, Named, dan 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");

Untuk membaca semula pautan selepas membuka PDF yang disimpan, cast anotasi kepada LinkAnnotation dan periksa sifat Urinya atau selesaikan kamus tindakan melalui PdfAction.Create.


Penanda dan anotasi bentuk

Anotasi markup (sorotan, garis bawah, coret) menandakan teks sedia ada. Anotasi bentuk (segi empat, bulatan, garis, dakwat) melukis geometri pada halaman.

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);

Anotasi setem

Anotasi setem menindih imej atau ikon pra‑takrif pada halaman.

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

Meratakan anotasi

Panggil Flatten() pada sebarang anotasi untuk menukar penampilan visualnya ke dalam aliran kandungan halaman dan mengeluarkannya dari senarai anotasi interaktif.

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

Corak pelawat dengan AnnotationSelector

AnnotationSelector melaksanakan corak pelawat supaya anda boleh menapis anotasi mengikut jenis tanpa penukaran secara manual.

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
}

Hantar contoh anotasi berjenis ke konstruktor untuk menapis hanya jenis itu:

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

Bidang borang interaktif

Akses medan AcroForm melalui Document.Form. Kelas Form mendedahkan operasi baca/tulis pada peringkat medan dan menyokong eksport JSON.

using var doc = Document.Open(pdfBytes);

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

Subkelas Field termasuk TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField, dan SignatureField.


Mengeksport data borang ke JSON

WidgetAnnotation menyediakan overload ExportToJson untuk menserialkan data medan ke aliran atau laluan fail. Parameter ExportFieldsToJsonOptions pilihan mengawal pemformatan output.

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

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

Petua dan Amalan Terbaik

  • Sentiasa nyatakan koordinat Rectangle secara eksplisit dalam unit ruang pengguna PDF (1/72 inci).
  • Gunakan AddLinkAnnotation dengan PdfAction untuk fleksibiliti maksimum — URI, GoTo, JavaScript, dan tindakan Named semuanya disokong.
  • Panggil Flatten() sebelum mengedarkan PDF jika anda mahu anotasi muncul dalam penonton bukan interaktif.
  • Akses medan borang melalui Document.Form.Fields bukannya mengulangi anotasi halaman — koleksi borang mengendalikan pengelompokan medan merentasi halaman.
  • Simpan dan buka semula dokumen untuk mengesahkan kesetiaan pusingan anotasi, terutamanya untuk tindakan tersuai.

Isu Umum

IsuPuncaPenyelesaian
Anotasi tidak kelihatan selepas disimpanSegi empat tepat mempunyai kawasan sifar atau berada di luar sempadan halamanSahkan koordinat berada dalam halaman MediaBox
LinkAnnotation.Uri mengembalikan nullPautan menggunakan tindakan GoTo atau JavaScript, bukan tindakan URISelesaikan kamus tindakan melalui PdfAction.Create dan semak ActionType
Nilai medan borang adalah rentetan kosongMedan wujud tetapi tiada entri /VSemak field.Value tidak null sebelum diproses
Flatten() melemparAnotasi tidak mempunyai rujukan /P (halaman)Pastikan anotasi ditambah melalui Page.Annotations

Soalan Lazim

Bagaimana saya menambah pautan ke halaman PDF?

Gunakan page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) untuk membuat pautan URI yang boleh diklik pada segmen segi empat tepat yang ditentukan.

Bolehkah saya membaca nilai medan borang daripada PDF yang sedia ada?

Ya. Buka dokumen dengan Document.Open, kemudian ulangi Document.Form.Fields dan baca sifat Value pada setiap Field.

Apakah jenis anotasi yang disokong oleh perpustakaan?

Perpustakaan menyokong teks, teks-bebas, pautan, sorotan, garis bawah, coret, segi empat, bulatan, garis, dakwat, setem, penunjuk, lampiran fail, bunyi, poligon, polilin, widget, watermark, dan anotasi 3D. Semua jenis tersedia melalui AnnotationCollection kaedah pembantu atau pembinaan langsung.

Bagaimana saya menapis anotasi mengikut jenis?

Gunakan AnnotationSelector dengan anotasi templat berjenis. Panggil page.Accept(selector) dan periksa selector.Selected untuk anotasi yang sepadan.

Bolehkah saya flatten hanya anotasi tertentu?

Ya. Panggil Flatten() pada setiap contoh Annotation secara individu daripada mengulangi keseluruhan koleksi.


Ringkasan Rujukan API

Class / MethodDescription
AnnotationCollectionKoleksi berjenis pada setiap Page; menyediakan pembantu Add* untuk semua jenis anotasi
AnnotationCollection.AddTextAnnotationTambah anotasi nota lekat
AnnotationCollection.AddLinkAnnotationTambah pautan dengan URI, destinasi halaman, atau tindakan tersuai
AnnotationCollection.AddHighlightAnnotationTambah anotasi sorotan teks
AnnotationCollection.AddInkAnnotationTambah anotasi lukisan bebas
AnnotationCollection.AddSquareAnnotationTambah anotasi bentuk segi empat tepat
AnnotationCollection.AddCircleAnnotationTambah anotasi bentuk elips
AnnotationCollection.AddLineAnnotationTambah anotasi garis
Annotation.FlattenBakar penampilan anotasi ke dalam kandungan halaman
Annotation.AcceptHantar ke muatan berjenis AnnotationSelector.Visit
AnnotationSelectorPelawat yang mengumpul anotasi mengikut jenis
LinkAnnotationSubkelas anotasi yang membawa URI atau tindakan
TextAnnotationAnotasi nota lekat
InkAnnotationAnotasi lukisan bebas dengan laluan goresan
StampAnnotationAnotasi lapisan imej atau ikon
WidgetAnnotation.ExportToJsonSeri data medan borang ke JSON
FormFasad AcroForm; menyenaraikan dan memanipulasi medan
FieldKelas asas untuk medan borang (TextBoxField, CheckboxField, dll.)
CheckboxFieldMedan borang kotak semak
TextBoxFieldMedan input teks satu baris/banyak baris
ComboBoxFieldMedan pilihan tarik-turun
RadioButtonFieldMedan kumpulan butang radio
AnnotationTypeEnumerasi jenis anotasi
PdfAction.CreateUriKilang untuk tindakan pautan URI
PdfAction.CreateJavaScriptKilang untuk tindakan JavaScript

Lihat Juga

 Bahasa Melayu