Parâmetros em C# (Como funciona para desenvolvedores)
A palavra-chave params em C# é um recurso poderoso do .NET que permite que um método aceite um número variável de argumentos. Isso pode simplificar significativamente a sintaxe ao chamar métodos que exigem um número variável de parâmetros. Neste guia completo, exploraremos a palavra-chave params em C#, sua sintaxe, casos de uso e melhores práticas. Mais adiante neste artigo, apresentaremos a biblioteca IronPDF da Iron Software e explicaremos como usar a palavra-chave params e o IronPDF para gerar PDFs.
Qual é o tipo de argumento Params em C#?
No contexto da linguagem C#, os métodos normalmente seguem um conjunto predeterminado de parâmetros. No entanto, existem situações em que alguém pode se encontrar incerto quanto ao número exato de argumentos destinados a um método. Introduza a palavra-chave "params", uma solução que permite especificar um parâmetro de método capaz de acomodar uma matriz de argumentos. Essa funcionalidade se mostra extremamente útil quando o desenvolvedor não tem certeza sobre o número exato de argumentos, facilitando a passagem de um número indeterminado ou opcional de parâmetros, todos do mesmo tipo, dentro de uma declaração de método.
public class ParamsExample
{
// Method accepting a variable number of string arguments using the params keyword
public void PrintMessages(params string[] messages)
{
foreach (var message in messages)
{
Console.WriteLine(message);
}
}
}
// Usage
class Program
{
public static void Main()
{
var example = new ParamsExample();
example.PrintMessages("Hello", "World", "!");
}
// More examples
public static void AddItemsToShoppingBasket(params string[] items)
{
// Implementation to add items to a shopping basket
}
public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
{
// Implementation to add sum of items to the shopping basket
}
}
public class ParamsExample
{
// Method accepting a variable number of string arguments using the params keyword
public void PrintMessages(params string[] messages)
{
foreach (var message in messages)
{
Console.WriteLine(message);
}
}
}
// Usage
class Program
{
public static void Main()
{
var example = new ParamsExample();
example.PrintMessages("Hello", "World", "!");
}
// More examples
public static void AddItemsToShoppingBasket(params string[] items)
{
// Implementation to add items to a shopping basket
}
public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
{
// Implementation to add sum of items to the shopping basket
}
}
Public Class ParamsExample
' Method accepting a variable number of string arguments using the params keyword
Public Sub PrintMessages(ParamArray ByVal messages() As String)
For Each message In messages
Console.WriteLine(message)
Next message
End Sub
End Class
' Usage
Friend Class Program
Public Shared Sub Main()
Dim example = New ParamsExample()
example.PrintMessages("Hello", "World", "!")
End Sub
' More examples
Public Shared Sub AddItemsToShoppingBasket(ParamArray ByVal items() As String)
' Implementation to add items to a shopping basket
End Sub
Public Shared Sub AddItemsSumToShoppingBasket(ParamArray ByVal sum() As Integer) ' Using params with int
' Implementation to add sum of items to the shopping basket
End Sub
End Class
O método AddItemsToShoppingBasket pode ser invocado com um número variável de argumentos do tipo string. A palavra-chave params simplifica a sintaxe da chamada do método, permitindo que os desenvolvedores passem os parâmetros opcionais diretamente, sem criar explicitamente uma entrada de matriz.
class Program
{
public static void Main()
{
AddItemsToShoppingBasket("cake", "pizza", "cold drink");
AddItemsToShoppingBasket("snacks", "burger");
AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
}
}
class Program
{
public static void Main()
{
AddItemsToShoppingBasket("cake", "pizza", "cold drink");
AddItemsToShoppingBasket("snacks", "burger");
AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
}
}
Friend Class Program
Public Shared Sub Main()
AddItemsToShoppingBasket("cake", "pizza", "cold drink")
AddItemsToShoppingBasket("snacks", "burger")
AddItemsToShoppingBasket() ' Valid even with zero parameters, using default value
End Sub
End Class
Considerações e Melhores Práticas
-
Posicione o parâmetro
paramsno final da lista de parâmetros: Uma prática recomendada é posicionar o parâmetroparamsao final da lista de parâmetros do método. Essa prática promove clareza, minimizando confusões durante as chamadas do método. Para uma organização eficaz, os parâmetros que exigem valores explícitos devem preceder os demais parâmetros. -
Especificar explicitamente parâmetros não-params: Ao invocar um método com
params, assegure o fornecimento explícito de valores para parâmetros não-params. Essa prática evita ambiguidades e garante a invocação correta do método com o número necessário de argumentos. -
Tenha cautela para evitar ambiguidade: A vigilância é fundamental ao utilizar
paramsem métodos com múltiplas sobrecargas ou parâmetros do mesmo tipo. O compilador pode ter dificuldades em determinar o método apropriado a ser invocado, o que pode resultar em erros de ambiguidade. -
Explore abordagens alternativas: Embora
paramsofereça conveniência, considere métodos alternativos em determinados cenários. Utilizar coleções comoList<t>pode ser preferível para uma funcionalidade aprimorada ou quando a passagem de parâmetros nomeados estiver alinhada com seus objetivos. - Aplicar criteriosamente em cenários relevantes: Implante
paramscriteriosamente em cenários onde a contagem de parâmetros é variável e pode flutuar entre chamadas de método distintas. Reserve seu uso para situações em que o número de parâmetros seja imprevisível, evitando sua aplicação quando a quantidade de parâmetros for fixa e conhecida.
Matriz unidimensional para o tipo de parâmetro
AddItemsToShoppingBasket também pode ser usado chamando-o com uma matriz unidimensional.
class Program
{
public static void Main()
{
var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
AddItemsToShoppingBasket(items); // Works as expected
AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
}
}
class Program
{
public static void Main()
{
var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
AddItemsToShoppingBasket(items); // Works as expected
AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
}
}
Friend Class Program
Public Shared Sub Main()
Dim items = New String() { "cold drink", "snack", "roll" } ' 1D string array
AddItemsToShoppingBasket(items) ' Works as expected
AddItemsToShoppingBasket("cold drink", "coke", "roll") ' Similar result to the above line
End Sub
End Class
Passe um array de argumentos separados por vírgulas, do mesmo tipo.
AddItemsToShoppingBasket pode ser chamado passando uma lista/matriz de variáveis na chamada do método, como abaixo.
class Program
{
public static void Main()
{
// Example method signature
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
AddItemsToShoppingBasket("snacks");
}
}
class Program
{
public static void Main()
{
// Example method signature
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
AddItemsToShoppingBasket("snacks");
}
}
Friend Class Program
Public Shared Sub Main()
' Example method signature
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink") ' Comma separated values
AddItemsToShoppingBasket("snacks")
End Sub
End Class
Passe um array do tipo definido.
O array deve conter o mesmo tipo definido no método params; Caso contrário, será lançado um erro.
// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
' Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger") ' Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4) ' Error since params type is string
Ocorre um erro de sintaxe se houver uma incompatibilidade de tipo entre o params definido no método.
Sempre o último parâmetro no método
Não são permitidos parâmetros adicionais após o parâmetro params na assinatura de um método. Apenas um argumento params é permitido em uma declaração de parâmetros de método. Uma definição incorreta leva a erros de compilação.
class Program
{
static void Main(string[] args)
{
// Example 1
public static void AddItemsToShoppingBasket(double total, params string[] items)
{
// Works fine as `params` is the last parameter
}
// Example 2, error scenario
public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
{
// Error: `params` keyword must be the last parameter
}
}
}
class Program
{
static void Main(string[] args)
{
// Example 1
public static void AddItemsToShoppingBasket(double total, params string[] items)
{
// Works fine as `params` is the last parameter
}
// Example 2, error scenario
public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
{
// Error: `params` keyword must be the last parameter
}
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Example 1
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public static void AddItemsToShoppingBasket(double total, params string[] items)
' {
' ' Works fine as `params` is the last parameter
' }
' Example 2, error scenario
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
' {
' ' Error: `params` keyword must be the last parameter
' }
End Sub
End Class
Apenas uma palavra-chave params
É permitido apenas um parâmetro params na assinatura de um método. O compilador gera um erro se mais de uma palavra-chave params for encontrada na assinatura do método.
class Program
{
static void Main(string[] args)
{
public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
{
// Compiler Error: Only one params keyword is allowed in the method signature
}
}
}
class Program
{
static void Main(string[] args)
{
public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
{
// Compiler Error: Only one params keyword is allowed in the method signature
}
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
' {
' ' Compiler Error: Only one params keyword is allowed in the method signature
' }
End Sub
End Class
Você não pode apresentar argumentos.
Se um método tiver um parâmetro com a palavra-chave params, ele poderá ser chamado sem nenhum argumento e o compilador não gerará um erro.
AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket() ' Works as expected
Qualquer parâmetro com um argumento params é considerado um parâmetro opcional e pode ser invocado sem a necessidade de passar parâmetros.
Exemplo de código
Crie um novo aplicativo de console. Abra o Visual Studio, crie um novo projeto e selecione o tipo de aplicativo de console.

Agora adicione o código abaixo.
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<string> cart = new List<string>();
void AddItemsToShoppingBasket(params string[] samples)
{
for (int i = 0; i < samples.Length; i++)
{
cart.Add(samples[i]);
}
}
// Caller code
Console.WriteLine("Enter the cart items as comma separated values");
var itemsString = Console.ReadLine();
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItemsToShoppingBasket(items);
}
AddItemsToShoppingBasket("Sample1", "Sample2");
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("Display Cart");
foreach (var item in cart)
{
Console.WriteLine(item);
}
}
}
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<string> cart = new List<string>();
void AddItemsToShoppingBasket(params string[] samples)
{
for (int i = 0; i < samples.Length; i++)
{
cart.Add(samples[i]);
}
}
// Caller code
Console.WriteLine("Enter the cart items as comma separated values");
var itemsString = Console.ReadLine();
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItemsToShoppingBasket(items);
}
AddItemsToShoppingBasket("Sample1", "Sample2");
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("Display Cart");
foreach (var item in cart)
{
Console.WriteLine(item);
}
}
}
Imports System
Imports System.Collections.Generic
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim cart As New List(Of String)()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' void AddItemsToShoppingBasket(params string[] samples)
' {
' for (int i = 0; i < samples.Length; i++)
' {
' cart.Add(samples[i]);
' }
' }
' Caller code
Console.WriteLine("Enter the cart items as comma separated values")
Dim itemsString = Console.ReadLine()
If itemsString IsNot Nothing Then
Dim items = itemsString.Split(",").ToArray()
AddItemsToShoppingBasket(items)
End If
AddItemsToShoppingBasket("Sample1", "Sample2")
Console.WriteLine("-------------------------------------------------------")
Console.WriteLine("Display Cart")
For Each item In cart
Console.WriteLine(item)
Next item
End Sub
End Class
Saída

