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 ialahPage.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 instancesBidang 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
Rectanglesecara eksplisit dalam unit ruang pengguna PDF (1/72 inci). - Gunakan
AddLinkAnnotationdenganPdfActionuntuk 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.Fieldsbukannya 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
| Isu | Punca | Penyelesaian |
|---|---|---|
| Anotasi tidak kelihatan selepas disimpan | Segi empat tepat mempunyai kawasan sifar atau berada di luar sempadan halaman | Sahkan koordinat berada dalam halaman MediaBox |
LinkAnnotation.Uri mengembalikan null | Pautan menggunakan tindakan GoTo atau JavaScript, bukan tindakan URI | Selesaikan kamus tindakan melalui PdfAction.Create dan semak ActionType |
| Nilai medan borang adalah rentetan kosong | Medan wujud tetapi tiada entri /V | Semak field.Value tidak null sebelum diproses |
Flatten() melempar | Anotasi 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 / Method | Description |
|---|---|
AnnotationCollection | Koleksi berjenis pada setiap Page; menyediakan pembantu Add* untuk semua jenis anotasi |
AnnotationCollection.AddTextAnnotation | Tambah anotasi nota lekat |
AnnotationCollection.AddLinkAnnotation | Tambah pautan dengan URI, destinasi halaman, atau tindakan tersuai |
AnnotationCollection.AddHighlightAnnotation | Tambah anotasi sorotan teks |
AnnotationCollection.AddInkAnnotation | Tambah anotasi lukisan bebas |
AnnotationCollection.AddSquareAnnotation | Tambah anotasi bentuk segi empat tepat |
AnnotationCollection.AddCircleAnnotation | Tambah anotasi bentuk elips |
AnnotationCollection.AddLineAnnotation | Tambah anotasi garis |
Annotation.Flatten | Bakar penampilan anotasi ke dalam kandungan halaman |
Annotation.Accept | Hantar ke muatan berjenis AnnotationSelector.Visit |
AnnotationSelector | Pelawat yang mengumpul anotasi mengikut jenis |
LinkAnnotation | Subkelas anotasi yang membawa URI atau tindakan |
TextAnnotation | Anotasi nota lekat |
InkAnnotation | Anotasi lukisan bebas dengan laluan goresan |
StampAnnotation | Anotasi lapisan imej atau ikon |
WidgetAnnotation.ExportToJson | Seri data medan borang ke JSON |
Form | Fasad AcroForm; menyenaraikan dan memanipulasi medan |
Field | Kelas asas untuk medan borang (TextBoxField, CheckboxField, dll.) |
CheckboxField | Medan borang kotak semak |
TextBoxField | Medan input teks satu baris/banyak baris |
ComboBoxField | Medan pilihan tarik-turun |
RadioButtonField | Medan kumpulan butang radio |
AnnotationType | Enumerasi jenis anotasi |
PdfAction.CreateUri | Kilang untuk tindakan pautan URI |
PdfAction.CreateJavaScript | Kilang untuk tindakan JavaScript |