Gerenciamento de Documentos
Gerenciamento de Documentos
Document é o objeto raiz no Aspose.PDF FOSS para .NET. Ele representa um
arquivo PDF completo e fornece acesso a páginas, metadados, campos de formulário e todas
as demais estruturas PDF. Abra arquivos existentes com Document.Open e crie novos
com o construtor Document.
Abrindo e criando documentos
// Open from a byte array
using var doc = Document.Open(File.ReadAllBytes("input.pdf"));
// Open from a file path
using var doc2 = new Document("input.pdf");
// Create a new empty document
using var newDoc = new Document();
newDoc.Pages.Add();
newDoc.Save("new.pdf");Trabalhando com páginas
PageCollection gerencia as páginas do documento. Acesse as páginas por índice baseado em 1, adicione novas páginas ou remova as existentes.
using var doc = Document.Open(pdfBytes);
// Access first page
var page = doc.Pages[1];
// Add a blank page
var newPage = doc.Pages.Add();
// Get page count
int count = doc.Pages.Count;Geometria da página
Cada página define várias caixas delimitadoras. Use os métodos setter em Page para ajustá‑las.
var page = doc.Pages[1];
page.SetMediaBox(new Rectangle(0, 0, 612, 792));
page.SetCropBox(new Rectangle(36, 36, 576, 756));
page.SetRotation(90);Salvando documentos
Salve em um caminho de arquivo, um fluxo ou um array de bytes.
// Save to file
doc.Save("output.pdf");
// Save to stream
using var ms = new MemoryStream();
doc.Save(ms);Anexos de arquivo
FileSpecification representa anexos de arquivos incorporados em um PDF.
var spec = new FileSpecification("data.csv", "Embedded data file");
doc.EmbeddedFiles.Add(spec);Carimbos de imagem
ImageStamp sobrepõe uma imagem raster em uma página em uma posição especificada.
var stamp = new ImageStamp("logo.png");
stamp.Put(doc.Pages[1]);
doc.Save("stamped.pdf");Coleções de operadores
OperatorCollection em cada página contém os operadores brutos do fluxo de conteúdo. Use‑o para inspeção ou manipulação de conteúdo de baixo nível.
var ops = doc.Pages[1].Contents;
foreach (var op in ops)
{
// Inspect each operator
}Dicas e Melhores Práticas
- Envolva
Documentem uma instruçãousingpara liberar os manipuladores de arquivo prontamente. - Use
Document.Open(byte[])para fluxos de trabalho em memória a fim de evitar problemas de bloqueio de arquivos. - Modifique as caixas de página (MediaBox, CropBox) antes de adicionar conteúdo para garantir o espaço de coordenadas correto.
- Chame
Saveapenas uma vez após todas as modificações — salvamentos repetidos são mais lentos, mas seguros. - Use
PageCollection.Accept(AnnotationSelector)para processar em lote anotações em todas as páginas.
Problemas Comuns
| Issue | Cause | Fix |
|---|---|---|
Document.Open lança em PDF válido | O arquivo está criptografado com uma senha | Forneça o parâmetro de senha no construtor |
| A contagem de páginas é 0 após a construção | Novo Document() inicia vazio | Chame doc.Pages.Add() para adicionar uma página em branco |
| O arquivo salvo é maior que o esperado | Imagens ou fontes incorporadas várias vezes | Use otimização (consulte o guia de Conversão e Otimização) |
Pages[0] lança erro de índice | As páginas são baseadas em 1, não em 0 | Use Pages[1] para a primeira página |
Perguntas Frequentes
Como faço para mesclar dois documentos PDF?
Use PdfFileEditor.Concatenate da API Facades, ou copie manualmente páginas de um documento para outro usando PageCollection.
Posso abrir um PDF a partir de uma URL ou fluxo?
Sim. Leia o conteúdo da URL em um byte[] primeiro, depois passe‑o para
Document.Open(byte[]).
Como excluir uma página?
Chame doc.Pages.Delete(pageNumber) onde pageNumber é baseado em 1.
O Document é thread-safe?
Não. Cada thread deve trabalhar com sua própria instância Document.
Resumo da Referência da API
| Class / Method | Description |
|---|---|
Document | Objeto raiz PDF; contém páginas, metadados e campos de formulário |
Document.Open | Fábrica estática para abrir um PDF a partir de um array de bytes |
Document.Save | Serializa o documento para um arquivo ou fluxo |
Page | Página PDF única com conteúdo, anotações e geometria |
Page.SetMediaBox | Define a caixa de mídia da página |
Page.SetCropBox | Define a área de recorte visível |
Page.SetRotation | Gira a página em 0, 90, 180 ou 270 graus |
PageCollection | Coleção ordenada de páginas em um documento |
PageCollection.Add | Anexa uma página em branco |
OperatorCollection | Operadores brutos de fluxo de conteúdo para uma página |
FileSpecification | Descritor de anexo de arquivo incorporado |
ImageStamp | Carimbo de sobreposição de imagem para páginas |
XFormCollection | XObjects de formulário reutilizáveis no documento |