Apresentando o IronPDF
IronPDF, uma biblioteca PDF em C# da Iron Software , é uma biblioteca versátil que permite ler, escrever e gerenciar documentos PDF em C#. Ele oferece suporte a todos os tipos de desenvolvimento de aplicativos modernos, como aplicativos móveis, sites, aplicativos para desktop, Docker, etc. Além disso, é compatível com diferentes sistemas operacionais, como Windows, Linux, Unix, etc., e não depende de métodos nativos do sistema operacional.
O IronPDF se destaca na conversão de HTML para PDF , garantindo a preservação precisa dos layouts e estilos originais. É perfeito para criar PDFs a partir de conteúdo da web, como relatórios, faturas e documentação. Com suporte para arquivos HTML, URLs e strings HTML brutas, o IronPDF produz facilmente documentos PDF de alta qualidade.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
Instalação
A biblioteca IronPDF pode ser instalada usando o console do gerenciador de pacotes NuGet com o comando abaixo ou usando o gerenciador de pacotes do Visual Studio.
Install-Package IronPdf
Usando o IronPDF para gerar um PDF
Agora, usaremos o IronPDF para gerar o documento PDF a partir do exemplo acima.
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
class Program
{
public static void Main()
{
List<string> cart = new List<string>();
void AddItemsToShoppingBasket(params string[] items)
{
for (int i = 0; i < items.Length; i++)
{
cart.Add(items[i]);
}
}
// Take input from console
Console.WriteLine("Enter the cart items as comma separated values");
var itemsString = Console.ReadLine();
// Read the items
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItemsToShoppingBasket(items);
}
// Add to cart
AddItemsToShoppingBasket("Sample1", "Sample2");
Console.WriteLine("------------------------------------------------");
Console.WriteLine("Display Cart");
Console.WriteLine("------------------------------------------------");
string name = "Sam";
var count = cart.Count;
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
+ @"
</body>
</html>";
// Create a new PDF document
var pdfDoc = new ChromePdfRenderer();
pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
class Program
{
public static void Main()
{
List<string> cart = new List<string>();
void AddItemsToShoppingBasket(params string[] items)
{
for (int i = 0; i < items.Length; i++)
{
cart.Add(items[i]);
}
}
// Take input from console
Console.WriteLine("Enter the cart items as comma separated values");
var itemsString = Console.ReadLine();
// Read the items
if (itemsString != null)
{
var items = itemsString.Split(",").ToArray();
AddItemsToShoppingBasket(items);
}
// Add to cart
AddItemsToShoppingBasket("Sample1", "Sample2");
Console.WriteLine("------------------------------------------------");
Console.WriteLine("Display Cart");
Console.WriteLine("------------------------------------------------");
string name = "Sam";
var count = cart.Count;
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
+ @"
</body>
</html>";
// Create a new PDF document
var pdfDoc = new ChromePdfRenderer();
pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
}
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronPdf
Friend Class Program
Public Shared Sub Main()
Dim cart As New List(Of String)()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' void AddItemsToShoppingBasket(params string[] items)
' {
' for (int i = 0; i < items.Length; i++)
' {
' cart.Add(items[i]);
' }
' }
' Take input from console
Console.WriteLine("Enter the cart items as comma separated values")
Dim itemsString = Console.ReadLine()
' Read the items
If itemsString IsNot Nothing Then
Dim items = itemsString.Split(",").ToArray()
AddItemsToShoppingBasket(items)
End If
' Add to cart
AddItemsToShoppingBasket("Sample1", "Sample2")
Console.WriteLine("------------------------------------------------")
Console.WriteLine("Display Cart")
Console.WriteLine("------------------------------------------------")
Dim name As String = "Sam"
Dim count = cart.Count
Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" & String.Join(vbLf, cart.Select(Function(x) $"<p>{x}</p>")) & "
</body>
</html>"
' Create a new PDF document
Dim pdfDoc = New ChromePdfRenderer()
pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf")
End Sub
End Class
No código acima, estamos gerando um documento HTML para os itens do carrinho e, em seguida, salvando-o como um documento PDF usando o IronPDF .
Saída

Licenciamento (Teste Gratuito Disponível)
O IronPDF requer uma chave de licença para funcionar em produção. Uma chave de avaliação pode ser obtida na página de licenças aqui . Insira a chave no arquivo appsettings.json.
"IronPdf.LicenseKey": "your license key"
Forneça seu endereço de e-mail para receber uma licença de avaliação em seu e-mail.
Conclusão
A palavra-chave params em C# oferece uma maneira flexível de lidar com métodos que exigem um número variável de parâmetros. Isso simplifica as chamadas de método e torna o código mais legível e fácil de manter. Em conjunto com o IronPDF , forma uma excelente combinação de ferramentas para qualquer programador escrever código limpo.
Perguntas frequentes
O que é a palavra-chave 'params' em C#?
A palavra-chave 'params' em C# permite que um método aceite um número variável de argumentos, simplificando a sintaxe para chamar métodos com quantidades variáveis de parâmetros.
Como funciona a palavra-chave 'params' na assinatura de um método?
Na assinatura de um método, a palavra-chave 'params' é usada antes do tipo e do nome do parâmetro, permitindo que o método aceite qualquer número de argumentos desse tipo como uma matriz.
Um método com 'params' pode aceitar zero argumentos?
Sim, um método com um parâmetro 'params' pode ser chamado sem argumentos, pois o parâmetro 'params' é tratado como opcional.
Quais são as melhores práticas para usar 'params' em C#?
As melhores práticas incluem colocar o parâmetro 'params' no final da lista de parâmetros, especificar explicitamente os parâmetros que não são 'params' e usá-lo criteriosamente apenas quando a quantidade de parâmetros puder variar.
Um método em C# pode ter mais de um parâmetro 'params'?
Não, um método em C# só pode ter um parâmetro 'params', e ele deve ser o último parâmetro na assinatura do método.
Como o uso de 'params' pode melhorar a flexibilidade dos métodos em C#?
O uso de 'params' em métodos C# permite que os desenvolvedores escrevam código mais flexível, capaz de lidar com um número dinâmico de parâmetros, facilitando a manutenção e a extensão do código.
Como posso combinar a palavra-chave 'params' com uma biblioteca C# para geração de documentos?
A palavra-chave 'params' pode ser usada com uma biblioteca C# para passar um número flexível de parâmetros para tarefas de geração de documentos, como a criação de PDFs com conteúdo variável usando o IronPDF.
Como converter HTML para PDF usando uma biblioteca C#?
Você pode usar uma biblioteca C# como o IronPDF para converter HTML em PDF usando métodos como RenderHtmlAsPdf para strings HTML ou RenderHtmlFileAsPdf para arquivos HTML.
Quais são alguns casos de uso comuns para a palavra-chave 'params' em C#?
Os casos de uso comuns para a palavra-chave 'params' incluem métodos que precisam lidar com um número variável de entradas, como mensagens de registro, operações matemáticas ou construção de saídas de string.
Como integrar uma biblioteca C# para manipulação de PDF em um projeto?
Para integrar uma biblioteca C# para manipulação de PDF, como o IronPDF, você pode instalá-la usando o NuGet com o comando dotnet add package [LibraryName] e então usar sua API para realizar tarefas com PDFs.




