Anotativas e formulários

Anotativas e formulários

Anotativas e formulários

Aspose.PDF FOSS for .NET gives you full read/write access to PDF annotations O ponto de entrada primário para anotações é o código-fonte. Page.Annotations (uma AnnotationCollection), enquanto os campos de formulário são acessados. através de: Document.Form.Ambos os subsistemas funcionam inteiramente em memória e não requerem a utilização de qualquer dispositivo que permita o funcionamento do sistema. - A chave da licença.


Adição de anotações

AnnotationCollection expõe métodos auxiliares tipados para cada padrão; cada método aceita um tipo de anotação. Rectangle que define a anotação posição na página, mais parâmetros específicos do tipo.

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

Anotativas e ações de ligação

Os links combinam um retângulo clicável com uma PdfAction.A biblioteca apoia a URI, GoTo, JavaScript, Nomeado e Ações de Lançamento.

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

Para ler um link de volta depois de abrir um PDF salvo, lançar a anotação para LinkAnnotation e inspeccionar o seu Uri propriedade ou resolver a acção. dicionário via PdfAction.Create.


Anotativas de marcação e forma

Anotações de marcação (sublinhar, sublinher, amarração) marcam o texto existente. Anotações da forma (quadrado, círculo, linha, tinta) desenham geometria na página.

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

Anotativas de carimbos

Anotações de carimbo sobrepõem uma imagem ou ícone predefinido em uma página.

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

Anotativas de aplanamento

Chama-me . Flatten() em qualquer anotação para gravar a sua aparência visual na página fluxo de conteúdo e removê-lo da lista interativa de anotações.

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

O padrão de visitante com AnnotationSelector

AnnotationSelector implementa o padrão de visitante para que você possa filtrar Anotativas por tipo sem fundição manual.

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
}

Passe uma instância de anotação tipada para o construtor filtrar apenas esse tipo:

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

Campos de formulário interativos

Acesso aos campos do AcroForm através de: Document.Form.O . Form exposições de classe Operações de leitura/escritura a nível de campo e suporta exportação JSON.

using var doc = Document.Open(pdfBytes);

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

Subclasses de campo incluem: TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField, e SignatureField.


Exportação de dados do formulário para JSON

WidgetAnnotation fornece: ExportToJson sobrecargas para a serialização de dados em campo; um fluxo ou caminho de arquivo. ExportFieldsToJsonOptions Parâmetro: Controla a formatação de saída.

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

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

Dicas e melhores práticas

  • Especificar sempre explícito Rectangle Coordenadas em unidades de espaço do utilizador PDF (1/72 polegadas).
  • Utilização: AddLinkAnnotation com um PdfAction Para máxima flexibilidade as ações URI, GoTo, JavaScript e Named são todas suportadas.
  • Chama-me . Flatten() antes de distribuir um PDF se quiser que as anotações apareçam em visores não interativos.
  • Acessos a campos de formulário via Document.Form.Fields Em vez de iteração anotações da página a coleção de formulários lida com o agrupamento de campos cruzados.
  • Salvar e reabrir o documento para verificar a fidelidade de ida e volta das anotações, especialmente em caso de acções personalizadas.

Problemas comuns

EmissãoCausa da morteCorreção
Anotativa não visível após a salvaçãoRectângulo tem área zero ou está fora dos limites da páginaVerificar que as coordenadas estão dentro da página MediaBox
LinkAnnotation.Uri retorna nullLink usa uma ação GoTo ou JavaScript, não uma acção URIResolver o dicionário de ações via PdfAction.Create e verifique ActionType
Valor do campo de formulário é cadeia vaziaO campo existe mas não tem /V entradaVerificação field.Value não é nulo antes do tratamento.
Flatten() lançaA anotação não tem /P (página) referênciaCertifique-se de que a anotação foi adicionada através do Page.Annotations

FAQ

Como adiciono um hiperlink a uma página PDF?

Utilização: page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) a) para o criar um link URI clicável no retângulo especificado.

Posso ler os valores de campo do formulário num PDF existente?

Sim, abre o documento com a letra “D” e “C”. Document.Open, então iterar Document.Form.Fields e ler o texto. Value propriedade sobre cada um dos Field.

Que tipos de anotações a biblioteca suporta?

A biblioteca suporta texto, texto livre, link, destaque, sublinhar, amarração, quadrado, círculo, linha, tinta, carimbo, cartão anexado, som, polígono;, Polyline, widget, marca d’água e anotações 3D. Todos os tipos estão disponíveis através de AnnotationCollection métodos auxiliares ou construção directa.

Como filtrar anotações por tipo?

Utilização: AnnotationSelector com uma anotação de modelo digitado. page.Accept(selector) e inspeccionar selector.Selected para as anotações correspondentes.

Posso aplanar apenas anotações específicas?

Sim, liga. Flatten() sobre o indivíduo Annotation instâncias em vez de iterar A coleção inteira.


Resumo de referência da API

Classe / MétodoDescrição:
AnnotationCollectionColeção tipada em cada um dos tipos de dados. Page; prevê: Add* auxiliares para todos os tipos de anotações
AnnotationCollection.AddTextAnnotationAdicionar uma anotação de nota-pega
AnnotationCollection.AddLinkAnnotationAdicionar um link com URI, destino de página ou ação personalizada
AnnotationCollection.AddHighlightAnnotationAdicionar uma anotação de destaque do texto
AnnotationCollection.AddInkAnnotationAdicionar uma anotação de desenho à mão livre
AnnotationCollection.AddSquareAnnotationAdicionar uma anotação de forma retangular
AnnotationCollection.AddCircleAnnotationAdicionar uma anotação de forma elíptica
AnnotationCollection.AddLineAnnotationAdicionar uma anotação de linha
Annotation.FlattenGravar a aparência de anotações no conteúdo da página
Annotation.AcceptEnvio para digitado AnnotationSelector.Visit sobrecarga
AnnotationSelectorVisitante que coleta anotações por tipo de conteúdo
LinkAnnotationSubclasse de anotações que contém um URI ou uma ação
TextAnnotationAnotativa em notas adesivas
InkAnnotationAnotativa de desenho à mão livre com traços de traço
StampAnnotationAnotativa de sobreposição da imagem ou do ícone
WidgetAnnotation.ExportToJsonSerializar dados de campos de formulário em JSON
FormFassada do AcroForm; enumera e manipula campos
FieldClasse de base para os campos dos formulários (TextBoxField, CheckboxField, etc.)
CheckboxFieldCampo de formulário da caixa de seleção
TextBoxFieldCampo de entrada de texto único/múltiplos linhas
ComboBoxFieldCampo de opção suspensa
RadioButtonFieldCampo de grupo do botão rádio
AnnotationTypeEnumeração dos tipos de anotações
PdfAction.CreateUriFábrica para ações de ligação URI
PdfAction.CreateJavaScriptFábrica para ações JavaScript

Ver também:

 Português