# Best practices for PDF processing in .NET

This guide explains best practices for working with Nutrient.NET SDK (formerly GdPicture.NET).

## Error handling

Most classic `GdPicture14` APIs return a member of the [`GdPictureStatus`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureStatus.html) enum, so you handle errors with status checks.

Some newer SDK layers can throw exceptions, such as argument validation and workflow-specific errors. In production code, combine:

- Status checks for `GdPicture14` operations

- `try/catch` for higher-level workflows when needed

The following code converts a PDF to a TIFF image. It checks that the source PDF loads before it continues:

### C#

```csharp

using GdPictureDocumentConverter gdpictureDocumentConverter = new GdPictureDocumentConverter();
GdPictureStatus status = gdpictureDocumentConverter.LoadFromFile(@"C:\temp\source.pdf",
    GdPicture14.DocumentFormat.DocumentFormatPDF);
if (status == GdPictureStatus.OK)
{
    Console.WriteLine("The PDF file has been loaded successfully.");
    status = gdpictureDocumentConverter.SaveAsTIFF(@"C:\temp\output.tif",
        TiffCompression.TiffCompressionAUTO);
    if (status == GdPictureStatus.OK)
        Console.WriteLine("The file has been saved successfully.");
    else
        Console.WriteLine($"The file has failed to save. Status: {status}");
}
else
    Console.WriteLine($"The file has failed to load. Status: {status}");

```

### VB.NET

```vb

Using gdpictureDocumentConverter As GdPictureDocumentConverter = New GdPictureDocumentConverter()
    Dim status As GdPictureStatus = gdpictureDocumentConverter.LoadFromFile("C:\temp\source.pdf",
        GdPicture14.DocumentFormat.DocumentFormatPDF)

    If status = GdPictureStatus.OK Then
        Console.WriteLine("The PDF file has been loaded successfully.")
        status = gdpictureDocumentConverter.SaveAsTIFF("C:\temp\output.tif",
            TiffCompression.TiffCompressionAUTO)
        If status = GdPictureStatus.OK Then
            Console.WriteLine("The file has been saved successfully.")
        Else
            Console.WriteLine($"The file has failed to save. Status: {status}")
        End If
    Else
        Console.WriteLine($"The file has failed to load. Status: {status}")
    End If
End Using

```

#### Used methods

- [`LoadFromFile`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentConverter~LoadFromFile.html)

- [`SaveAsTIFF`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentConverter~SaveAsTIFF.html)

## Release used images

After you process an image, release it from memory by passing the image ID to [`DisposeImage`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html). `DisposeImage` is a static method on `GdPictureDocumentUtilities`, so you don’t need to instantiate the class. You can call it for any image, regardless of how you loaded it:

### C#

```csharp

using GdPicturePDF gdpictureSourcePDF = new GdPicturePDF();
using GdPicturePDF gdpictureDestPDF = new GdPicturePDF();

GdPictureStatus status = gdpictureSourcePDF.LoadFromFile(@"C:\temp\source.pdf");
if (status == GdPictureStatus.OK)
{
    status = gdpictureDestPDF.NewPDF();
    if (status == GdPictureStatus.OK)
    {
        int pageCount = gdpictureSourcePDF.GetPageCount();
        if (gdpictureSourcePDF.GetStat() == GdPictureStatus.OK)
        {
            for (int i = 1; i <= pageCount; i++)
            {
                status = gdpictureSourcePDF.SelectPage(i);
                if (status!= GdPictureStatus.OK)
                    break;

                int imageCount = gdpictureSourcePDF.GetPageImageCount();
                if (gdpictureSourcePDF.GetStat()!= GdPictureStatus.OK)
                    break;

                for (int j = 1; j <= imageCount; j++)
                {
                    int imageID = gdpictureSourcePDF.ExtractPageImage(j);
                    if (gdpictureSourcePDF.GetStat() == GdPictureStatus.OK)
                    {
                        status = gdpictureDestPDF.AddImageFromGdPictureImage(imageID,
                            PdfAdvancedImageCompression.PdfAdvancedImageCompressionMRC);

                        // Release the image from memory in all cases.
                        GdPictureDocumentUtilities.DisposeImage(imageID);

                        if (status!= GdPictureStatus.OK)
                            break;
                    }
                }
            }

            gdpictureDestPDF.SaveToFile(@"C:\temp\output.pdf");
        }
    }
}

```

