Anotacijos ir formos

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 yra
Page.Annotations (AnnotationCollection), o formų laukus pasiekia per
Document.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 instances

Interaktyvū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 Rectangle koordinates PDF naudotojo erdvės vienetais (1/72 colio).
  • Naudokite AddLinkAnnotation su PdfAction, 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

IssueCauseFix
Anotacija po išsaugojimo nematomaStačiakampis turi nulinį plotą arba yra už puslapio ribųPatikrinkite, ar koordinatės patenka į puslapį MediaBox
LinkAnnotation.Uri grąžina nullNuoroda 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šoPatikrinkite, ar field.Value nėra null prieš apdorojimą
Flatten() išmetaAnotacija 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 / MethodDescription
AnnotationCollectionTipizuotas rinkinys kiekvienam Page; suteikia Add* pagalbinius įrankius visiems anotacijų tipams
AnnotationCollection.AddTextAnnotationPridėti lipnos pastabos anotaciją
AnnotationCollection.AddLinkAnnotationPridėti nuorodą su URI, puslapio paskirtimi arba pasirinktiniais veiksmais
AnnotationCollection.AddHighlightAnnotationPridėti teksto paryškinimo anotaciją
AnnotationCollection.AddInkAnnotationPridėti laisvos rankos piešimo anotaciją
AnnotationCollection.AddSquareAnnotationPridėti stačiakampės formos anotaciją
AnnotationCollection.AddCircleAnnotationPridėti elipsės formos anotaciją
AnnotationCollection.AddLineAnnotationPridėti linijos anotaciją
Annotation.FlattenĮdegti anotacijos išvaizdą į puslapio turinį
Annotation.AcceptPerduoti į tipizuotą AnnotationSelector.Visit perkrovą
AnnotationSelectorLankytojas, kuris renka anotacijas pagal tipą
LinkAnnotationAnotacijos poaibis, nešantis URI arba veiksmą
TextAnnotationLipnos pastabos anotacija
InkAnnotationLaisvos rankos piešimo anotacija su brūkšnių keliais
StampAnnotationVaizdo arba piktogramos perdangos anotacija
WidgetAnnotation.ExportToJsonSerializuoti formų laukų duomenis į JSON
FormAcroForm fasada; išvardija ir manipuliuoja laukais
FieldBazinė klasė formų laukams (TextBoxField, CheckboxField ir kt.)
CheckboxFieldŽymimojo langelio formos laukas
TextBoxFieldVienos/daugelio eilučių teksto įvesties laukas
ComboBoxFieldIšskleidžiamo pasirinkimo laukas
RadioButtonFieldRadijo mygtukų grupės laukas
AnnotationTypeAnotacijų rūšių išvardinimas
PdfAction.CreateUriGamykla URI nuorodų veiksmams
PdfAction.CreateJavaScriptGamykla JavaScript veiksmams

Žr. taip pat

 Lietuvių