Converter PDF para Diferentes Formatos de Imagem em C#

Visão Geral

Este artigo explica como converter PDF para diferentes formatos de imagem usando C#. Ele cobre os seguintes tópicos.

C# Converter PDF para Imagem

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

Aspose.PDF for .NET usa várias abordagens para converter PDF em imagem. De maneira geral, usamos duas abordagens: conversão usando a abordagem Device e conversão usando SaveOption. Esta seção mostrará como converter documentos PDF em formatos de imagem, como BMP, JPEG, GIF, PNG, EMF, TIFF e SVG, usando uma dessas abordagens.

Existem várias classes na biblioteca que permitem usar um dispositivo virtual para transformar imagens. DocumentDevice é orientado para a conversão de todo o documento, mas ImageDevice - para uma página específica.

Converter PDF usando a classe DocumentDevice

Aspose.PDF for .NET torna possível converter páginas PDF em imagens TIFF.

A classe TiffDevice (baseada em DocumentDevice) permite converter páginas PDF em imagens TIFF. Esta classe fornece um método chamado Process que permite converter todas as páginas em um arquivo PDF em uma única imagem TIFF.

Converter Páginas PDF em Uma Imagem TIFF

Aspose.PDF for .NET explica como converter todas as páginas em um arquivo PDF em uma única imagem TIFF:

Converter PDF para TIFF

  1. Crie um objeto da classe Document.
  2. Crie objetos TiffSettings e TiffDevice.
  3. Chame o método TiffDevice.Process() para converter o documento PDF em TIFF.
  4. Para definir as propriedades do arquivo de saída, use a classe TiffSettings.

O seguinte trecho de código mostra como converter todas as páginas PDF em uma única imagem TIFF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoTIFF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFtoTIFF.pdf"))
    {
        // Create Resolution object
        var resolution = new Aspose.Pdf.Devices.Resolution(300);

        // Create TiffSettings object
        var tiffSettings = new Aspose.Pdf.Devices.TiffSettings
        {
            Compression = Aspose.Pdf.Devices.CompressionType.None,
            Depth = Aspose.Pdf.Devices.ColorDepth.Default,
            Shape = Aspose.Pdf.Devices.ShapeType.Landscape,
            SkipBlankPages = false
        };

        // Create TIFF device
        var tiffDevice = new Aspose.Pdf.Devices.TiffDevice(resolution, tiffSettings);

        // Convert a particular page and save the image to stream
        tiffDevice.Process(document, dataDir + "PDFtoTIFF_out.tif");
    }
}

Converter Uma Página em Imagem TIFF

Aspose.PDF for .NET permite converter uma página específica em um arquivo PDF em uma imagem TIFF, usando uma versão sobrecarregada do método Process(..) que aceita um número de página como argumento para conversão. O seguinte trecho de código mostra como converter a primeira página de um PDF para o formato TIFF.

  1. Crie um objeto da classe Document.
  2. Crie objetos TiffSettings e TiffDevice.
  3. Chame o método sobrecarregado TiffDevice.Process() com os parâmetros fromPage e toPage para converter as páginas do documento PDF em TIFF.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoTiffSinglePage()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFtoTiffSinglePage.pdf"))
    {
        // Create Resolution object
        var resolution = new Aspose.Pdf.Devices.Resolution(300);

        // Create TiffSettings object
        var tiffSettings = new Aspose.Pdf.Devices.TiffSettings
        {
            Compression = Aspose.Pdf.Devices.CompressionType.None,
            Depth = Aspose.Pdf.Devices.ColorDepth.Default,
            Shape = Aspose.Pdf.Devices.ShapeType.Landscape,
        };

        // Create TIFF device
        var tiffDevice = new Aspose.Pdf.Devices.TiffDevice(resolution, tiffSettings);

        // Convert a particular page and save the image to stream
        tiffDevice.Process(document, 1, 1, dataDir + "PDFtoTiffSinglePage_out.tif");
    }
}

Usar o algoritmo Bradley durante a conversão

Aspose.PDF for .NET tem suportado o recurso de converter PDF para TIF usando compressão LZW e, em seguida, com o uso de AForge, a Binarização pode ser aplicada. No entanto, um dos clientes solicitou que, para algumas imagens, eles precisavam obter o Threshold usando Otsu, então eles também gostariam de usar Bradley.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoTiffBradleyBinarization()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFtoTiffBradleyBinarization.pdf"))
    {
        string outputImageFile = dataDir + "PDFtoTiffBradleyBinarization_out.tif";
        string outputBinImageFile = dataDir + "PDFtoTiffBradleyBinarization-bin_out.tif";

        // Create Resolution object
        var resolution = new Aspose.Pdf.Devices.Resolution(300);

        // Create TiffSettings object
        var tiffSettings = new Aspose.Pdf.Devices.TiffSettings
        {
            Compression = Aspose.Pdf.Devices.CompressionType.LZW,
            Depth = Aspose.Pdf.Devices.ColorDepth.Format1bpp
        };

        // Create TIFF device
        var tiffDevice = new Aspose.Pdf.Devices.TiffDevice(resolution, tiffSettings);

        // Convert a particular page and save the image to stream
        tiffDevice.Process(document, outputImageFile);

        // Binarize the image using Bradley method
        using (var inStream = new FileStream(outputImageFile, FileMode.Open))
        {
            using (var outStream = new FileStream(outputBinImageFile, FileMode.Create))
            {
                tiffDevice.BinarizeBradley(inStream, outStream, 0.1);
            }
        }
    }
}