### VB.NET

```vb

Using gdpictureSourcePDF As GdPicturePDF = New GdPicturePDF()
Using gdpictureDestPDF As GdPicturePDF = New GdPicturePDF()
    Dim status As GdPictureStatus = gdpictureSourcePDF.LoadFromFile("C:\temp\source.pdf")
    If status = GdPictureStatus.OK Then
        status = gdpictureDestPDF.NewPDF()
        If status = GdPictureStatus.OK Then
            Dim pageCount As Integer = gdpictureSourcePDF.GetPageCount()
            If gdpictureSourcePDF.GetStat() = GdPictureStatus.OK Then
                For i = 1 To pageCount
                    status = gdpictureSourcePDF.SelectPage(i)
                    If status <> GdPictureStatus.OK Then
                        Exit For
                    End If

                    Dim imageCount As Integer = gdpictureSourcePDF.GetPageImageCount()
                    If gdpictureSourcePDF.GetStat() <> GdPictureStatus.OK Then
                        Exit For
                    End If

                    For j = 1 To imageCount
                        Dim imageID As Integer = gdpictureSourcePDF.ExtractPageImage(j)
                        If gdpictureSourcePDF.GetStat() = GdPictureStatus.OK Then
                            status = gdpictureDestPDF.AddImageFromGdPictureImage(imageID,
                                PdfAdvancedImageCompression.PdfAdvancedImageCompressionMRC)

                            ' Release the image from memory in all cases.
                            GdPictureDocumentUtilities.DisposeImage(imageID)

                            If status <> GdPictureStatus.OK Then
                                Exit For
                            End If
                        End If
                    Next
                Next

                gdpictureDestPDF.SaveToFile("C:\temp\output.pdf")
            End If
        End If
    End If
End Using
End Using

```

#### Used methods

- [`AddImageFromGdPictureImage`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~AddImageFromGdPictureImage.html)

- [`DisposeImage`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html)

- [`ExtractPageImage`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~ExtractPageImage.html)

- [`GetPageCount`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~GetPageCount.html)

- [`GetPageImageCount`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~GetPageImageCount.html)

- [`LoadFromFile`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~LoadFromFile.html)

- [`NewPDF`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~NewPDF.html)

- [`SaveToFile`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPicturePDF~SaveToFile.html)
---

## Related pages

- [ASP.NET PDF library](/guides/dotnet/aspnet.md)
- [C#.NET PDF library](/guides/dotnet.md)
- [Nutrient .NET SDK guides — Add advanced PDF features to your .NET applications](/guides/dotnet/intro.md)
- [C# Office library](/guides/dotnet/office.md)
- [Example Project](/guides/dotnet/getting-started/catalog-example.md)
- [Changelog for .NET](/guides/dotnet/changelog.md)
- [Troubleshooting](/guides/dotnet/troubleshoot.md)
- [C# TIFF library](/guides/dotnet/tiff.md)
- [WinForms PDF library](/guides/dotnet/winforms.md)
- [VB.NET PDF library](/guides/dotnet/vbnet.md)
- [WPF PDF and image library](/guides/dotnet/wpf.md)
- [C# and VB.NET code samples](/guides/dotnet/samples.md)
- [.NET core PDF library](/guides/dotnet/core.md)
- [Delphi PDF library](/guides/dotnet/delphi.md)
- [Explore interactive PDF SDK demos and features](/guides/dotnet/demo.md)
- [Deploy an application in C# .NET](/guides/dotnet/deployment.md)
- [Download Nutrient .NET SDK (formerly GdPicture.NET)](/guides/dotnet/downloads.md)

