How to Load and Save PDF Files in Streams Using C#

Save a PDF file to a stream.

PDF documents are ubiquitous in modern applications, and efficient handling of these files is crucial for developers. In C#, working with PDF files using streams offers memory efficiency and flexibility, especially in web applications, cloud services, or when handling dynamic content.

Spire.PDF, a robust PDF processing library, simplifies these operations with its intuitive API. This article explores how to create, load, and save PDF documents using streams in C#, covering the following aspects.

Why Use Streams for PDF Processing?

Stream-based PDF handling in C# offers significant advantages for modern applications:

  • Memory Efficiency: Process large PDFs without loading entire files into memory.
  • Scalability: Ideal for web applications and cloud environments.
  • Reduced I/O Operations: Minimize disk reads/writes for faster performance.
  • Flexibility: Integrate with APIs, databases, and cloud storage seamlessly.

Getting Started with Spire.PDF

Spire.PDF is a feature-rich library that simplifies PDF manipulation in .NET applications. Here’s how to install it:

  • Via NuGet Package Manager (Recommended):

    In Package Manager Console, run the following command to install:

    PM> Install-Package Spire.PDF 
  • 2Manual Installation:

    Download the DLL files from the official website and add a reference to your project.

Create a PDF File and Save it to Stream in C#

This task can be divided into three main parts. Follow the steps below to dynamically create a PDF file and save it to the stream.

  • Create a PDF document.
    • Initialize an instance of the PdfDocument class to represent a PDF file.
    • Add a page to the PDF file.
  • Add content to the PDF (in this case, a simple text string).
  • 3. Save to a Stream
    • Initialize an instance of the FileStream or the MemoryStream class.
    • Call the PdfDocument.SaveToStream(Stream stream) method to save the PDF file to stream.

Code Example:

  • C#
using Spire.Pdf;
using System.IO;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace SavePdfToStream
{
    class Program
    {
        static void Main(string[] args)
        {

            // Create a PdfDocument instance
            PdfDocument pdf = new PdfDocument();

            // Add a page
            PdfPageBase page = pdf.Pages.Add();

            // Draw text on the page
            page.Canvas.DrawString("Hello, World!",
                                   new PdfFont(PdfFontFamily.Helvetica, 30f),
                                   new PdfSolidBrush(Color.Blue),
                                   100, 100);

            // Save the PDF file to Stream
            FileStream toStream = new FileStream("SavePdfToStream.pdf", FileMode.OpenOrCreate);
            pdf.SaveToStream(toStream);
            toStream.Close();
            pdf.Close();
        }
    }
}

A screenshot of the generated PDF:

Save a PDF file to a stream.

Load a PDF from Stream in C#

Streams provide a flexible way to read PDFs from different sources, such as:

  • FileStream: represents a stream of data stored in a physical file.
  • MemoryStream: represents a stream of data stored in memory (RAM).

Their differences lie in:

Feature FileStream MemoryStream
Storage Disk Memory (RAM)
Performance Slower (disk I/O) Faster (no disk access)
Use Case Persistent files, large data Temporary data, in-memory processing
Size Limit Limited by disk space Limited by available RAM

The PdfDocument.LoadFromStream(Stream stream) method of Spire.PDF library supports loading an existing PDF from a stream directly. The code example is shown below:

  • C#
using Spire.Pdf;
using System.IO;

namespace LoadPdfFromStream
{
    class Program
    {
        static void Main(string[] args)
        {

            // Create a PdfDocument instance
            PdfDocument pdf = new PdfDocument();

            // Load PDF file from memory stream
            MemoryStream stream = new MemoryStream();
            File.OpenRead("sample.pdf").CopyTo(stream);
            pdf.LoadFromStream(stream);

            // Load PDF file from file stream
            //FileStream stream = File.OpenRead("sample.pdf");
            //pdf.LoadFromStream(stream);

            // Save the PDF file to disk
            pdf.SaveToFile("LoadPdfFromStream.pdf", FileFormat.PDF);
            pdf.Close();
        }
    }
}

A screenshot of the loaded PDF file:

Load a PDF file from memory stream.

Advanced Example: Merge Multiple PDFs by Streams

By mastering the skills of loading and saving PDFs using streams, you can combine it with other PDF processing functions to perform advanced PDF stream operations.

Below is an example on how to combine multiple PDFs into a single document using streams:

  • C#
using System.IO;
using Spire.Pdf;

namespace MergePDFsByStream
{
    class Program
    {
        static void Main(string[] args)
        {
            // Specify the files to be merged
            string[] pdfFiles = {
                "MergePdfsTemplate_1.pdf",
                "MergePdfsTemplate_2.pdf",
                "MergePdfsTemplate_3.pdf"
            };

            // Initialize FileStreams for input PDF files
            FileStream[] streams = new FileStream[pdfFiles.Length];
            for (int i = 0; i < pdfFiles.Length; i++)
            {
                streams[i] = File.OpenRead(pdfFiles[i]);
            }

            // Merge the PDF files using the streams
            PdfDocumentBase pdf = PdfDocument.MergeFiles(streams);

            // Save the merged PDF file
            pdf.Save("MergePDFByStream.pdf", FileFormat.PDF);

        }
    }
}

Conclusion

Working with PDF files in streams using C# and Spire.PDF provides a flexible and efficient way to handle document processing tasks. Whether you’re loading, modifying existing PDF documents, or saving PDF files, streams offer a memory-efficient alternative to traditional file-based approaches.

To learn more advanced PDF processing features, explore Spire.PDF’s official documentation.

Get a Free License

To fully experience the capabilities of Spire.PDF for .NET without any evaluation limitations, you can request a free 30-day trial license.