Annotaatiot ja lomakkeet
Annotaatiot ja lomakkeet
Aspose.PDF FOSS for .NET antaa sinulle täyden luku-/kirjoitusoikeuden PDF-merkintöihin ja interaktiivisiin AcroForm-kenttiin. Merkintöjen ensisijainen sisäänkäyntipiste on Page.Annotations (AnnotationCollection), kun taas lomakekenttiä käytetään Document.Form kautta. Molemmat alijärjestelmät toimivat täysin muistissa eikä niihin tarvita lisenssiavainta.
Lisää merkintöjä
AnnotationCollection tarjoaa tyypitetyt apumetodit jokaiselle standardille merkintätyypille. Jokainen metodi hyväksyy Rectangle, joka määrittelee merkinnän sijainnin sivulla, sekä tyyppikohtaiset parametrit.
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);Linkkimerkinnät ja toiminnot
Linkit yhdistävät klikattavan suorakulmion PdfAction:n kanssa. Kirjasto tukee
URI-, GoTo-, JavaScript-, Named- ja Launch-toimintoja.
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");Jotta voit lukea linkin takaisin PDF:n avaamisen jälkeen, muunna merkintä LinkAnnotation-tyyppiseksi ja tarkastele sen Uri-ominaisuutta tai ratkaise toiminto‑sanakirja PdfAction.Create:n avulla.
Merkintä- ja muotoannotaatiot
Merkintäannotaatio (korostus, alleviivaus, yliviivaus) merkitsee olemassa olevaa tekstiä. Muotoannotaatio (neliö, ympyrä, viiva, muste) piirtää geometriaa sivulle.
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);Leimamerkinnät
Leimamerkinnät asettavat kuvan tai ennalta määritellyn ikonin sivulle.
var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);Annotaatiot litistetään
Kutsu Flatten() mille tahansa merkinnälle polttaaksesi sen visuaalisen ulkoasun sivun sisältövirtaan ja poistaaksesi sen interaktiivisesta merkintälistasta.
foreach (var annot in doc.Pages[1].Annotations)
{
annot.Flatten();
}Vierailijamalli AnnotationSelectorin kanssa
AnnotationSelector toteuttaa vierailijamallin, jotta voit suodattaa merkinnät tyypin mukaan ilman manuaalista tyyppimuunnosta.
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
}Anna tyypitetty annotaatiotapaus konstruktorille suodattaaksesi vain kyseistä tyyppiä:
var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instancesInteraktiiviset lomakekentät
Pääse AcroForm-kenttiin Document.Form kautta. Form-luokka tarjoaa kenttätason luku‑/kirjoitustoiminnot ja tukee JSON‑vientiä.
using var doc = Document.Open(pdfBytes);
// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
Console.WriteLine($"{field.FullName}: {field.Value}");
}Kentän alaluokat sisältävät TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField ja SignatureField.
Lomaketietojen vienti JSON-muotoon
WidgetAnnotation tarjoaa ExportToJson ylikuormia kenttätietojen sarjoittamiseen virtaan tai tiedostopolkuun. Valinnainen ExportFieldsToJsonOptions parametri ohjaa tulosteen muotoilua.
using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];
using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);Vinkkejä ja parhaita käytäntöjä
- Määritä aina eksplisiittiset
Rectangle-koordinaatit PDF:n käyttäjäavaruusyksiköissä (1/72 tuumaa). - Käytä
AddLinkAnnotationyhdessäPdfAction-elementin kanssa maksimaalisen joustavuuden saavuttamiseksi — URI-, GoTo-, JavaScript- ja nimettyjä toimintoja tuetaan kaikki. - Kutsu
Flatten()ennen PDF:n jakamista, jos haluat merkintöjen näkyvän ei‑interaktiivisissa katseluohjelmissa. - Käytä lomakekenttiä
Document.Form.Fields:n kautta sen sijaan, että iteroit sivun merkintöjä — lomakekokoelma hoitaa monisivuisen kenttäryhmittelyn. - Tallenna ja avaa asiakirja uudelleen tarkistaaksesi merkintöjen läpikulun tarkkuuden, erityisesti mukautetuille toiminnoille.
Yleisiä ongelmia
| Ongelma | Syy | Korjaus |
|---|---|---|
| Merkintä ei näy tallennuksen jälkeen | Suorakulmio on nollapinta-ala tai se on sivun rajojen ulkopuolella | Varmista, että koordinaatit ovat sivun sisällä MediaBox |
LinkAnnotation.Uri palauttaa null | Linkki käyttää GoTo- tai JavaScript-toimintoa, ei URI-toimintoa | Ratkaise toiminto-dictionary PdfAction.Create avulla ja tarkista ActionType |
| Lomakekentän arvo on tyhjä merkkijono | Kenttä on olemassa, mutta sillä ei ole /V-merkintää | Tarkista, että field.Value ei ole null ennen käsittelyä |
Flatten() heittää | Merkinnällä ei ole /P (sivu) -viitettä | Varmista, että merkintä on lisätty Page.Annotations:n kautta |
UKK
Kuinka lisään hyperlinkin PDF-sivulle?
Käytä page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) luodaksesi napsautettavan URI‑linkin määritetyssä suorakulmiossa.
Voinko lukea lomakekenttien arvot olemassa olevasta PDF:stä?
Kyllä. Avaa asiakirja Document.Open:lla, sitten iteroi Document.Form.Fields ja lue Value-ominaisuus jokaisessa Field:ssa.
Mitä merkintätyyppejä kirjasto tukee?
Kirjasto tukee tekstiä, vapaata tekstiä, linkkiä, korostusta, alleviivausta, yliviivausta, neliötä, ympyrää, viivaa, ink, leimaa, kohdistinta, tiedostoliitettä, ääntä, monikulmiota, moniviivaa, widget, vesileimaa ja 3D-merkintöjä. Kaikki tyypit ovat saatavilla AnnotationCollection apumetodeilla tai suoran konstruktion avulla.
Kuinka suodatan merkinnät tyypin mukaan?
Käytä AnnotationSelector tyyppisen mallipohjamerkinnän kanssa. Kutsu page.Accept(selector)
ja tarkastele selector.Selected vastaavien merkintöjen varalta.
Voinko litistaa vain tietyt annotaatiot?
Kyllä. Kutsu Flatten() yksittäisissä Annotation-instansseissa sen sijaan, että iteroisit koko kokoelman.
API-viitteiden yhteenveto
| Class / Method | Description |
|---|---|
AnnotationCollection | Tyypitetty kokoelma jokaiselle Page; tarjoaa Add* apureita kaikille merkintätyypeille |
AnnotationCollection.AddTextAnnotation | Lisää muistilappumerkintä |
AnnotationCollection.AddLinkAnnotation | Lisää linkki, jossa on URI, sivukohde tai mukautettu toiminto |
AnnotationCollection.AddHighlightAnnotation | Lisää tekstin korostusmerkintä |
AnnotationCollection.AddInkAnnotation | Lisää vapaakäsinpiirto-merkintä |
AnnotationCollection.AddSquareAnnotation | Lisää suorakulmion muotoinen merkintä |
AnnotationCollection.AddCircleAnnotation | Lisää ellipsin muotoinen merkintä |
AnnotationCollection.AddLineAnnotation | Lisää viivamerkintä |
Annotation.Flatten | Polta merkinnän ulkoasu sivun sisältöön |
Annotation.Accept | Välitä tyypitettyyn AnnotationSelector.Visit ylikuormitukseen |
AnnotationSelector | Kävijä, joka kerää merkinnät tyypin mukaan |
LinkAnnotation | Merkintäaliluokka, joka kantaa URI:a tai toimintoa |
TextAnnotation | Muistilappumerkintä |
InkAnnotation | Vapaakäsinpiirto-merkintä, jossa on piirtojälkiä |
StampAnnotation | Kuva- tai ikonisijoitusmerkintä |
WidgetAnnotation.ExportToJson | Sarjoita lomakekentän tiedot JSON-muotoon |
Form | AcroForm -rajapinta; luettelee ja käsittelee kenttiä |
Field | Perusluokka lomakekentille (TextBoxField, CheckboxField, jne.) |
CheckboxField | Valintaruutu-lomakekenttä |
TextBoxField | Yksi- tai monirivinen tekstisyötekenttä |
ComboBoxField | Alasvetovalintakenttä |
RadioButtonField | Radiopainikkeiden ryhmäkenttä |
AnnotationType | Luettelo merkintätyypeistä |
PdfAction.CreateUri | Tehdas URI-linkkitoiminnoille |
PdfAction.CreateJavaScript | Tehdas JavaScript-toiminnoille |