Como Converter PDF para SVG em C#
O namespace PdfToSvg no IronPDF fornece uma API dedicada para converter páginas de PDF em gráficos vetoriais escaláveis. SVG (Scalable Vector Graphics) é um formato baseado em XML que permanece nítido em qualquer nível de zoom: ao contrário das imagens rasterizadas (PNG, JPEG), a saída SVG não pixeliza quando ampliada. Converter páginas de PDF para SVG é útil para incorporar conteúdo de documentos em páginas da web, gerar pré-visualizações independentes de resolução e extrair gráficos vetoriais de relatórios, faturas ou desenhos técnicos.
A conversão funciona por página: abra um PDF com PdfDocument.Open(), acesse páginas individuais através da coleção Pages, e então chame SaveAsSvg() ou ToSvgString() em cada PdfPage para produzir a saída SVG. Variantes assíncronas estão disponíveis para todos os métodos de conversão.
Esta é a direção PDF-para-SVG: extraindo SVG vetorial de arquivos PDF existentes. Para o fluxo de trabalho inverso (incorporando gráficos SVG em um novo PDF), veja o como fazer SVG para PDF.
Inicie um teste gratuito de 30 dias para testar a conversão de PDF para SVG.
O exemplo abaixo abre um PDF e salva sua primeira página como um arquivo SVG.
-
1Install IronPDF with NuGet Package Manager
-
2Copie e execute este trecho de código.
using PdfToSvg; using var pdf = PdfDocument.Open("report.pdf"); pdf.Pages[0].SaveAsSvg("page-one.svg");Imports PdfToSvg Using pdf = PdfDocument.Open("report.pdf") pdf.Pages(0).SaveAsSvg("page-one.svg") End UsingImports PdfToSvg Using pdf = PdfDocument.Open("report.pdf") pdf.Pages(0).SaveAsSvg("page-one.svg") End Using -
3Implante para testar em seu ambiente de produção.
Comece a usar IronPDF em seu projeto hoje com uma avaliação gratuita
Fluxo de Trabalho Mínimo (3 Passos)
- Instale o IronPDF via NuGet:
Install-Package IronPdf - Abra um PDF com
PdfDocument.Open()do namespacePdfToSvg - Chame
SaveAsSvg()em qualquer página para gravar o arquivo SVG
Como Converter uma Única Página de PDF para SVG?
A classe PdfPage fornece quatro métodos de conversão:
SaveAsSvg(): grava a página em um caminho de arquivo ouStream.SaveAsSvgAsync(): a variante não bloqueante deSaveAsSvg().ToSvgString(): retorna a marcação SVG como umastring, útil quando a saída alimenta um mecanismo de template, uma resposta HTTP ou um pipeline downstream.ToSvgStringAsync(): a variante não bloqueante deToSvgString().
Todos os quatro aceitam um argumento opcional SvgConversionOptions e um CancellationToken.
O exemplo abaixo salva a primeira página em um arquivo, obtém a mesma página de volta como uma string e a grava em um stream. Ele mostra todos os três alvos de saída.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("invoice.pdf");
// Save to a file
pdf.Pages[0].SaveAsSvg("invoice-page1.svg");
// Get SVG as a string
string svgMarkup = pdf.Pages[0].ToSvgString();
Console.WriteLine($"SVG length: {svgMarkup.Length} characters");
// Save to a stream
using var stream = new FileStream("invoice-page1-stream.svg", FileMode.Create);
pdf.Pages[0].SaveAsSvg(stream);using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("invoice.pdf");
// Save to a file
pdf.Pages[0].SaveAsSvg("invoice-page1.svg");
// Get SVG as a string
string svgMarkup = pdf.Pages[0].ToSvgString();
Console.WriteLine($"SVG length: {svgMarkup.Length} characters");
// Save to a stream
using var stream = new FileStream("invoice-page1-stream.svg", FileMode.Create);
pdf.Pages[0].SaveAsSvg(stream);Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("invoice.pdf")
' Save to a file
pdf.Pages(0).SaveAsSvg("invoice-page1.svg")
' Get SVG as a string
Dim svgMarkup As String = pdf.Pages(0).ToSvgString()
Console.WriteLine($"SVG length: {svgMarkup.Length} characters")
' Save to a stream
Using stream As New FileStream("invoice-page1-stream.svg", FileMode.Create)
pdf.Pages(0).SaveAsSvg(stream)
End Using
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("invoice.pdf")
' Save to a file
pdf.Pages(0).SaveAsSvg("invoice-page1.svg")
' Get SVG as a string
Dim svgMarkup As String = pdf.Pages(0).ToSvgString()
Console.WriteLine($"SVG length: {svgMarkup.Length} characters")
' Save to a stream
Using stream As New FileStream("invoice-page1-stream.svg", FileMode.Create)
pdf.Pages(0).SaveAsSvg(stream)
End Using
End UsingPdfDocument implementa IDisposable, então envolvê-lo em uma instrução using libera recursos nativos quando a conversão é concluída. A coleção Pages é indexada a partir de zero, então Pages[0] é a primeira página.
PdfToSvg.PdfDocument é uma classe distinta de IronPdf.PdfDocument; a diretiva using PdfToSvg; a traz para o escopo.Quando o PDF para SVG é a Escolha Certa?
SVG é a melhor saída quando uma página será ampliada, incorporada em um layout web ou reestilizada após a conversão: o texto permanece selecionável e pesquisável, e os caminhos permanecem editáveis em ferramentas vetoriais. Para páginas escaneadas ou fotográficas, não há conteúdo vetorial a preservar, então uma exportação raster é menor e não perde nada.
Como Converter Todas as Páginas de um PDF para SVG?
A coleção Pages é indexada a partir de zero, então adicionar um ao índice do loop fornece um número de página legível para cada arquivo de saída.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("multi-page-report.pdf");
Console.WriteLine($"Total pages: {pdf.Pages.Count}");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
string outputPath = $"page_{i + 1}.svg";
page.SaveAsSvg(outputPath);
Console.WriteLine($"Saved: {outputPath}");
}using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("multi-page-report.pdf");
Console.WriteLine($"Total pages: {pdf.Pages.Count}");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
string outputPath = $"page_{i + 1}.svg";
page.SaveAsSvg(outputPath);
Console.WriteLine($"Saved: {outputPath}");
}Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("multi-page-report.pdf")
Console.WriteLine($"Total pages: {pdf.Pages.Count}")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
Dim outputPath As String = $"page_{i + 1}.svg"
page.SaveAsSvg(outputPath)
Console.WriteLine($"Saved: {outputPath}")
Next
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("multi-page-report.pdf")
Console.WriteLine($"Total pages: {pdf.Pages.Count}")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
Dim outputPath As String = $"page_{i + 1}.svg"
page.SaveAsSvg(outputPath)
Console.WriteLine($"Saved: {outputPath}")
Next
End UsingPara documentos grandes, a abordagem assíncrona descrita na próxima seção evita bloquear o thread da aplicação durante a conversão.
Como Usar Métodos Assíncronos para Conversão de PDF para SVG?
As variantes assíncronas, SaveAsSvgAsync() e ToSvgStringAsync(), mantêm a E/S fora do thread principal. PdfDocument.OpenAsync() carrega o PDF de forma assíncrona também. Esses métodos são a escolha certa em manipuladores ASP.NET Core, serviços em segundo plano ou qualquer aplicação com uma interface de usuário responsiva.
O exemplo abaixo abre o PDF e converte cada página de forma assíncrona, para que o thread de chamada permaneça livre enquanto o trabalho é executado.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = await PdfDocument.OpenAsync("dashboard.pdf");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
await page.SaveAsSvgAsync($"dashboard_page_{i + 1}.svg");
}
// Or get the SVG markup as a string
string firstPageSvg = await pdf.Pages[0].ToSvgStringAsync();using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = await PdfDocument.OpenAsync("dashboard.pdf");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
await page.SaveAsSvgAsync($"dashboard_page_{i + 1}.svg");
}
// Or get the SVG markup as a string
string firstPageSvg = await pdf.Pages[0].ToSvgStringAsync();Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = Await PdfDocument.OpenAsync("dashboard.pdf")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
Await page.SaveAsSvgAsync($"dashboard_page_{i + 1}.svg")
Next
' Or get the SVG markup as a string
Dim firstPageSvg As String = Await pdf.Pages(0).ToSvgStringAsync()
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = Await PdfDocument.OpenAsync("dashboard.pdf")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
Await page.SaveAsSvgAsync($"dashboard_page_{i + 1}.svg")
Next
' Or get the SVG markup as a string
Dim firstPageSvg As String = Await pdf.Pages(0).ToSvgStringAsync()
End UsingComo Configurar Opções de Conversão SVG?
SvgConversionOptions controla como a saída SVG é gerada. As propriedades mais comumente usadas são:
IncludeAnnotations: defina comotruepara renderizar camadas de anotações do PDF na saída SVGIncludeLinks: defina comotruepara transportar hyperlinks do PDF como elementos<a>no SVG, mantendo a saída navegável em um navegadorIncludeHiddenText: revela texto que existe no fluxo de conteúdo do PDF, mas não é visível, útil para acessibilidade ou pipelines de extração de textoMinStrokeWidth: define um limite (em unidades de usuário SVG) para traços renderizados, evitando que caminhos de linha fina desapareçam em escalas de visualização normais
O código abaixo ativa anotações e links, define uma largura mínima de traço e então exporta cada página usando essas opções.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
var options = new SvgConversionOptions
{
IncludeAnnotations = true,
IncludeLinks = true,
IncludeHiddenText = false,
MinStrokeWidth = 0.5
};
using var pdf = PdfDocument.Open("annotated-report.pdf");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
page.SaveAsSvg($"page_{i + 1}.svg", options);
}using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
var options = new SvgConversionOptions
{
IncludeAnnotations = true,
IncludeLinks = true,
IncludeHiddenText = false,
MinStrokeWidth = 0.5
};
using var pdf = PdfDocument.Open("annotated-report.pdf");
for (int i = 0; i < pdf.Pages.Count; i++)
{
var page = pdf.Pages[i];
page.SaveAsSvg($"page_{i + 1}.svg", options);
}Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Dim options = New SvgConversionOptions With {
.IncludeAnnotations = True,
.IncludeLinks = True,
.IncludeHiddenText = False,
.MinStrokeWidth = 0.5
}
Using pdf = PdfDocument.Open("annotated-report.pdf")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
page.SaveAsSvg($"page_{i + 1}.svg", options)
Next
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Dim options = New SvgConversionOptions With {
.IncludeAnnotations = True,
.IncludeLinks = True,
.IncludeHiddenText = False,
.MinStrokeWidth = 0.5
}
Using pdf = PdfDocument.Open("annotated-report.pdf")
For i As Integer = 0 To pdf.Pages.Count - 1
Dim page = pdf.Pages(i)
page.SaveAsSvg($"page_{i + 1}.svg", options)
Next
End UsingDuas propriedades adicionais controlam como o espaçamento de texto é tratado. CollapseSpaceEmbeddedFont e CollapseSpaceLocalFont definem limites (como frações do tamanho da fonte) abaixo dos quais lacunas entre caracteres adjacentes são colapsadas em uma única execução de texto. Valores mais apertados preservam mais fidelidade de espaçamento; valores mais frouxos produzem arquivos SVG menores.
Para casos de uso avançados, a propriedade FontResolver aceita um resolvedor personalizado que mapeia referências de fontes PDF para recursos de fontes locais, essencial quando o documento de origem referencia fontes que não estão incorporadas. A propriedade ImageResolver controla como imagens raster dentro do PDF são tratadas na saída SVG: a codificação inline produz um arquivo SVG autônomo, enquanto a resolução de caminho externo mantém o SVG compacto. A referência da API SvgConversionOptions documenta todas as propriedades configuráveis.
Como Controlar a Visibilidade de Camadas de PDF na Saída SVG?
Um PDF com camadas expõe suas camadas através da coleção OptionalContentGroups em PdfDocument. Cada entrada é um OptionalContentGroup que emparelha um Name somente leitura (o rótulo da camada do documento de origem) com uma flag Visible de leitura/gravação. Definir Visible controla se essa camada é renderizada durante a conversão SVG, então um único PDF pode produzir diferentes variantes SVG sem editar o arquivo.
Você não precisa saber os nomes das camadas com antecedência. A coleção reflete as camadas realmente presentes no documento, então você pode enumerá-la, ler cada Name e desligar aquelas que deseja ocultar. ToString() retorna o mesmo valor que Name, o que é conveniente para registro.
O exemplo abaixo lista cada camada no PDF, oculta a chamada Watermark e exporta a primeira página com essa camada suprimida.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("technical-drawing.pdf");
// List the layers that actually exist in this PDF
foreach (var layer in pdf.OptionalContentGroups)
{
Console.WriteLine($"{layer.Name} visible: {layer.Visible}");
}
// Hide the watermark layer; every other layer stays visible
foreach (var layer in pdf.OptionalContentGroups)
{
if (layer.Name == "Watermark")
{
layer.Visible = false;
}
}
// Visibility set on OptionalContentGroups is applied during conversion
pdf.Pages[0].SaveAsSvg("drawing-no-watermark.svg");using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
using var pdf = PdfDocument.Open("technical-drawing.pdf");
// List the layers that actually exist in this PDF
foreach (var layer in pdf.OptionalContentGroups)
{
Console.WriteLine($"{layer.Name} visible: {layer.Visible}");
}
// Hide the watermark layer; every other layer stays visible
foreach (var layer in pdf.OptionalContentGroups)
{
if (layer.Name == "Watermark")
{
layer.Visible = false;
}
}
// Visibility set on OptionalContentGroups is applied during conversion
pdf.Pages[0].SaveAsSvg("drawing-no-watermark.svg");Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("technical-drawing.pdf")
' List the layers that actually exist in this PDF
For Each layer In pdf.OptionalContentGroups
Console.WriteLine($"{layer.Name} visible: {layer.Visible}")
Next
' Hide the watermark layer; every other layer stays visible
For Each layer In pdf.OptionalContentGroups
If layer.Name = "Watermark" Then
layer.Visible = False
End If
Next
' Visibility set on OptionalContentGroups is applied during conversion
pdf.Pages(0).SaveAsSvg("drawing-no-watermark.svg")
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
Using pdf = PdfDocument.Open("technical-drawing.pdf")
' List the layers that actually exist in this PDF
For Each layer In pdf.OptionalContentGroups
Console.WriteLine($"{layer.Name} visible: {layer.Visible}")
Next
' Hide the watermark layer; every other layer stays visible
For Each layer In pdf.OptionalContentGroups
If layer.Name = "Watermark" Then
layer.Visible = False
End If
Next
' Visibility set on OptionalContentGroups is applied during conversion
pdf.Pages(0).SaveAsSvg("drawing-no-watermark.svg")
End UsingUm caso de uso típico é um desenho técnico, onde camadas de anotação, dimensão ou marca d'água precisam ser alternadas independentemente. Como a visibilidade é definida por conversão, o mesmo PDF de origem pode produzir várias variantes SVG sem alterações no arquivo.
Como Abrir PDFs de Streams e com Senhas?
PdfDocument.Open() aceita um Stream além de um caminho de arquivo. O parâmetro leaveOpen (padrão false) controla se o stream é fechado quando o documento é descartado. Ambas as sobrecargas de caminho e stream aceitam um objeto OpenOptions para configuração, como fornecer uma senha para documentos criptografados, e um CancellationToken para cancelamento cooperativo em fluxos de trabalho de longa duração.
O trecho abre um PDF de um stream, salva sua primeira página como SVG, e então imprime se o arquivo está criptografado, seu título e sua contagem de páginas.
using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
// Open from a stream (e.g., downloaded from a web API)
using var fileStream = File.OpenRead("document.pdf");
using var pdf = PdfDocument.Open(fileStream, leaveOpen: false);
pdf.Pages[0].SaveAsSvg("from-stream.svg");
// Check if a PDF is encrypted
Console.WriteLine($"Encrypted: {pdf.IsEncrypted}");
// Access document metadata
Console.WriteLine($"Title: {pdf.Info.Title}");
Console.WriteLine($"Pages: {pdf.Pages.Count}");using PdfToSvg;
using PdfDocument = PdfToSvg.PdfDocument;
// Open from a stream (e.g., downloaded from a web API)
using var fileStream = File.OpenRead("document.pdf");
using var pdf = PdfDocument.Open(fileStream, leaveOpen: false);
pdf.Pages[0].SaveAsSvg("from-stream.svg");
// Check if a PDF is encrypted
Console.WriteLine($"Encrypted: {pdf.IsEncrypted}");
// Access document metadata
Console.WriteLine($"Title: {pdf.Info.Title}");
Console.WriteLine($"Pages: {pdf.Pages.Count}");Imports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
' Open from a stream (e.g., downloaded from a web API)
Using fileStream = File.OpenRead("document.pdf")
Using pdf = PdfDocument.Open(fileStream, leaveOpen:=False)
pdf.Pages(0).SaveAsSvg("from-stream.svg")
' Check if a PDF is encrypted
Console.WriteLine($"Encrypted: {pdf.IsEncrypted}")
' Access document metadata
Console.WriteLine($"Title: {pdf.Info.Title}")
Console.WriteLine($"Pages: {pdf.Pages.Count}")
End Using
End UsingImports PdfToSvg
Imports PdfDocument = PdfToSvg.PdfDocument
' Open from a stream (e.g., downloaded from a web API)
Using fileStream = File.OpenRead("document.pdf")
Using pdf = PdfDocument.Open(fileStream, leaveOpen:=False)
pdf.Pages(0).SaveAsSvg("from-stream.svg")
' Check if a PDF is encrypted
Console.WriteLine($"Encrypted: {pdf.IsEncrypted}")
' Access document metadata
Console.WriteLine($"Title: {pdf.Info.Title}")
Console.WriteLine($"Pages: {pdf.Pages.Count}")
End Using
End UsingA propriedade Info expõe metadados do documento incluindo título, autor e data de criação. A propriedade Permissions relata quais operações o PDF permite (impressão, cópia), e IsEncrypted indica se o arquivo requer uma senha para abrir.
Próximos Passos
O namespace PdfToSvg converte páginas de PDF em arquivos, streams ou strings SVG. Ele funciona por página, com controle total sobre anotações, links, visibilidade de texto, largura de traço e alternância de camadas. Todos os métodos têm variantes assíncronas para fluxos de trabalho não bloqueantes.
Explore a referência da API PdfPage para a superfície completa do método de conversão, a referência SvgConversionOptions para cada propriedade configurável, e a referência PdfDocument para opções de abertura e carregamento. Para a direção inversa (incorporando SVG em um PDF), veja o como fazer SVG para PDF.
Veja opções de licenciamento a partir de $999.
Perguntas frequentes
Qual é o propósito de converter arquivos PDF para o formato SVG?
Converter arquivos PDF para o formato SVG permite incorporar conteúdo de documentos em páginas web, gerar pré-visualizações independentes de resolução e extrair gráficos vetoriais de relatórios, faturas ou desenhos técnicos. O SVG é escalável e não pixeliza, tornando-o ideal para aplicações web e de design.
Como o PdfToSvg do IronPDF pode ser utilizado para uma conversão de PDF para SVG?
O namespace PdfToSvg do IronPDF fornece uma API dedicada para converter páginas de PDF para o formato SVG. Você pode abrir um PDF com PdfDocument.Open(), acessar as páginas individuais através da coleção Pages e então chamar SaveAsSvg() ou ToSvgString() em cada PdfPage para produzir a saída SVG.
As páginas de PDF podem ser convertidas para SVG de forma assíncrona usando o IronPDF?
Sim, o IronPDF suporta conversões assíncronas de PDF para SVG. Você pode usar os métodos SaveAsSvgAsync() e ToSvgStringAsync() para manter as operações de I/O fora da thread principal, o que é benéfico em aplicações responsivas.
O que são SvgConversionOptions no IronPDF?
SvgConversionOptions no IronPDF controlam como a saída SVG é gerada. As opções incluem se devem ser incluídas anotações, links e texto oculto na saída, bem como definir a largura mínima do traço. Essas opções permitem a personalização do processo de conversão para SVG.
É possível controlar a visibilidade das camadas ao converter PDF para SVG usando o IronPDF?
Sim, o IronPDF permite controlar a visibilidade das camadas de PDF usando a coleção OptionalContentGroups no PdfDocument. Você pode alternar a visibilidade de camadas específicas, o que determina se elas são renderizadas durante a conversão para SVG.
Como o IronPDF lida com arquivos PDF criptografados para conversão para SVG?
O IronPDF pode abrir arquivos PDF criptografados usando o objeto OpenOptions, que inclui o fornecimento de uma senha. Isso permite que PDFs criptografados sejam convertidos em SVG após a autenticação.
Quais são os benefícios de usar o formato SVG para PDFs em aplicações web?
O formato SVG é benéfico para aplicações web porque mantém gráficos escaláveis de alta qualidade sem pixelização, suporta texto selecionável e pesquisável, e permite modificações de estilo usando CSS ou scripts.
O IronPDF pode converter todas as páginas de um PDF em arquivos SVG individuais?
Sim, o IronPDF pode converter todas as páginas de um PDF em arquivos SVG individuais. Ao iterar pela coleção Pages, você pode salvar cada página como um arquivo SVG separado, o que é útil para PDFs de várias páginas.
Quais são os passos mínimos para começar a converter um PDF para SVG usando o IronPDF?
Para converter um PDF para SVG usando o IronPDF, você precisa instalar o IronPDF via NuGet, abrir um PDF com PdfDocument.Open() do namespace PdfToSvg e chamar SaveAsSvg() em qualquer página para gravar o arquivo SVG.
O IronPDF suporta a abertura de PDFs a partir de streams para fins de conversão?
Sim, o IronPDF suporta a abertura de PDFs a partir de streams. Você pode usar PdfDocument.Open() com uma entrada de Stream, tornando-o versátil para cenários onde os PDFs não são armazenados como arquivos, mas estão sendo transmitidos de outras fontes.
Ahmad é um desenvolvedor full-stack com uma sólida base em C#, Python e tecnologias web. Ele tem um grande interesse em construir soluções de software escaláveis e gosta de explorar como design e funcionalidade se encontram em aplicações do mundo real.