Converter PDF usando a classe ImageDevice

ImageDevice é o ancestral de BmpDevice, JpegDevice, GifDevice, PngDevice e EmfDevice.

  • A classe BmpDevice permite converter páginas PDF em imagens BMP.
  • A classe EmfDevice permite converter páginas PDF em imagens EMF.
  • A classe JpegDevice permite converter páginas PDF em imagens JPEG.
  • A classe PngDevice permite converter páginas PDF em imagens PNG.
  • A classe GifDevice permite converter páginas PDF em imagens GIF.

Vamos dar uma olhada em como converter uma página PDF em uma imagem.

A classe BmpDevice fornece um método chamado Process que permite converter uma página específica do arquivo PDF em formato de imagem BMP. As outras classes têm o mesmo método. Portanto, se precisarmos converter uma página PDF em uma imagem, basta instanciar a classe necessária.

  1. Carregue o arquivo PDF usando a classe Document.
  2. Crie uma instância da subclasse de ImageDevice, ou seja,
    • BmpDevice (para converter PDF em BMP).
    • EmfDevice (para converter PDF em Emf).
    • JpegDevice (para converter PDF em JPG).
    • PngDevice (para converter PDF em PNG).
    • GifDevice (para converter PDF em GIF).
  3. Chame o método ImageDevice.Process() para realizar a conversão de PDF para Imagem.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFusingImageDevice()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

    // Create Resolution object            
    var resolution = new Aspose.Pdf.Devices.Resolution(300);
    var bmpDevice = new Aspose.Pdf.Devices.BmpDevice(resolution);
    var jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution);
    var gifDevice = new Aspose.Pdf.Devices.GifDevice(resolution);
    var pngDevice = new Aspose.Pdf.Devices.PngDevice(resolution);
    var emfDevice = new Aspose.Pdf.Devices.EmfDevice(resolution);

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "ConvertAllPagesToBmp.pdf"))
    {
        ConvertPDFtoImage(bmpDevice, "bmp", document, dataDir);
        ConvertPDFtoImage(jpegDevice, "jpeg", document, dataDir);
        ConvertPDFtoImage(gifDevice, "gif", document, dataDir);
        ConvertPDFtoImage(pngDevice, "png", document, dataDir);
        ConvertPDFtoImage(emfDevice, "emf", document, dataDir);
    }
}

private static void ConvertPDFtoImage(ImageDevice imageDevice,
        string ext, Document document, var dataDir)
{
    for (int pageCount = 1; pageCount <= document.Pages.Count; pageCount++)
    {
        using (FileStream imageStream =
            new FileStream($"{dataDir}image{pageCount}_out.{ext}",
            FileMode.Create))
        {
            // Convert a particular page and save the image to stream
            imageDevice.Process(document.Pages[pageCount], imageStream);
        }
    }
}

Converter PDF para imagem com fundo transparente

Uma página PDF pode ser convertida em uma imagem PNG com fundo transparente em vez de branco.

Converter PDF usando a classe SaveOptions

Esta parte do artigo mostra como converter PDF para SVG usando C# e a classe SaveOptions.

Scalable Vector Graphics (SVG) é uma família de especificações de um formato de arquivo baseado em XML para gráficos vetoriais bidimensionais, tanto estáticos quanto dinâmicos (interativos ou animados). A especificação SVG é um padrão aberto que está em desenvolvimento pelo World Wide Web Consortium (W3C) desde 1999.

Imagens SVG e seus comportamentos são definidos em arquivos de texto XML. Isso significa que podem ser pesquisados, indexados, scriptados e, se necessário, comprimidos. Como arquivos XML, as imagens SVG podem ser criadas e editadas com qualquer editor de texto, mas muitas vezes é mais conveniente criá-las com programas de desenho, como o Inkscape.

Aspose.PDF for .NET suporta o recurso de converter imagens SVG para o formato PDF e também oferece a capacidade de converter arquivos PDF para o formato SVG. Para realizar esse requisito, a classe SvgSaveOptions foi introduzida no namespace Aspose.PDF. Instancie um objeto de SvgSaveOptions e passe-o como segundo argumento para o método Document.Save(..).

O seguinte trecho de código mostra os passos para converter um arquivo PDF para o formato SVG com .NET.

Converter PDF para SVG

  1. Crie um objeto da classe Document.
  2. Crie um objeto SvgSaveOptions com as configurações necessárias.
  3. Chame o método Document.Save() e passe o objeto SvgSaveOptions para converter o documento PDF em SVG.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoSVG()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFtoSVG.pdf"))
    {
        // Instantiate an object of SvgSaveOptions
        var saveOptions = new Aspose.Pdf.SvgSaveOptions
        {
            // Do not compress SVG image to Zip archive
            CompressOutputToZipArchive = false,
            TreatTargetFileNameAsDirectory = true                
        };

        // Save SVG file
        document.Save(dataDir + "PDFToSVG_out.svg", saveOptions);
    }
}