How to Migrate from Sumatra PDF to IronPDF in C#
Migrating from Sumatra PDF to IronPDF transforms your PDF workflow from external process management with a desktop viewer application to native .NET library integration with full PDF creation, manipulation, and extraction capabilities. This guide provides a complete, step-by-step migration path that eliminates external dependencies, AGPLv3 copyleft obligations, and the fundamental limitation that Sumatra PDF is a viewer/printer, not a development library.
Why Migrate from Sumatra PDF to IronPDF
Understanding Sumatra PDF
Sumatra PDF is a lightweight, open-source Windows PDF reader/printer renowned for its simplicity and speed. It also displays EPUB, MOBI, CBZ/CBR, FB2, CHM, XPS, and DjVu files. However, Sumatra PDF does not provide the capabilities needed for creating or manipulating PDF files beyond viewing and printing them, and there is no official .NET SDK or NuGet package — community wrappers simply shell out to SumatraPDF.exe.
Sumatra PDF is a standalone Windows desktop viewer/printer application, not a development library. If you're using Sumatra PDF in your .NET application, you're likely:
- Launching
SumatraPDF.exeas an external process to display PDFs - Printing PDFs via command-line (
-print-to-default,-print-to "<printer>") - Relying on it as a dependency your users must install
Key Problems with Sumatra PDF Integration
| Problem | Impact |
|---|---|
| Not a Library | Cannot programmatically create or edit PDFs |
| External Process | Requires spawning SumatraPDF.exe; no in-process API |
| AGPLv3 License | Strong copyleft (some files BSD-licensed); bundling into closed-source products imposes obligations most commercial vendors avoid |
| User Dependency | Users (or your installer) must place SumatraPDF.exe on disk |
| CLI Only | Limited to documented command-line arguments |
| View / Print Only | Cannot create, edit, or manipulate PDFs |
| Windows Only | No Linux or macOS builds |
Sumatra PDF vs IronPDF Comparison
| Feature | Sumatra PDF | IronPDF |
|---|---|---|
| Type | Application | Library |
| PDF Reading | Yes | Yes |
| PDF Creation | No | Yes |
| PDF Editing | No | Yes |
| Integration | Limited (standalone) | Full integration in applications |
| License | AGPLv3 (some files BSD) | Commercial |
| Create PDFs | No | Yes |
| Edit PDFs | No | Yes |
| HTML to PDF | No | Yes |
| Merge/Split | No | Yes |
| Watermarks | No | Yes |
| Digital Signatures | No | Yes |
| Form Filling | No | Yes |
| Text Extraction | No | Yes |
| .NET Integration | None | Native |
| Web Applications | No | Yes |
IronPDF, unlike Sumatra PDF, is not tied to any specific desktop application or external process. It provides developers with a flexible library to dynamically create, edit, and manipulate PDF documents directly in C#. This decoupling from external processes offers a noticeable advantage—it is straightforward and adaptable, suitable for a wide array of applications beyond just viewing.
For teams targeting modern .NET, IronPDF provides native library integration that eliminates the external process overhead and AGPLv3 copyleft obligations of Sumatra PDF.
Before You Start
Prerequisites
- .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Access: Ability to install NuGet packages
- IronPDF License: Obtain your license key from ironpdf.com
Installation
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
License Configuration
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Complete API Reference
Namespace Changes
// Before: Sumatra PDF (external process)
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: Sumatra PDF (external process)
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
' Before: Sumatra PDF (external process)
Imports System.Diagnostics
Imports System.IO
' After: IronPDF
Imports IronPdf
Core Capability Mappings
| Sumatra PDF Approach | IronPDF Equivalent | Notes |
|---|---|---|
Process.Start("SumatraPDF.exe", pdfPath) |
PdfDocument.FromFile() |
Load PDF |
| Command-line arguments | Native API methods | No CLI needed |
External pdftotext.exe |
pdf.ExtractAllText() |
Text extraction |
External wkhtmltopdf.exe |
renderer.RenderHtmlAsPdf() |
HTML to PDF |
-print-to-default argument |
pdf.Print() |
Printing |
| Not possible | PdfDocument.Merge() |
Merge PDFs |
| Not possible | pdf.ApplyWatermark() |
Watermarks |
| Not possible | pdf.SecuritySettings |
Password protection |
Code Migration Examples
Example 1: HTML to PDF Conversion
Before (Sumatra PDF):
// Sumatra PDF is a standalone Windows app (AGPLv3) — there is NO official NuGet package.
// Download SumatraPDF.exe from https://www.sumatrapdfreader.org/ and shell out to it.
// Sumatra is a viewer/printer only; it cannot convert HTML to PDF, so you must use a
// separate HTML-to-PDF tool (e.g. wkhtmltopdf) and then view/print with Sumatra.
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
// Sumatra PDF cannot directly convert HTML to PDF
// You'd need to use wkhtmltopdf or similar, then view in Sumatra
string htmlFile = "input.html";
string pdfFile = "output.pdf";
// Using wkhtmltopdf as intermediary
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "wkhtmltopdf.exe",
Arguments = $"{htmlFile} {pdfFile}",
UseShellExecute = false
};
Process.Start(psi)?.WaitForExit();
// Then open with Sumatra
Process.Start("SumatraPDF.exe", pdfFile);
}
}
// Sumatra PDF is a standalone Windows app (AGPLv3) — there is NO official NuGet package.
// Download SumatraPDF.exe from https://www.sumatrapdfreader.org/ and shell out to it.
// Sumatra is a viewer/printer only; it cannot convert HTML to PDF, so you must use a
// separate HTML-to-PDF tool (e.g. wkhtmltopdf) and then view/print with Sumatra.
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
// Sumatra PDF cannot directly convert HTML to PDF
// You'd need to use wkhtmltopdf or similar, then view in Sumatra
string htmlFile = "input.html";
string pdfFile = "output.pdf";
// Using wkhtmltopdf as intermediary
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "wkhtmltopdf.exe",
Arguments = $"{htmlFile} {pdfFile}",
UseShellExecute = false
};
Process.Start(psi)?.WaitForExit();
// Then open with Sumatra
Process.Start("SumatraPDF.exe", pdfFile);
}
}
Imports System.Diagnostics
Imports System.IO
Module Program
Sub Main()
' Sumatra PDF cannot directly convert HTML to PDF
' You'd need to use wkhtmltopdf or similar, then view in Sumatra
Dim htmlFile As String = "input.html"
Dim pdfFile As String = "output.pdf"
' Using wkhtmltopdf as intermediary
Dim psi As New ProcessStartInfo With {
.FileName = "wkhtmltopdf.exe",
.Arguments = $"{htmlFile} {pdfFile}",
.UseShellExecute = False
}
Process.Start(psi)?.WaitForExit()
' Then open with Sumatra
Process.Start("SumatraPDF.exe", pdfFile)
End Sub
End Module
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<h1>Hello World</h1><p>This is HTML to PDF conversion.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<h1>Hello World</h1><p>This is HTML to PDF conversion.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<h1>Hello World</h1><p>This is HTML to PDF conversion.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End Module
This example demonstrates the fundamental architectural difference. Sumatra PDF cannot directly convert HTML to PDF—you must use an external tool like wkhtmltopdf as an intermediary, then launch Sumatra as a separate process to view the result. This requires two external executables and multiple process launches.
IronPDF uses a ChromePdfRenderer with RenderHtmlAsPdf() in just three lines of code. No external tools, no process management, no intermediary files. The PDF is created directly in memory and saved with SaveAs(). See the HTML to PDF documentation for comprehensive examples.
Example 2: Opening and Displaying PDFs
Before (Sumatra PDF):
// Sumatra PDF is a standalone Windows app (AGPLv3) — no official NuGet package.
// Download SumatraPDF.exe from https://www.sumatrapdfreader.org/ and call it via Process.Start.
// Useful CLI flags: -page <n>, -print-to-default, -print-to "<printer>", -print-settings, -silent.
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
string pdfPath = "document.pdf";
// Sumatra PDF excels at viewing PDFs
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "SumatraPDF.exe",
Arguments = $"\"{pdfPath}\"",
UseShellExecute = true
};
Process.Start(startInfo);
// Optional: Open specific page
// Arguments = $"-page 5 \"{pdfPath}\""
}
}
// Sumatra PDF is a standalone Windows app (AGPLv3) — no official NuGet package.
// Download SumatraPDF.exe from https://www.sumatrapdfreader.org/ and call it via Process.Start.
// Useful CLI flags: -page <n>, -print-to-default, -print-to "<printer>", -print-settings, -silent.
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
string pdfPath = "document.pdf";
// Sumatra PDF excels at viewing PDFs
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "SumatraPDF.exe",
Arguments = $"\"{pdfPath}\"",
UseShellExecute = true
};
Process.Start(startInfo);
// Optional: Open specific page
// Arguments = $"-page 5 \"{pdfPath}\""
}
}
Imports System.Diagnostics
Imports System.IO
Module Program
Sub Main()
Dim pdfPath As String = "document.pdf"
' Sumatra PDF excels at viewing PDFs
Dim startInfo As New ProcessStartInfo With {
.FileName = "SumatraPDF.exe",
.Arguments = $"""{pdfPath}""",
.UseShellExecute = True
}
Process.Start(startInfo)
' Optional: Open specific page
' startInfo.Arguments = $"-page 5 ""{pdfPath}"""
End Sub
End Module
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Extract information
Console.WriteLine($"Page Count: {pdf.PageCount}");
// IronPDF can manipulate and save, then open with default viewer
pdf.SaveAs("modified.pdf");
// Open with default PDF viewer
Process.Start(new ProcessStartInfo("modified.pdf") { UseShellExecute = true });
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Extract information
Console.WriteLine($"Page Count: {pdf.PageCount}");
// IronPDF can manipulate and save, then open with default viewer
pdf.SaveAs("modified.pdf");
// Open with default PDF viewer
Process.Start(new ProcessStartInfo("modified.pdf") { UseShellExecute = true });
}
}
Imports IronPdf
Imports System
Imports System.Diagnostics
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
' Extract information
Console.WriteLine($"Page Count: {pdf.PageCount}")
' IronPDF can manipulate and save, then open with default viewer
pdf.SaveAs("modified.pdf")
' Open with default PDF viewer
Process.Start(New ProcessStartInfo("modified.pdf") With {.UseShellExecute = True})
End Sub
End Class
Sumatra PDF excels at viewing PDFs, but it's limited to launching an external process with command-line arguments. You cannot programmatically access the PDF content—only display it.
IronPDF loads the PDF with PdfDocument.FromFile(), giving you full programmatic access. You can read properties like PageCount, manipulate the document, save changes, and then open with the system's default PDF viewer. The key difference is that IronPDF provides an actual API, not just process arguments. Learn more in our tutorials.
Example 3: Extracting Text from PDFs
Before (Sumatra PDF):
// Sumatra PDF is a standalone Windows viewer (AGPLv3) — no official NuGet package
// and no programmatic text-extraction API. To extract text you must shell out to a
// separate tool such as pdftotext (Xpdf / Poppler).
using System;
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
// Sumatra PDF is a viewer, not a text extraction library
// You'd need to use PDFBox, iTextSharp, or similar for extraction
string pdfFile = "document.pdf";
// This would require external tools like pdftotext
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "pdftotext.exe",
Arguments = $"{pdfFile} output.txt",
UseShellExecute = false
};
Process.Start(psi)?.WaitForExit();
string extractedText = File.ReadAllText("output.txt");
Console.WriteLine(extractedText);
}
}
// Sumatra PDF is a standalone Windows viewer (AGPLv3) — no official NuGet package
// and no programmatic text-extraction API. To extract text you must shell out to a
// separate tool such as pdftotext (Xpdf / Poppler).
using System;
using System.Diagnostics;
using System.IO;
class Program
{
static void Main()
{
// Sumatra PDF is a viewer, not a text extraction library
// You'd need to use PDFBox, iTextSharp, or similar for extraction
string pdfFile = "document.pdf";
// This would require external tools like pdftotext
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "pdftotext.exe",
Arguments = $"{pdfFile} output.txt",
UseShellExecute = false
};
Process.Start(psi)?.WaitForExit();
string extractedText = File.ReadAllText("output.txt");
Console.WriteLine(extractedText);
}
}
Imports System
Imports System.Diagnostics
Imports System.IO
Module Program
Sub Main()
' Sumatra PDF is a viewer, not a text extraction library
' You'd need to use PDFBox, iTextSharp, or similar for extraction
Dim pdfFile As String = "document.pdf"
' This would require external tools like pdftotext
Dim psi As New ProcessStartInfo With {
.FileName = "pdftotext.exe",
.Arguments = $"{pdfFile} output.txt",
.UseShellExecute = False
}
Process.Start(psi)?.WaitForExit()
Dim extractedText As String = File.ReadAllText("output.txt")
Console.WriteLine(extractedText)
End Sub
End Module
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Extract text from all pages
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted Text:");
Console.WriteLine(allText);
// Extract text from specific page
string pageText = pdf.ExtractTextFromPage(0);
Console.WriteLine($"\nFirst Page Text:\n{pageText}");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
// Extract text from all pages
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted Text:");
Console.WriteLine(allText);
// Extract text from specific page
string pageText = pdf.ExtractTextFromPage(0);
Console.WriteLine($"\nFirst Page Text:\n{pageText}");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
' Extract text from all pages
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine("Extracted Text:")
Console.WriteLine(allText)
' Extract text from specific page
Dim pageText As String = pdf.ExtractTextFromPage(0)
Console.WriteLine(vbCrLf & "First Page Text:" & vbCrLf & pageText)
End Sub
End Class
Sumatra PDF is a viewer, not a text extraction library. To extract text, you must use external command-line tools like pdftotext.exe, spawn a process, wait for it to complete, read the output file, and handle all the associated file I/O and cleanup.
IronPDF provides native text extraction with ExtractAllText() for the entire document or ExtractTextFromPage(0) for specific pages. No external processes, no temporary files, no cleanup required.
Feature Comparison
| Feature | Sumatra PDF | IronPDF | |||
|---|---|---|---|---|---|
| :Creation: | HTML to PDF | No | Yes | ||
| URL to PDF | No | Yes | |||
| Text to PDF | No | Yes | |||
| Image to PDF | No | Yes | |||
| :Manipulation: | Merge PDFs | No | Yes | ||
| Split PDFs | No | Yes | |||
| Rotate Pages | No | Yes | |||
| Delete Pages | No | Yes | |||
| Reorder Pages | No | Yes | |||
| :Content: | Add Watermarks | No | Yes | ||
| Add Headers/Footers | No | Yes | |||
| Stamp Text | No | Yes | |||
| Stamp Images | No | Yes | |||
| :Security: | Password Protection | No | Yes | ||
| Digital Signatures | No | Yes | |||
| Encryption | No | Yes | |||
| Permission Settings | No | Yes | |||
| :Extraction: | Extract Text | No | Yes | ||
| Extract Images | No | Yes | |||
| :Platform: | Windows | Yes | Yes | ||
| Linux | No | Yes | |||
| macOS | No | Yes | |||
| Web Apps | No | Yes | |||
| Azure/AWS | No | Yes |
New Capabilities After Migration
After migrating to IronPDF, you gain capabilities that Sumatra PDF cannot provide:
PDF Creation from HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head><style>body { font-family: Arial; }</style></head>
<body>
<h1>Invoice #12345</h1>
<p>Thank you for your purchase.</p>
</body>
</html>");
pdf.SaveAs("invoice.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head><style>body { font-family: Arial; }</style></head>
<body>
<h1>Invoice #12345</h1>
<p>Thank you for your purchase.</p>
</body>
</html>");
pdf.SaveAs("invoice.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("
<html>
<head><style>body { font-family: Arial; }</style></head>
<body>
<h1>Invoice #12345</h1>
<p>Thank you for your purchase.</p>
</body>
</html>")
pdf.SaveAs("invoice.pdf")
PDF Merging
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var book = PdfDocument.Merge(pdf1, pdf2, pdf3);
book.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var book = PdfDocument.Merge(pdf1, pdf2, pdf3);
book.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim pdf3 = PdfDocument.FromFile("chapter3.pdf")
Dim book = PdfDocument.Merge(pdf1, pdf2, pdf3)
book.SaveAs("complete_book.pdf")
Watermarks
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 60pt;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 60pt;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("
<div style='
font-size: 60pt;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>")
pdf.SaveAs("watermarked.pdf")
Password Protection
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Sensitive Data</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Sensitive Data</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sensitive Data</h1>")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SaveAs("protected.pdf")
Migration Checklist
Pre-Migration
- Identify all Sumatra process launches (
Process.Start("SumatraPDF.exe", ...)) - Document print workflows (
-print-to-defaultarguments) - Note any Sumatra command-line arguments used
- Obtain IronPDF license key from ironpdf.com
Code Updates
- Install
IronPdfNuGet package - Remove Sumatra process code
- Replace
Process.Start("SumatraPDF.exe", pdfPath)withPdfDocument.FromFile(pdfPath) - Replace external
wkhtmltopdf.execalls withChromePdfRenderer.RenderHtmlAsPdf() - Replace external
pdftotext.execalls withpdf.ExtractAllText() - Replace
-print-to-defaultprocess calls withpdf.Print() - Add license initialization at application startup
Testing
- Test PDF generation quality
- Verify print functionality
- Test on all target platforms
- Verify no Sumatra dependency remains
Cleanup
- Remove Sumatra from installers
- Update documentation
- Remove Sumatra from system requirements

