Annotationer och former
Annotationer och former
Aspose.PDF FOSS for .NET gives you full read/write access to PDF annotations och interaktiva AcroForm-fält. primär inkomstpunkt för anmälningar är Page.Annotations (en av AnnotationCollectionNär formfält är tillgängliga genom Document.Form.Båda delsystemet fungerar helt i minnet och kräver inte Licensnyckel är.
Lägg till anmälningar
AnnotationCollection Exponerar typiserade hjälpmetoder för varje standard Annotationstyp. varje metod accepterar en Rectangle Definiera anmälningen position på sidan plus typ-specifika parametrar.
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);Länk till anmälningar och åtgärder
länkar kombinerar en klickbar rektangle med en PdfAction.Biblioteket stöder URI, GoTo, JavaScript, Namngivna och Lansering åtgärder.
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");För att läsa en länk tillbaka efter öppnande av ett sparat PDF, häll anteckningen till LinkAnnotation och inspektera dess Uri ägande eller lösa åtgärden Ordbok via PdfAction.Create.
Markera och forma anmärkningar
Markera annotationer (högljus, underlinje, strikeout) markera befintlig text. Form anotationer(kvadrum, cirkel, linje och ink) dra geometri på sidan.
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 Annotation
Stampannotationer överlämnar en bild eller fördefinierad ikon på en sida.
var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);Flatta anmälningar
Call Flatten() på varje anteckning för att bränna sitt visuella utseende i sidan innehåll strömmar och tar bort det från den interaktiva anteckningsförteckningen.
foreach (var annot in doc.Pages[1].Annotations)
{
annot.Flatten();
}Besökare mönster med AnnotationSelector
AnnotationSelector implementera besökarmönster så att du kan filtrera Annotationer per typ utan manuell kastning.
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
}Ge en typad anteckningsinstans till konstruktören för att filtrera den typen endast:
var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instancesInteraktivt form fält
AcroForm-fält genom att komma åt Document.Form. den Form Klasser exponeringar fältnivå läs/skrivverksamhet och stöder JSON export.
using var doc = Document.Open(pdfBytes);
// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
Console.WriteLine($"{field.FullName}: {field.Value}");
}Fältunderlag inkluderar TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField,och SignatureField.
Exportera formdata till JSON
WidgetAnnotation Försöker ExportToJson överlämningar för serialisering av fältdata till en ström eller filvägen. ett valfritt ExportFieldsToJsonOptions Parameter Kontrollera utgångsformat.
using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];
using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);Tips och bästa praxis
- Alltid uttryckligt angivande
Rectanglekoordinater i PDF-användarutrymme (1/72 tum). - Användning
AddLinkAnnotationmed APdfActionFör maximal flexibilitet – URI, GoTo, JavaScript och Namngivna åtgärder stöds alla. - Call
Flatten()innan du distribuerar en PDF om du vill att anteckningar ska visas i icke-interaktiva tittare. - Tillgångsfält genom
Document.Form.FieldsIstället för iterativa sidanotationer – formulärsamlingen hanterar cross-page fältgruppning. - Spara och öppna dokumentet för att verifiera anmälningens trovärdighet, särskilt för anpassade åtgärder.
Vanliga frågor
| Issue | Cause | Fixar |
|---|---|---|
| Anmälan inte synlig efter spara | Rectangle har nollområde eller är utanför sidgränserna. | Kontrollera att koordinaterna faller inom sidan MediaBox |
LinkAnnotation.Uri returnerar noll | Link använder en GoTo eller JavaScript-åtgärd, inte en URI- åtgärder | Lös ordboken via PdfAction.Create och check ActionType |
| Form fältvärde är tomt sträng | Fält finns men har inte /V Inträde | Check field.Value inte noll före bearbetning |
Flatten() kastar | Anmälan har inte /P (sida) Referens till | Se till att anmälningen har läggts till genom Page.Annotations |
FAQ
Hur lägger jag till en hyperlänk till ett PDF-sida?
Användning page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) till skapa en klickbar URI-länk på den angivna rektangeln.
Kan jag läsa formfältvärden från en befintlig PDF?
Ja, öppna dokumentet med Document.Open,Och sedan iterate Document.Form.Fields och läs den Value Fastighet på varje Field.
Vilka anmälningstyper stöder biblioteket?
Biblioteket stöder text, gratistext, länk, highlight, underline, strikeout, kvadrat, cirkel, linje, ink, stempel, caret, fil-attackning, ljud, polygon, polylin, widget, vattenmärke och 3D-annotationer. alla typer finns tillgängliga via AnnotationCollection hjälpmedel eller direktbyggnad.
Hur filtrerar jag anteckningar efter typ?
Användning AnnotationSelector med en typad mall anteckning. ringa page.Accept(selector) och inspekterar selector.Selected för matchande anmälningar.
Kan jag bara lägga till specifika anteckningar?
Ja, ringa till Flatten() på enskilda Annotation inställningar snarare än iteration hela samlingen .
API Referens sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
AnnotationCollection | Typiska samlingar på varje Page;• Försöker Add* Hjälpmedel för alla anmälningstyper |
AnnotationCollection.AddTextAnnotation | Lägg till en sticky-note anteckning |
AnnotationCollection.AddLinkAnnotation | Lägg till en länk med URI, sida destination eller anpassad åtgärd |
AnnotationCollection.AddHighlightAnnotation | Lägg till en text-högljus anteckning |
AnnotationCollection.AddInkAnnotation | Lägg till en frilansad anteckning |
AnnotationCollection.AddSquareAnnotation | Lägg till en rektangulär form anmälning |
AnnotationCollection.AddCircleAnnotation | Lägg till en ellipse-formad anmälning |
AnnotationCollection.AddLineAnnotation | Lägg till en linje anmälning |
Annotation.Flatten | Bränna anteckningsutseende i sidinnehåll |
Annotation.Accept | Skicka till typed AnnotationSelector.Visit överbelastning |
AnnotationSelector | Besökare som samlar in anteckningar per typ |
LinkAnnotation | Annotation subklass med en URI eller åtgärd |
TextAnnotation | Sticky-note anmälning |
InkAnnotation | Frisjakt-skrivning annotation med stroke vägar |
StampAnnotation | Bild eller ikon överlämnande anmälning |
WidgetAnnotation.ExportToJson | Serierar form-fältdata till JSON |
Form | AcroForm facad; listar och manipulerar fält |
Field | Grundläggande klass för form fält (TextBoxField, CheckboxField,och så vidare) |
CheckboxField | Checkbox form fält |
TextBoxField | Enkel/multi-linje text input fält |
ComboBoxField | Drop-down valfält |
RadioButtonField | Radio-knappton gruppfält |
AnnotationType | Förteckning över anmälningstyper |
PdfAction.CreateUri | Fabrik för URI länk åtgärder |
PdfAction.CreateJavaScript | Fabrik för JavaScript-åtgärder |