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 instancesCampos 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
RectangleCoordenadas em unidades de espaço do utilizador PDF (1/72 polegadas). - Utilização:
AddLinkAnnotationcom umPdfActionPara 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.FieldsEm 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ão | Causa da morte | Correção |
|---|---|---|
| Anotativa não visível após a salvação | Rectângulo tem área zero ou está fora dos limites da página | Verificar que as coordenadas estão dentro da página MediaBox |
LinkAnnotation.Uri retorna null | Link usa uma ação GoTo ou JavaScript, não uma acção URI | Resolver o dicionário de ações via PdfAction.Create e verifique ActionType |
| Valor do campo de formulário é cadeia vazia | O campo existe mas não tem /V entrada | Verificação field.Value não é nulo antes do tratamento. |
Flatten() lança | A anotação não tem /P (página) referência | Certifique-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étodo | Descrição: |
|---|---|
AnnotationCollection | Coleção tipada em cada um dos tipos de dados. Page; prevê: Add* auxiliares para todos os tipos de anotações |
AnnotationCollection.AddTextAnnotation | Adicionar uma anotação de nota-pega |
AnnotationCollection.AddLinkAnnotation | Adicionar um link com URI, destino de página ou ação personalizada |
AnnotationCollection.AddHighlightAnnotation | Adicionar uma anotação de destaque do texto |
AnnotationCollection.AddInkAnnotation | Adicionar uma anotação de desenho à mão livre |
AnnotationCollection.AddSquareAnnotation | Adicionar uma anotação de forma retangular |
AnnotationCollection.AddCircleAnnotation | Adicionar uma anotação de forma elíptica |
AnnotationCollection.AddLineAnnotation | Adicionar uma anotação de linha |
Annotation.Flatten | Gravar a aparência de anotações no conteúdo da página |
Annotation.Accept | Envio para digitado AnnotationSelector.Visit sobrecarga |
AnnotationSelector | Visitante que coleta anotações por tipo de conteúdo |
LinkAnnotation | Subclasse de anotações que contém um URI ou uma ação |
TextAnnotation | Anotativa em notas adesivas |
InkAnnotation | Anotativa de desenho à mão livre com traços de traço |
StampAnnotation | Anotativa de sobreposição da imagem ou do ícone |
WidgetAnnotation.ExportToJson | Serializar dados de campos de formulário em JSON |
Form | Fassada do AcroForm; enumera e manipula campos |
Field | Classe de base para os campos dos formulários (TextBoxField, CheckboxField, etc.) |
CheckboxField | Campo de formulário da caixa de seleção |
TextBoxField | Campo de entrada de texto único/múltiplos linhas |
ComboBoxField | Campo de opção suspensa |
RadioButtonField | Campo de grupo do botão rádio |
AnnotationType | Enumeração dos tipos de anotações |
PdfAction.CreateUri | Fábrica para ações de ligação URI |
PdfAction.CreateJavaScript | Fábrica para ações JavaScript |