Anotasi dan Formulir

Anotasi dan Formulir

Anotasi dan Formulir

Aspose.PDF FOSS untuk .NET memberi Anda akses baca/tulis penuh ke anotasi PDF
dan bidang AcroForm interaktif. Titik masuk utama untuk anotasi adalah
Page.Annotations (sebuah AnnotationCollection), sementara bidang formulir diakses
melalui Document.Form. Kedua subsistem bekerja sepenuhnya dalam memori dan tidak memerlukan
kunci lisensi.


Menambahkan anotasi

AnnotationCollection menyediakan metode pembantu bertipe untuk setiap jenis anotasi standar. Setiap metode menerima Rectangle yang mendefinisikan posisi anotasi pada halaman plus parameter spesifik tipe.

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 tautan dan tindakan

Tautan menggabungkan persegi panjang yang dapat diklik dengan PdfAction. Perpustakaan mendukung 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 kembali tautan setelah membuka PDF yang disimpan, cast anotasi ke LinkAnnotation dan periksa properti Uri‑nya atau selesaikan kamus aksi melalui PdfAction.Create.


Markup dan anotasi bentuk

Anotasi markup (highlight, underline, strikeout) menandai teks yang ada. Anotasi bentuk (square, circle, line, ink) menggambar 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 Stempel

Anotasi cap menimpa gambar atau ikon yang telah ditentukan pada halaman.

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

Meratakan anotasi

Panggil Flatten() pada anotasi apa pun untuk membakar tampilan visualnya ke dalam aliran konten halaman dan menghapusnya dari daftar anotasi interaktif.

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

Pola visitor dengan AnnotationSelector

AnnotationSelector mengimplementasikan pola visitor sehingga Anda dapat memfilter anotasi berdasarkan tipe tanpa casting 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
}

Berikan instance anotasi yang bertipe ke konstruktor untuk memfilter hanya tipe tersebut:

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

Bidang formulir interaktif

Akses bidang AcroForm melalui Document.Form. Kelas Form menyediakan operasi baca/tulis tingkat bidang dan mendukung ekspor 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 meliputi TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField, dan SignatureField.


Mengekspor data formulir ke JSON

WidgetAnnotation menyediakan overload ExportToJson untuk menyerialkan data bidang ke aliran atau jalur file. Parameter opsional ExportFieldsToJsonOptions mengontrol pemformatan output.

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

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

Tips dan Praktik Terbaik

  • Selalu tentukan koordinat Rectangle secara eksplisit dalam satuan ruang pengguna PDF (1/72 inci).
  • Gunakan AddLinkAnnotation dengan PdfAction untuk fleksibilitas maksimum — URI, GoTo, JavaScript, dan aksi Named semuanya didukung.
  • Panggil Flatten() sebelum mendistribusikan PDF jika Anda ingin anotasi muncul di penampil non‑interaktif.
  • Akses bidang formulir melalui Document.Form.Fields daripada mengiterasi anotasi halaman — koleksi formulir menangani pengelompokan bidang lintas halaman.
  • Simpan dan buka kembali dokumen untuk memverifikasi kesetiaan putar‑balik anotasi, terutama untuk aksi khusus.

Masalah Umum

IssueCauseFix
Anotasi tidak terlihat setelah disimpanPersegi panjang memiliki area nol atau berada di luar batas halamanVerifikasi koordinat berada dalam halaman MediaBox
LinkAnnotation.Uri mengembalikan nullTautan menggunakan aksi GoTo atau JavaScript, bukan aksi URISelesaikan kamus aksi melalui PdfAction.Create dan periksa ActionType
Nilai bidang formulir adalah string kosongBidang ada tetapi tidak memiliki entri /VPeriksa field.Value tidak null sebelum diproses
Flatten() melemparAnotasi tidak memiliki referensi /P (halaman)Pastikan anotasi ditambahkan melalui Page.Annotations

FAQ

Bagaimana cara menambahkan hyperlink ke halaman PDF?

Gunakan page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) untuk membuat tautan URI yang dapat diklik pada persegi panjang yang ditentukan.

Bisakah saya membaca nilai bidang formulir dari PDF yang ada?

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

Jenis anotasi apa yang didukung oleh perpustakaan?

Perpustakaan mendukung teks, teks bebas, tautan, sorotan, garis bawah, coretan, persegi, lingkaran, garis, tinta, cap, penunjuk, lampiran-berkas, suara, poligon, polilin, widget, watermark, dan anotasi 3D. Semua jenis tersedia melalui AnnotationCollection metode pembantu atau konstruksi langsung.

Bagaimana cara saya memfilter anotasi berdasarkan tipe?

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

Bisakah saya meratakan hanya anotasi tertentu?

Ya. Panggil Flatten() pada setiap instance Annotation secara individual daripada mengiterasi seluruh koleksi.


Ringkasan Referensi API

Class / MethodDescription
AnnotationCollectionKoleksi bertipe pada setiap Page; menyediakan pembantu Add* untuk semua jenis anotasi
AnnotationCollection.AddTextAnnotationMenambahkan anotasi catatan tempel
AnnotationCollection.AddLinkAnnotationMenambahkan tautan dengan URI, tujuan halaman, atau aksi khusus
AnnotationCollection.AddHighlightAnnotationMenambahkan anotasi sorotan teks
AnnotationCollection.AddInkAnnotationMenambahkan anotasi gambar bebas
AnnotationCollection.AddSquareAnnotationMenambahkan anotasi bentuk persegi panjang
AnnotationCollection.AddCircleAnnotationMenambahkan anotasi bentuk elips
AnnotationCollection.AddLineAnnotationMenambahkan anotasi garis
Annotation.FlattenMenyematkan tampilan anotasi ke dalam konten halaman
Annotation.AcceptMengarahkan ke overload AnnotationSelector.Visit yang bertipe
AnnotationSelectorPengunjung yang mengumpulkan anotasi berdasarkan tipe
LinkAnnotationSubkelas anotasi yang membawa URI atau aksi
TextAnnotationAnotasi catatan tempel
InkAnnotationAnotasi gambar bebas dengan jalur goresan
StampAnnotationAnotasi lapisan gambar atau ikon
WidgetAnnotation.ExportToJsonMenyerialkan data bidang formulir ke JSON
FormFasad AcroForm; mengenumerasi dan memanipulasi bidang
FieldKelas dasar untuk bidang formulir (TextBoxField, CheckboxField, dll.)
CheckboxFieldBidang formulir kotak centang
TextBoxFieldBidang input teks satu baris/banyak baris
ComboBoxFieldBidang pilihan dropdown
RadioButtonFieldBidang grup tombol radio
AnnotationTypeEnumerasi jenis anotasi
PdfAction.CreateUriPabrik untuk aksi tautan URI
PdfAction.CreateJavaScriptPabrik untuk aksi JavaScript

Lihat Juga

 Bahasa Indonesia