Como Criar PDF usando C#

Estamos sempre em busca de uma maneira de gerar documentos PDF e trabalhar com eles em projetos C# de forma mais exata, precisa e eficaz. Ter funções fáceis de usar de uma biblioteca nos permite acompanhar mais do trabalho e menos os detalhes que consomem tempo ao tentar gerar PDFs, seja em .NET.

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

Criar (ou Gerar) documento PDF usando a linguagem C#

A API Aspose.PDF for .NET permite que você crie e leia arquivos PDF usando C# e VB.NET. A API pode ser usada em uma variedade de aplicações .NET, incluindo WinForms, ASP.NET e várias outras. Neste artigo, vamos mostrar como usar a API Aspose.PDF for .NET para gerar e ler arquivos PDF facilmente em aplicações .NET.

Como Criar um Arquivo PDF Simples

Para criar um arquivo PDF usando C#, os seguintes passos podem ser utilizados.

  1. Crie um objeto da classe Document.
  2. Adicione um objeto Page à coleção Pages do objeto Document.
  3. Adicione TextFragment à coleção Paragraphs da página.
  4. Salve o documento PDF resultante.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateHelloWorldDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();

    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Add text to new page
        page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("Hello World!"));
        // Save PDF document
        document.Save(dataDir + "HelloWorld_out.pdf");
    }
}

Como Criar um documento PDF pesquisável

Aspose.PDF for .NET fornece a funcionalidade para criar e manipular documentos PDF existentes. Ao adicionar elementos de texto dentro do arquivo PDF, o PDF resultante é pesquisável. No entanto, se estivermos convertendo uma imagem contendo texto em um arquivo PDF, o conteúdo dentro do PDF não é pesquisável. No entanto, como uma solução alternativa, podemos usar OCR sobre o arquivo resultante, para que ele se torne pesquisável.

Esta lógica especificada abaixo reconhece texto para imagens PDF. Para reconhecimento, você pode usar suporte externo de OCR que siga o padrão HOCR. Para fins de teste, usamos um OCR gratuito do Google Tesseract. Portanto, primeiro você precisa instalar o Tesseract-OCR em seu sistema, e você terá o aplicativo de console do Tesseract.

A seguir está o código completo para atender a esse requisito:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateSearchableDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "SearchableDocument.pdf"))
    {
        document.Convert(CallBackGetHocr);

        // Save PDF document
        document.Save(dataDir + "SearchableDocument_out.pdf");
    }
}

private static string CallBackGetHocr(System.Drawing.Image img)
{
    var tmpFile = Path.GetTempFileName();
    try
    {
        using (var bmp = new System.Drawing.Bitmap(img))
        {
            bmp.Save(tmpFile, System.Drawing.Imaging.ImageFormat.Bmp);
        }

        var inputFile = string.Concat('"', tmpFile, '"');
        var outputFile = string.Concat('"', tmpFile, '"');
        var arguments = string.Concat(inputFile, " ", outputFile, " -l eng hocr");
        var tesseractProcessName = RunExamples.GetTesseractExePath();

        var psi = new System.Diagnostics.ProcessStartInfo(tesseractProcessName, arguments)
        {
            UseShellExecute = true,
            CreateNoWindow = true,
            WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
            WorkingDirectory = Path.GetDirectoryName(tesseractProcessName)
        };

        var p = new System.Diagnostics.Process
        {
            StartInfo = psi
        };
        p.Start();
        p.WaitForExit();

        using (var streamReader = new StreamReader(tmpFile + ".hocr"))
        {
            string text = streamReader.ReadToEnd();
            return text;
        }
    }
    finally
    {
        if (File.Exists(tmpFile))
        {
            File.Delete(tmpFile);
        }
        if (File.Exists(tmpFile + ".hocr"))
        {
            File.Delete(tmpFile + ".hocr");
        }
    }
}

Como Criar um PDF acessível usando funções de baixo nível

Este trecho de código trabalha com um documento PDF e seu conteúdo marcado, utilizando uma biblioteca Aspose.PDF para processá-lo.

O exemplo cria um novo elemento span no conteúdo marcado da primeira página de um PDF, encontra todos os elementos BDC e os associa ao span. O documento modificado é então salvo.

Você pode criar uma declaração bdc especificando mcid, lang e texto de expansão usando o objeto BDCProperties:

var bdc = new Aspose.Pdf.Operators.BDC("P", new Aspose.Pdf.Facades.BDCProperties(1, "de", "Hallo, welt!"));

Após criar a árvore de estrutura, é possível vincular o operador BDC ao elemento especificado da estrutura com o método Tag no objeto do elemento:

Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
span.Tag(bdc);

Passos para criar um PDF acessível:

  1. Carregue o Documento PDF.
  2. Acesse o Conteúdo Marcado.
  3. Crie um Elemento Span.
  4. Anexe o Span ao Elemento Raiz.
  5. Itere Sobre o Conteúdo da Página.
  6. Verifique os Elementos BDC e Marque-os.
  7. Salve o Documento Modificado.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateAnAccessibleDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "tourguidev2_gb_tags.pdf"))
    {
        // Access tagged content
        Aspose.Pdf.Tagged.ITaggedContent content = document.TaggedContent;
        // Create a span element
        Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
        // Append span to root element
        content.RootElement.AppendChild(span);
        // Iterate over page contents
        foreach (var op in document.Pages[1].Contents)
        {
            var bdc = op as Aspose.Pdf.Operators.BDC;
            if (bdc != null)
            {
                span.Tag(bdc);
            }
        }
        // Save PDF document
        document.Save(dataDir + "AccessibleDocument_out.pdf");
    }
}

Este código modifica um PDF criando um elemento span dentro do conteúdo marcado do documento e marcando conteúdo específico (operações BDC) da primeira página com este span. O PDF modificado é então salvo em um novo arquivo.