Anotacijos ir formos
Anotacijos ir formos
Aspose.PDF FOSS for .NET suteikia jums pilną skaitymo/rašymo prieigą prie PDF anotacijų
ir interaktyvių AcroForm laukų. Pagrindinis įėjimo taškas anotacijoms yraPage.Annotations (AnnotationCollection), o formų laukus pasiekia perDocument.Form. Abu posistemiai veikia visiškai atmintyje ir nereikalauja
licencijos rakto.
Pridedant anotacijas
AnnotationCollection pateikia tipizuotus pagalbinius metodus kiekvienai standartinei
anotacijos rūšiai. Kiekvienas metodas priima Rectangle, apibrėžiantį anotacijos
padėtį puslapyje, bei tipui būdingus parametrus.
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);Nuorodų anotacijos ir veiksmai
Nuorodos sujungia paspaudžiamą stačiakampį su PdfAction. Biblioteka palaiko
URI, GoTo, JavaScript, Named ir Launch veiksmus.
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");Norėdami perskaityti nuorodą po to, kai atidarote išsaugotą PDF, konvertuokite anotaciją į LinkAnnotation ir patikrinkite jos Uri savybę arba išspręskite veiksmo žodyną per PdfAction.Create.
Žymėjimas ir formų anotacijos
Žymėjimo anotacijos (paryškinimas, pabraukimas, perbraukimas) žymi esamą tekstą. Formų anotacijos (kvadratas, apskritimas, linija, rašalas) piešia geometriją puslapyje.
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);Antspaudų anotacijos
Antspaudų anotacijos padengia paveikslėlį arba iš anksto apibrėžtą piktogramą puslapyje.
var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);Anotacijų suplokštinimas
Iškviesti Flatten() bet kuriai anotacijai, kad jos vizualinis vaizdas būtų įdegintas į puslapio turinio srautą ir pašalinti ją iš interaktyvaus anotacijų sąrašo.
foreach (var annot in doc.Pages[1].Annotations)
{
annot.Flatten();
}Lankytojo šablonas su AnnotationSelector
AnnotationSelector įgyvendina lankytojo šabloną, todėl galite filtruoti anotacijas pagal tipą be rankinio tipų konvertavimo.
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
}Perduokite tipizuotą anotacijos egzempliorių į konstruktorių, kad filtruotumėte tik šio tipo:
var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instancesInteraktyvūs formų laukai
Pasiekite AcroForm laukus per Document.Form. Form klasė suteikia galimybę atlikti lauko lygmens skaitymo/rašymo operacijas ir palaiko JSON eksportą.
using var doc = Document.Open(pdfBytes);
// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
Console.WriteLine($"{field.FullName}: {field.Value}");
}Lauko po‑klasės apima TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField ir SignatureField.
Formos duomenų eksportavimas į JSON
WidgetAnnotation suteikia ExportToJson perkrovimus duomenų lauko serializavimui į srautą arba failo kelią. Pasirenkamas ExportFieldsToJsonOptions parametras valdo išvesties formatavimą.
using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];
using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);Patarimai ir geriausia praktika
- Visada nurodykite aiškias
Rectanglekoordinates PDF naudotojo erdvės vienetais (1/72 colio). - Naudokite
AddLinkAnnotationsuPdfAction, kad gautumėte didžiausią lankstumą – palaikomi URI, GoTo, JavaScript ir pavadinti veiksmai. - Iškvieskite
Flatten()prieš platindami PDF, jei norite, kad anotacijos būtų matomos neinteraktyviuose peržiūros įrankiuose. - Pasiekite formų laukus per
Document.Form.Fields, o ne peržvelgdami puslapio anotacijas – formų kolekcija tvarko laukų grupavimą per kelis puslapius. - Išsaugokite ir vėl atidarykite dokumentą, kad patikrintumėte anotacijų perkelimo tikslumą, ypač pritaikytų veiksmų atveju.
Bendros problemos
| Issue | Cause | Fix |
|---|---|---|
| Anotacija po išsaugojimo nematoma | Stačiakampis turi nulinį plotą arba yra už puslapio ribų | Patikrinkite, ar koordinatės patenka į puslapį MediaBox |
LinkAnnotation.Uri grąžina null | Nuoroda naudoja GoTo arba JavaScript veiksmą, o ne URI veiksmą | Išspręskite veiksmų žodyną per PdfAction.Create ir patikrinkite ActionType |
| Formos lauko reikšmė yra tuščia eilutė | Laukas egzistuoja, bet neturi /V įrašo | Patikrinkite, ar field.Value nėra null prieš apdorojimą |
Flatten() išmeta | Anotacija neturi /P (puslapio) nuorodos | Įsitikinkite, kad anotacija buvo pridėta per Page.Annotations |
DUK
Kaip pridėti hipersaitą į PDF puslapį?
Naudokite page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)), kad sukurtumėte paspaudžiamą URI nuorodą nurodytame stačiakampyje.
Ar galiu perskaityti formos laukų reikšmes iš esamo PDF?
Taip. Atidarykite dokumentą su Document.Open, tada iteruokite Document.Form.Fields ir perskaitykite Value savybę kiekvienam Field.
Kokius anotacijų tipus biblioteka palaiko?
Biblioteka palaiko tekstą, laisvą tekstą, nuorodą, paryškinimą, pabraukimą, perbraukimą,
kvadratą, apskritimą, liniją, rašalą, antspaudą, žymeklį, failo priedą, garsą, daugiakampį,
poliliniją, valdiklį, vandens ženklą ir 3D anotacijas. Visi tipai yra prieinami per
AnnotationCollection pagalbines metodus arba tiesioginį kūrimą.
Kaip filtruoti anotacijas pagal tipą?
Naudokite AnnotationSelector su tipizuota šablono anotacija. Iškvieskite page.Accept(selector)
ir patikrinkite selector.Selected dėl atitinkančių anotacijų.
Ar galiu sutankinti tik konkrečias anotacijas?
Taip. Iškvieskite Flatten() atskiruose Annotation egzemplioriuose, o ne iteruojant visą kolekciją.
API nuorodų santrauka
| Class / Method | Description |
|---|---|
AnnotationCollection | Tipizuotas rinkinys kiekvienam Page; suteikia Add* pagalbinius įrankius visiems anotacijų tipams |
AnnotationCollection.AddTextAnnotation | Pridėti lipnos pastabos anotaciją |
AnnotationCollection.AddLinkAnnotation | Pridėti nuorodą su URI, puslapio paskirtimi arba pasirinktiniais veiksmais |
AnnotationCollection.AddHighlightAnnotation | Pridėti teksto paryškinimo anotaciją |
AnnotationCollection.AddInkAnnotation | Pridėti laisvos rankos piešimo anotaciją |
AnnotationCollection.AddSquareAnnotation | Pridėti stačiakampės formos anotaciją |
AnnotationCollection.AddCircleAnnotation | Pridėti elipsės formos anotaciją |
AnnotationCollection.AddLineAnnotation | Pridėti linijos anotaciją |
Annotation.Flatten | Įdegti anotacijos išvaizdą į puslapio turinį |
Annotation.Accept | Perduoti į tipizuotą AnnotationSelector.Visit perkrovą |
AnnotationSelector | Lankytojas, kuris renka anotacijas pagal tipą |
LinkAnnotation | Anotacijos poaibis, nešantis URI arba veiksmą |
TextAnnotation | Lipnos pastabos anotacija |
InkAnnotation | Laisvos rankos piešimo anotacija su brūkšnių keliais |
StampAnnotation | Vaizdo arba piktogramos perdangos anotacija |
WidgetAnnotation.ExportToJson | Serializuoti formų laukų duomenis į JSON |
Form | AcroForm fasada; išvardija ir manipuliuoja laukais |
Field | Bazinė klasė formų laukams (TextBoxField, CheckboxField ir kt.) |
CheckboxField | Žymimojo langelio formos laukas |
TextBoxField | Vienos/daugelio eilučių teksto įvesties laukas |
ComboBoxField | Išskleidžiamo pasirinkimo laukas |
RadioButtonField | Radijo mygtukų grupės laukas |
AnnotationType | Anotacijų rūšių išvardinimas |
PdfAction.CreateUri | Gamykla URI nuorodų veiksmams |
PdfAction.CreateJavaScript | Gamykla JavaScript veiksmams |