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 jePage.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 instancesInteraktivní 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í
Rectanglesouřadnice v jednotkách uživatelského prostoru PDF (1/72 palce). - Používejte
AddLinkAnnotationsPdfActionpro 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.Fieldsmí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ém | Příčina | Oprava |
|---|---|---|
| Anotace není po uložení viditelná | Obdélník má nulovou plochu nebo je mimo hranice stránky | Ověřte, že souřadnice spadají do stránky MediaBox |
LinkAnnotation.Uri vrací null | Odkaz používá akci GoTo nebo JavaScript, nikoli URI akci | Vyřešte slovník akcí pomocí PdfAction.Create a zkontrolujte ActionType |
| Hodnota formulářového pole je prázdný řetězec | Pole existuje, ale nemá záznam /V | Zkontrolujte, že field.Value není null před zpracováním |
Flatten() vyhazuje | Anotace 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 / Method | Description |
|---|---|
AnnotationCollection | Typová kolekce na každém Page; poskytuje Add* pomocníky pro všechny typy anotací |
AnnotationCollection.AddTextAnnotation | Přidat anotaci lepicí poznámky |
AnnotationCollection.AddLinkAnnotation | Přidat odkaz s URI, cílem stránky nebo vlastní akcí |
AnnotationCollection.AddHighlightAnnotation | Přidat anotaci zvýraznění textu |
AnnotationCollection.AddInkAnnotation | Přidat anotaci volného kreslení |
AnnotationCollection.AddSquareAnnotation | Přidat anotaci obdélníkového tvaru |
AnnotationCollection.AddCircleAnnotation | Přidat anotaci eliptického tvaru |
AnnotationCollection.AddLineAnnotation | Přidat anotaci čáry |
Annotation.Flatten | Vypálit vzhled anotace do obsahu stránky |
Annotation.Accept | Rozeslat na typové přetížení AnnotationSelector.Visit |
AnnotationSelector | Návštěvník, který sbírá anotace podle typu |
LinkAnnotation | Podtřída anotace nesoucí URI nebo akci |
TextAnnotation | Anotace lepicí poznámky |
InkAnnotation | Anotace volného kreslení s cestami tahů |
StampAnnotation | Anotace překrytí obrázkem nebo ikonou |
WidgetAnnotation.ExportToJson | Serializovat data formulářových polí do JSON |
Form | Rozhraní AcroForm; enumeruje a manipuluje s poli |
Field | Základní třída pro formulářová pole (TextBoxField, CheckboxField, atd.) |
CheckboxField | Zaškrtávací políčko formulářového pole |
TextBoxField | Jednořádkové/víceřádkové textové vstupní pole |
ComboBoxField | Rozbalovací výběrové pole |
RadioButtonField | Skupinové pole přepínačů |
AnnotationType | Výčet druhů anotací |
PdfAction.CreateUri | Továrna na akce odkazů URI |
PdfAction.CreateJavaScript | Továrna na JavaScriptové akce |