Anotacije i obrasci
Anotacije i obrasci
Aspose.PDF FOSS for .NET vam pruža potpuni pristup čitanju/pisanju PDF anotacija
i interaktivnim AcroForm poljima. Primarna tačka ulaza za anotacije jePage.Annotations (AnnotationCollection), dok se polja forme pristupa
putem Document.Form. Obe podsistemi rade u potpunosti u memoriji i ne
zahtevaju licencni ključ.
Dodavanje anotacija
AnnotationCollection izlaže tipizirane pomoćne metode za svaku standardnu vrstu anotacije. Svaka metoda prihvata Rectangle koji definiše položaj anotacije na stranici, plus parametre specifične za tip.
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);Link anotacije i akcije
Linkovi kombinuju klikabilni pravougaonik sa PdfAction. Biblioteka podržava
URI, GoTo, JavaScript, Named i Launch akcije.
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");Da biste pročitali vezu nazad nakon otvaranja sačuvanog PDF‑a, kastujte anotaciju u LinkAnnotation i pregledajte njeno Uri svojstvo ili rešite rečnik akcije putem PdfAction.Create.
Označavanje i anotacije oblika
Markup anotacije (isticanje, podvlačenje, precrtavanje) označavaju postojeći tekst. Shape anotacije (kvadrat, krug, linija, mastilo) crtaju geometriju na stranici.
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);Анотације печата
Stamp anotacije prekrivaju sliku ili unapred definisanu ikonu na stranici.
var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);Izravnavanje anotacija
Pozovite Flatten() na bilo koju anotaciju da biste zapalili njen vizuelni izgled u strim sadržaja stranice i uklonili ga iz interaktivne liste anotacija.
foreach (var annot in doc.Pages[1].Annotations)
{
annot.Flatten();
}Obrazac posetioca sa AnnotationSelector
AnnotationSelector implementira obrazac posetioca tako da možete filtrirati anotacije po tipu bez ručnog kastovanja.
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
}Prosledite instancu tipizirane anotacije konstruktoru da biste filtrirali samo po tom tipu:
var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instancesInteraktivna polja obrasca
Pristupite AcroForm poljima putem Document.Form. Klasa Form izlaže operacije čitanja/pisanja na nivou polja i podržava izvoz u JSON.
using var doc = Document.Open(pdfBytes);
// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
Console.WriteLine($"{field.FullName}: {field.Value}");
}Podklase polja uključuju TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField i SignatureField.
Izvoz podataka obrasca u JSON
WidgetAnnotation pruža ExportToJson preopterećenja za serijalizaciju podataka polja u tok ili putanju datoteke. Opcioni ExportFieldsToJsonOptions parametar kontroliše formatiranje izlaza.
using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];
using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);Saveti i najbolje prakse
- Uvek navedite eksplicitne
Rectanglekoordinate u PDF jedinicama korisničkog prostora (1/72 inča). - Koristite
AddLinkAnnotationsaPdfActionza maksimalnu fleksibilnost — URI, GoTo, JavaScript i Named akcije su sve podržane. - Pozovite
Flatten()pre distribucije PDF‑a ako želite da se anotacije prikazuju u ne‑interaktivnim preglednicima. - Pristupajte poljima obrasca putem
Document.Form.Fieldsumesto da iterirate anotacije stranice — kolekcija obrazaca upravlja grupisanjem polja preko stranica. - Sačuvajte i ponovo otvorite dokument da biste proverili vernost anotacija pri kružnom prenosu, posebno za prilagođene akcije.
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
| Anotacija nije vidljiva nakon čuvanja | Pravougaonik ima nultu površinu ili je izvan granica stranice | Proverite da koordinate padaju unutar stranice MediaBox |
LinkAnnotation.Uri vraća null | Link koristi GoTo ili JavaScript akciju, a ne URI akciju | Razrešite rečnik akcija putem PdfAction.Create i proverite ActionType |
| Vrednost polja obrasca je prazan string | Polje postoji, ali nema /V unos | Proverite da field.Value nije null pre obrade |
Flatten() baca | Anotacija nema /P (strana) referencu | Osigurajte da je anotacija dodata putem Page.Annotations |
FAQ
Kako da dodam hipervezu na PDF stranicu?
Koristite page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) da biste kreirali klikabilni URI link na navedenom pravougaoniku.
Mogu li da čitam vrednosti polja obrasca iz postojećeg PDF‑a?
Да. Отворите документ помоћу Document.Open, затим итерирајте Document.Form.Fields и прочитајте својство Value за сваки Field.
Koje tipove anotacija podržava biblioteka?
Biblioteka podržava tekst, slobodni tekst, link, isticanje, podvlačenje, precrtavanje,
kvadrat, krug, liniju, mastilo, pečat, kursor, prilog‑datoteke, zvuk, poligon,
poliliniju, vidžet, vodeni žig i 3D anotacije. Sve vrste su dostupne putem
AnnotationCollection pomoćnih metoda ili direktne konstrukcije.
Kako da filtriram anotacije po tipu?
Koristite AnnotationSelector sa tipizovanom anotacijom šablona. Pozovite page.Accept(selector)
i pregledajte selector.Selected za podudarajuće anotacije.
Mogu li da izravnam samo određene anotacije?
Da. Pozovite Flatten() na pojedinačne Annotation instance umesto da iterirate celu kolekciju.
Sažetak API referencije
| Class / Method | Description |
|---|---|
AnnotationCollection | Tipizovana kolekcija na svakom Page; pruža Add* pomoćne funkcije za sve vrste anotacija |
AnnotationCollection.AddTextAnnotation | Dodaj anotaciju lepljive beleške |
AnnotationCollection.AddLinkAnnotation | Dodaj link sa URI‑jem, odredištem stranice ili prilagođenom radnjom |
AnnotationCollection.AddHighlightAnnotation | Dodaj anotaciju isticanja teksta |
AnnotationCollection.AddInkAnnotation | Dodaj anotaciju slobodnog crteža |
AnnotationCollection.AddSquareAnnotation | Dodaj anotaciju pravougaonog oblika |
AnnotationCollection.AddCircleAnnotation | Dodaj anotaciju elipsastog oblika |
AnnotationCollection.AddLineAnnotation | Dodaj anotaciju linije |
Annotation.Flatten | Ugradi izgled anotacije u sadržaj stranice |
Annotation.Accept | Prosledi na tipizovanu preopterećenost AnnotationSelector.Visit |
AnnotationSelector | Posetilac koji prikuplja anotacije po tipu |
LinkAnnotation | Podklasa anotacije koja nosi URI ili radnju |
TextAnnotation | Anotacija lepljive beleške |
InkAnnotation | Anotacija slobodnog crteža sa putanjama poteza |
StampAnnotation | Anotacija preklapanja slike ili ikone |
WidgetAnnotation.ExportToJson | Serijalizuj podatke polja obrasca u JSON |
Form | AcroForm fasada; nabraja i manipuliše poljima |
Field | Osnovna klasa za polja obrasca (TextBoxField, CheckboxField, itd.) |
CheckboxField | Polje obrasca za potvrdu (checkbox) |
TextBoxField | Polje za unos teksta jedne ili više linija |
ComboBoxField | Polje za izbor iz padajuće liste |
RadioButtonField | Polje grupe radio‑dugmeta |
AnnotationType | Enumeracija vrsta anotacija |
PdfAction.CreateUri | Fabrika za radnje URI linkova |
PdfAction.CreateJavaScript | Fabrika za JavaScript radnje |