Anotace a formuláře

Anotace a formuláře

Anotace a formuláře

Aspose.PDF FOSS pro .NET vám poskytuje plný přístup ke čtení/zápisu anotací PDF
a interaktivních polí AcroForm. Primárním vstupním bodem pro anotace je
Page.Annotations (AnnotationCollection), zatímco pole formuláře jsou přístupná
prostřednictvím Document.Form. Oba subsystémy fungují zcela v paměti a nevyžadují
licenční klíč.


Přidávání anotací

AnnotationCollection poskytuje typově specifikované pomocné metody pro každý standardní typ anotace. Každá metoda přijímá Rectangle definující pozici anotace na stránce plus typově specifické parametry.

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);

Odkazové anotace a akce

Odkazy kombinují klikací obdélník s PdfAction. Knihovna podporuje
URI, GoTo, JavaScript, Named a Launch akce.

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");

Chcete-li po otevření uloženého PDF získat odkaz zpět, přetypujte anotaci na LinkAnnotation a prozkoumejte její vlastnost Uri nebo rozřešte slovník akcí pomocí PdfAction.Create.


Značení a anotace tvarů

Markup anotace (zvýraznění, podtržení, přeškrtnutí) označují existující text. Anotace tvarů (čtverec, kruh, čára, inkoust) kreslí geometrii na stránce.

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);

Razítkové anotace

Razítkové anotace překrývají obrázek nebo předdefinovanou ikonu na stránce.

var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);

Zploštění anotací

Zavolejte Flatten() na libovolnou anotaci, aby se její vizuální vzhled vypálil do proudu obsahu stránky a odstranil se ze seznamu interaktivních anotací.

foreach (var annot in doc.Pages[1].Annotations)
{
    annot.Flatten();
}

Návštěvnický vzor s AnnotationSelector

AnnotationSelector implementuje vzor návštěvníka, takže můžete filtrovat anotace podle typu bez ručního přetypování.

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
}

Předávejte instanci typované anotace do konstruktoru, aby se filtrovalo pouze podle tohoto typu:

var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instances

Interaktivní formulářová pole

Přístup k polím AcroForm přes Document.Form. Třída Form poskytuje operace čtení/zápisu na úrovni polí a podporuje export do JSON.

using var doc = Document.Open(pdfBytes);

// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
    Console.WriteLine($"{field.FullName}: {field.Value}");
}

Podtřídy Field zahrnují TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField a SignatureField.


Exportování dat formuláře do JSON

WidgetAnnotation poskytuje ExportToJson přetížení pro serializaci dat pole do proudu nebo cesty k souboru. Volitelný parametr ExportFieldsToJsonOptions řídí formátování výstupu.

using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];

using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);

Tipy a osvědčené postupy

  • Vždy specifikujte explicitní Rectangle souřadnice v jednotkách uživatelského prostoru PDF (1/72 palce).
  • Používejte AddLinkAnnotation s PdfAction pro maximální flexibilitu — URI, GoTo, JavaScript a Named akce jsou všechny podporovány.
  • Zavolejte Flatten() před distribucí PDF, pokud chcete, aby se anotace zobrazovaly v neinteraktivních prohlížečích.
  • Přistupujte k polím formuláře přes Document.Form.Fields místo iterace anotací stránky — kolekce formulářů zajišťuje seskupování polí napříč stránkami.
  • Uložte a znovu otevřete dokument pro ověření věrnosti při zpětném průchodu anotací, zejména u vlastních akcí.

Časté problémy

ProblémPříčinaOprava
Anotace není po uložení viditelnáObdélník má nulovou plochu nebo je mimo hranice stránkyOvěřte, že souřadnice spadají do stránky MediaBox
LinkAnnotation.Uri vrací nullOdkaz používá akci GoTo nebo JavaScript, nikoli URI akciVyřešte slovník akcí pomocí PdfAction.Create a zkontrolujte ActionType
Hodnota formulářového pole je prázdný řetězecPole existuje, ale nemá záznam /VZkontrolujte, že field.Value není null před zpracováním
Flatten() vyhazujeAnotace nemá odkaz na /P (stránku)Ujistěte se, že anotace byla přidána pomocí Page.Annotations

Často kladené otázky

Jak přidat hypertextový odkaz na stránku PDF?

Použijte page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) k vytvoření klikatelného odkazu URI na zadaném obdélníku.

Mohu číst hodnoty formulářových polí z existujícího PDF?

Ano. Otevřete dokument pomocí Document.Open, poté iterujte Document.Form.Fields a přečtěte vlastnost Value u každého Field.

Jaké typy anotací knihovna podporuje?

Knihovna podporuje text, volný text, odkaz, zvýraznění, podtržení, přeškrtnutí, čtverec, kruh, čára, inkoust, razítko, kurzor, příloha souboru, zvuk, polygon, křivka, widget, vodoznak a 3D anotace. Všechny typy jsou k dispozici prostřednictvím AnnotationCollection helper methods nebo přímé konstrukce.

Jak mohu filtrovat anotace podle typu?

Použijte AnnotationSelector s anotací typované šablony. Zavolejte page.Accept(selector) a prohlédněte selector.Selected pro odpovídající anotace.

Mohu zploštit pouze konkrétní anotace?

Ano. Zavolejte Flatten() na jednotlivých instancích Annotation místo iterace celé kolekce.


Souhrn referenčního API

Class / MethodDescription
AnnotationCollectionTypová kolekce na každém Page; poskytuje Add* pomocníky pro všechny typy anotací
AnnotationCollection.AddTextAnnotationPřidat anotaci lepicí poznámky
AnnotationCollection.AddLinkAnnotationPřidat odkaz s URI, cílem stránky nebo vlastní akcí
AnnotationCollection.AddHighlightAnnotationPřidat anotaci zvýraznění textu
AnnotationCollection.AddInkAnnotationPřidat anotaci volného kreslení
AnnotationCollection.AddSquareAnnotationPřidat anotaci obdélníkového tvaru
AnnotationCollection.AddCircleAnnotationPřidat anotaci eliptického tvaru
AnnotationCollection.AddLineAnnotationPřidat anotaci čáry
Annotation.FlattenVypálit vzhled anotace do obsahu stránky
Annotation.AcceptRozeslat na typové přetížení AnnotationSelector.Visit
AnnotationSelectorNávštěvník, který sbírá anotace podle typu
LinkAnnotationPodtřída anotace nesoucí URI nebo akci
TextAnnotationAnotace lepicí poznámky
InkAnnotationAnotace volného kreslení s cestami tahů
StampAnnotationAnotace překrytí obrázkem nebo ikonou
WidgetAnnotation.ExportToJsonSerializovat data formulářových polí do JSON
FormRozhraní AcroForm; enumeruje a manipuluje s poli
FieldZákladní třída pro formulářová pole (TextBoxField, CheckboxField, atd.)
CheckboxFieldZaškrtávací políčko formulářového pole
TextBoxFieldJednořádkové/víceřádkové textové vstupní pole
ComboBoxFieldRozbalovací výběrové pole
RadioButtonFieldSkupinové pole přepínačů
AnnotationTypeVýčet druhů anotací
PdfAction.CreateUriTovárna na akce odkazů URI
PdfAction.CreateJavaScriptTovárna na JavaScriptové akce

Viz také

 Čeština