使用 IronPDF (.NET 10) 在默认查看器中打开 C# PDF
在 .NET 应用程序开发中,使用默认查看器打开 PDF 文件是一项常见任务。 使用IronPDF以编程方式生成 PDF 文件后,通常需要立即在用户选择的默认应用程序(例如 Adobe Acrobat 或 Microsoft Edge)中向用户显示这些文件。 本指南将引导您完成使用IronPDF生成 PDF 文件并使用 System.Diagnostics.Process.Start 在 Windows 中自动打开它们的步骤。
IronPDF 强大的HTML 到 PDF 转换功能与简单的 Process 启动方法相结合,为在用户计算机上配置的默认应用程序中构建和显示专业 PDF 文件创建了一个实用的工作流程。
如何在 .NET 项目中安装 IronPDF?
在生成或打开任何 PDF 文件之前,您的项目中需要安装 IronPDF。 可以使用 NuGet 包管理器控制台或 .NET 命令行界面:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
安装完成后,请添加您的许可证密钥或开始免费试用以启用全部功能。 IronPDF 文档详细介绍了所有配置选项,包括通过 NuGet 安装。
安装完成后,您就可以使用IronPDF 的全部功能,包括 HTML 转 PDF、URL 渲染、PDF 合并、水印、数字签名等等。
如何生成和打开PDF文件?
最简单的方法包括三个步骤:
- 使用IronPDF创建PDF文档。
- 将文件保存到目录中。
- 使用
Process.Start在默认应用程序中打开 PDF。
以下是一个完整的可运行示例,您可以在 Visual Studio 中使用新的控制台应用程序项目进行尝试:
using IronPdf;
using System.Diagnostics;
// Create a new PDF renderer
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML content
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<body>
<h1>Invoice #12345</h1>
<p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
<table>
<tr><td>Product</td><td>Price</td></tr>
<tr><td>IronPDF License</td><td>$299</td></tr>
</table>
</body>
</html>");
// Save the PDF to a file
string outputPath = "invoice.pdf";
pdf.SaveAs(outputPath);
// Open the PDF in the default viewer
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true
});
using IronPdf;
using System.Diagnostics;
// Create a new PDF renderer
var renderer = new ChromePdfRenderer();
// Generate PDF from HTML content
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<body>
<h1>Invoice #12345</h1>
<p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
<table>
<tr><td>Product</td><td>Price</td></tr>
<tr><td>IronPDF License</td><td>$299</td></tr>
</table>
</body>
</html>");
// Save the PDF to a file
string outputPath = "invoice.pdf";
pdf.SaveAs(outputPath);
// Open the PDF in the default viewer
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true
});
Imports IronPdf
Imports System.Diagnostics
' Create a new PDF renderer
Dim renderer As New ChromePdfRenderer()
' Generate PDF from HTML content
Dim pdf = renderer.RenderHtmlAsPdf("
<html>
<body>
<h1>Invoice #12345</h1>
<p>Generated on: " & DateTime.Now.ToString("yyyy-MM-dd") & "</p>
<table>
<tr><td>Product</td><td>Price</td></tr>
<tr><td>IronPDF License</td><td>$299</td></tr>
</table>
</body>
</html>")
' Save the PDF to a file
Dim outputPath As String = "invoice.pdf"
pdf.SaveAs(outputPath)
' Open the PDF in the default viewer
Process.Start(New ProcessStartInfo With {
.FileName = outputPath,
.UseShellExecute = True
})
这段代码首先创建了 ChromePdfRenderer 实例,这是 IronPDF 的主要类,用于将 HTML 转换为 PDF。 RenderHtmlAsPdf 方法将 HTML 字符串转换为 PDF 文档对象。 有关此方法的更多信息,请参阅IronPDF 的 HTML 转 PDF 指南。
使用 SaveAs 保存 PDF 后,该代码使用 Process.Start 和 ProcessStartInfo 在默认 PDF 查看器中打开该文件。 这里的关键设置是 UseShellExecute = true,它告诉 Windows 使用其默认应用程序打开 PDF 文件。
输出
如下图所示,IronPDF 成功生成 PDF 文件,并使用系统上配置的默认查看器(在本例中为 Opera GX)显示该文件。

为什么需要顶级语句?
使用 .NET 10 和现代 C# 版本,顶级语句不再需要 Program 类包装器。 代码直接从文件顶部开始运行,使得示例更短更易于理解。 本指南中的所有示例均采用这种模式。
为什么在打开 PDF 文档时 UseShellExecute 很重要?
在 .NET Core 和现代 .NET 版本(.NET 5 到 .NET 10)中,UseShellExecute 参数默认为 false。 如果没有明确地将其设置为 true,您的应用程序在尝试启动 PDF 文件时将抛出错误。
using IronPdf;
using System.Diagnostics;
using System.IO;
// Generate a report with IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");
// Save to temp directory for immediate viewing
string tempPath = Path.Combine(Path.GetTempPath(), $"URL_{Guid.NewGuid()}.pdf");
pdf.SaveAs(tempPath);
// IMPORTANT: Set UseShellExecute = true for .NET Core/5+
var startInfo = new ProcessStartInfo
{
FileName = tempPath,
UseShellExecute = true // Required in .NET Core/5+ to open PDF in default viewer
};
Process.Start(startInfo);
using IronPdf;
using System.Diagnostics;
using System.IO;
// Generate a report with IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");
// Save to temp directory for immediate viewing
string tempPath = Path.Combine(Path.GetTempPath(), $"URL_{Guid.NewGuid()}.pdf");
pdf.SaveAs(tempPath);
// IMPORTANT: Set UseShellExecute = true for .NET Core/5+
var startInfo = new ProcessStartInfo
{
FileName = tempPath,
UseShellExecute = true // Required in .NET Core/5+ to open PDF in default viewer
};
Process.Start(startInfo);
Imports IronPdf
Imports System.Diagnostics
Imports System.IO
' Generate a report with IronPDF
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
Dim pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")
' Save to temp directory for immediate viewing
Dim tempPath As String = Path.Combine(Path.GetTempPath(), $"URL_{Guid.NewGuid()}.pdf")
pdf.SaveAs(tempPath)
' IMPORTANT: Set UseShellExecute = true for .NET Core/5+
Dim startInfo As New ProcessStartInfo With {
.FileName = tempPath,
.UseShellExecute = True ' Required in .NET Core/5+ to open PDF in default viewer
}
Process.Start(startInfo)
UseShellExecute 属性决定是否使用操作系统 shell 来启动进程。 设置为 true 时,Windows 会使用文件关联注册表来确定哪个默认 PDF 阅读器应该打开该文件。在现代 .NET 版本中,如果没有此设置,您将遇到运行时错误,提示无法打开该文件。
使用具有唯一文件名的临时目录(通过 Guid.NewGuid())可以防止在快速连续生成多个 PDF 时发生文件冲突。 操作系统会定期自动清理默认的临时文件夹。
输出

如何正确处理文件路径?
包含空格和特殊字符的文件路径需要谨慎处理。 缺少目录或路径格式错误会在到达 Process.Start 之前静默失败或抛出异常。 以下是一种包含目录创建和文件存在性检查的方法:
using IronPdf;
using System.Diagnostics;
using System.IO;
// Generate PDF from HTML file
var renderer = new ChromePdfRenderer();
var htmlContent = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Create output directory if it doesn't exist
string outputDir = @"C:\PDF Reports\Monthly";
Directory.CreateDirectory(outputDir);
// Build file path with timestamp
string fileName = $"Report_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
string fullPath = Path.Combine(outputDir, fileName);
// Save the PDF
pdf.SaveAs(fullPath);
// Verify file exists before opening in default PDF viewer
if (File.Exists(fullPath))
{
Process.Start(new ProcessStartInfo
{
FileName = fullPath,
UseShellExecute = true
});
}
else
{
Console.WriteLine($"Error: PDF file not found at {fullPath}");
}
using IronPdf;
using System.Diagnostics;
using System.IO;
// Generate PDF from HTML file
var renderer = new ChromePdfRenderer();
var htmlContent = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Create output directory if it doesn't exist
string outputDir = @"C:\PDF Reports\Monthly";
Directory.CreateDirectory(outputDir);
// Build file path with timestamp
string fileName = $"Report_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
string fullPath = Path.Combine(outputDir, fileName);
// Save the PDF
pdf.SaveAs(fullPath);
// Verify file exists before opening in default PDF viewer
if (File.Exists(fullPath))
{
Process.Start(new ProcessStartInfo
{
FileName = fullPath,
UseShellExecute = true
});
}
else
{
Console.WriteLine($"Error: PDF file not found at {fullPath}");
}
Imports IronPdf
Imports System.Diagnostics
Imports System.IO
' Generate PDF from HTML file
Dim renderer As New ChromePdfRenderer()
Dim htmlContent As String = File.ReadAllText("template.html")
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Create output directory if it doesn't exist
Dim outputDir As String = "C:\PDF Reports\Monthly"
Directory.CreateDirectory(outputDir)
' Build file path with timestamp
Dim fileName As String = $"Report_{DateTime.Now:yyyyMMdd_HHmmss}.pdf"
Dim fullPath As String = Path.Combine(outputDir, fileName)
' Save the PDF
pdf.SaveAs(fullPath)
' Verify file exists before opening in default PDF viewer
If File.Exists(fullPath) Then
Process.Start(New ProcessStartInfo With {
.FileName = fullPath,
.UseShellExecute = True
})
Else
Console.WriteLine($"Error: PDF file not found at {fullPath}")
End If
这段代码演示了几个最佳实践:使用 Path.Combine 正确构建文件路径,而无需考虑操作系统;使用 Directory.CreateDirectory 根据需要创建目录;以及在尝试使用默认查看器打开 PDF 之前验证文件是否存在。
文件名中的时间戳确保唯一性并提供何时生成每个PDF的清晰记录。 对于合并或拆分 PDF 、添加水印、数字签名以及页眉和页脚等高级 PDF 操作选项,请浏览 IronPDF 的操作指南。
路径中若包含空格呢?
Path.Combine 能正确处理空格,因为它将路径构建为字符串,而不是依赖于 shell 扩展。 ProcessStartInfo 类也能正确处理带引号的路径,当 UseShellExecute = true 时。 如果直接将路径传递给 shell 命令,请务必用双引号将其括起来。 使用 Process.Start,则 FileName 属性不需要手动加引号。
如何应用生产就绪的最佳实践?
对于生产应用,请考虑采用更完善的工作流程,该流程能够处理 PDF 生命周期,并提供错误处理、可配置的渲染选项和可预测的输出目录:
using IronPdf;
using IronPdf.Rendering;
using System.Diagnostics;
using System.IO;
static void GenerateAndDisplayPdf(string htmlContent, string documentName)
{
try
{
// Configure IronPDF renderer with production settings
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
PaperSize = PdfPaperSize.A4,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true
}
};
// Generate the PDF
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Use the user's Documents folder for better accessibility
string documentsPath = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
string pdfFolder = Path.Combine(documentsPath, "Generated PDFs");
Directory.CreateDirectory(pdfFolder);
string outputPath = Path.Combine(pdfFolder, $"{documentName}.pdf");
pdf.SaveAs(outputPath);
// Open PDF in default viewer without waiting for it to close
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true // Essential for opening PDF in default application
});
Console.WriteLine($"PDF opened: {outputPath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error generating or opening PDF: {ex.Message}");
}
}
using IronPdf;
using IronPdf.Rendering;
using System.Diagnostics;
using System.IO;
static void GenerateAndDisplayPdf(string htmlContent, string documentName)
{
try
{
// Configure IronPDF renderer with production settings
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
PaperSize = PdfPaperSize.A4,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true
}
};
// Generate the PDF
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Use the user's Documents folder for better accessibility
string documentsPath = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
string pdfFolder = Path.Combine(documentsPath, "Generated PDFs");
Directory.CreateDirectory(pdfFolder);
string outputPath = Path.Combine(pdfFolder, $"{documentName}.pdf");
pdf.SaveAs(outputPath);
// Open PDF in default viewer without waiting for it to close
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true // Essential for opening PDF in default application
});
Console.WriteLine($"PDF opened: {outputPath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error generating or opening PDF: {ex.Message}");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System.Diagnostics
Imports System.IO
Module PdfGenerator
Sub GenerateAndDisplayPdf(htmlContent As String, documentName As String)
Try
' Configure IronPDF renderer with production settings
Dim renderer As New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
.PaperSize = PdfPaperSize.A4,
.PrintHtmlBackgrounds = True,
.CreatePdfFormsFromHtml = True
}
}
' Generate the PDF
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Use the user's Documents folder for better accessibility
Dim documentsPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim pdfFolder As String = Path.Combine(documentsPath, "Generated PDFs")
Directory.CreateDirectory(pdfFolder)
Dim outputPath As String = Path.Combine(pdfFolder, $"{documentName}.pdf")
pdf.SaveAs(outputPath)
' Open PDF in default viewer without waiting for it to close
Process.Start(New ProcessStartInfo With {
.FileName = outputPath,
.UseShellExecute = True ' Essential for opening PDF in default application
})
Console.WriteLine($"PDF opened: {outputPath}")
Catch ex As Exception
Console.WriteLine($"Error generating or opening PDF: {ex.Message}")
End Try
End Sub
End Module
此示例包含结构化错误处理,并将 PDF 文件保存在用户的"文档"文件夹中,无论应用程序是如何启动的,都可以访问该文件夹。 它还为 IronPDF 配置了适合商务文档的渲染选项:A4 纸张大小、启用 HTML 背景打印以及从 HTML 表单元素自动创建表单字段。
您可以在 IronPDF 的操作指南库中了解更多关于交互式 PDF 表单和自定义水印的信息。
该方法不会等待 PDF 查看器关闭,从而允许应用程序在用户查看文档时继续运行。 根据微软关于 Process.Start 的文档,这种方法可以确保正确的资源管理,并防止应用程序阻塞在长时间运行的查看器进程上。 Microsoft Learn 上的ProcessStartInfo 类参考提供了您可以配置的属性的完整列表,包括窗口样式、动词(打开、打印)和工作目录。

配置渲染选项
ChromePdfRenderOptions 类允许您对输出 PDF 进行精细控制。 常见设置包括:
- PaperSize -- 设置为
PdfPaperSize.A4、Letter或任何标准尺寸。 - PrintHtmlBackgrounds -- 从 HTML 渲染背景颜色和图像。
- CreatePdfFormsFromHtml -- 将 HTML
<input>和<select>元素转换为交互式 PDF 表单字段。 - MarginTop / MarginBottom / MarginLeft / MarginRight -- 以毫米为单位控制页面边距。
这些设置同样适用于渲染 HTML 字符串、本地 HTML 文件或远程 URL。
如何从生成的PDF文件中提取数据?
生成并打开 PDF 文件后,您可能还需要阅读其内容。 IronPDF 支持从 PDF 文件中提取文本,这对于日志记录、验证或下游处理非常有用。
对于包含大量图像的文档,您还可以使用PDF 转图像功能将单个页面渲染为 PNG 或 JPEG 文件。 这在预览生成和缩略图工作流程中很常见。
这两个功能都可通过同一个 IronPDF 库实现,无需额外的依赖项。 完整的 IronPDF API 文档提供了所有提取和转换操作的方法级参考。
如果没有安装PDF阅读器会发生什么?
如果目标计算机上未安装 PDF 查看器,Windows 将显示一个对话框,要求用户选择一个应用程序或访问 Microsoft Store 查找一个。 这是标准的 Windows 行为,不受 Process.Start 的控制。
为了在生产代码中优雅地处理这种情况,您可以捕获当找不到 .pdf 文件扩展名的已注册处理程序时 Process.Start 抛出的 Win32Exception 异常:
using System.ComponentModel;
using System.Diagnostics;
try
{
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true
});
}
catch (Win32Exception ex) when (ex.NativeErrorCode == 1155)
{
// Error 1155: No application associated with the file extension
Console.WriteLine("No PDF viewer is installed. Please install a PDF reader such as Adobe Acrobat Reader.");
}
using System.ComponentModel;
using System.Diagnostics;
try
{
Process.Start(new ProcessStartInfo
{
FileName = outputPath,
UseShellExecute = true
});
}
catch (Win32Exception ex) when (ex.NativeErrorCode == 1155)
{
// Error 1155: No application associated with the file extension
Console.WriteLine("No PDF viewer is installed. Please install a PDF reader such as Adobe Acrobat Reader.");
}
Imports System.ComponentModel
Imports System.Diagnostics
Try
Process.Start(New ProcessStartInfo With {
.FileName = outputPath,
.UseShellExecute = True
})
Catch ex As Win32Exception When ex.NativeErrorCode = 1155
' Error 1155: No application associated with the file extension
Console.WriteLine("No PDF viewer is installed. Please install a PDF reader such as Adobe Acrobat Reader.")
End Try
错误代码 1155 对应于 ERROR_NO_ASSOCIATION,当没有应用程序注册该文件类型时,Windows 会返回此错误代码。 捕获到这个特定错误后,可以显示有用的消息,而不是导致程序崩溃。 完整的 Windows 系统错误代码列表记录在 Microsoft Learn 上的Win32 错误代码参考文档中。
如何选择合适的申请方式?
打开 PDF 文件的方法取决于您正在构建的应用程序类型:
| 应用程序类型 | 建议的翻译方法 | 关键考虑因素 |
|---|---|---|
| 控制台或桌面应用程序 | Process.Start 时 UseShellExecute = true | 简单,无需额外依赖 |
| Windows 服务 | 保存到磁盘;通过进程间通信或消息队列通知用户 | 服务无需桌面会话即可运行 |
| Web应用程序(ASP.NET) | 以文件下载或直接在浏览器中查看 PDF 流 | Process.Start 在 Web 服务器上下文中无效。 |
| MAUI 或 WinForms | 处理.启动或嵌入式 PDF 控件 | 嵌入式观看可带来更佳的应用内体验 |
对于使用 ASP.NET Core 构建的 Web 应用程序,请勿使用 Process.Start。 服务器进程在无头环境下运行,无法打开桌面应用程序。 相反,使用 File() 和 application/pdf MIME 类型将 PDF 作为文件结果返回,并让浏览器处理显示。
对于控制台和桌面应用程序,使用 Process.Start 和 UseShellExecute = true 仍然是最简单、最可靠的选择。
准备好在您的 .NET 应用程序中开始生成和查看 PDF 文件了吗? 您可以先免费试用以访问全部功能,或者查看IronPDF 许可页面,找到适合您项目的方案。
常见问题解答
如何使用 C# 在默认查看器中打开 PDF?
你可以使用 C# 中的 IronPDF 生成 PDF,并使用 System.Diagnostics.Process.Start 在用户的默认 PDF 应用程序中打开。
什么是IronPDF?
IronPDF 是一个 .NET 库,允许开发人员在他们的应用程序中以编程方式创建、编辑和处理 PDF 文件。
使用 IronPDF 的系统要求是什么?
IronPDF 与任何 .NET 应用程序兼容,并可在 Windows、macOS 和 Linux 平台上运行。它需要安装 .NET Framework 或 .NET Core/5+。
IronPDF 能否默认在 Adobe Acrobat 中打开 PDF?
是的,IronPDF 可以生成的 PDF 会在用户设置的默认 PDF 查看器中打开,这可以是 Adobe Acrobat、Microsoft Edge 或任何其他 PDF 查看应用程序。
System.Diagnostics.Process.Start 如何与 IronPDF 协同工作?
System.Diagnostics.Process.Start 用于在默认查看器中打开生成的 PDF 文件。一旦 IronPDF 创建了文件,此方法将启动与 PDF 文件关联的默认应用程序以显示该文件。
IronPDF 能否编辑 PDF 文件?
是的,IronPDF 允许你在保存或显示之前通过添加文本、图像、注释等方式编辑现有的 PDF 文件。
IronPDF 支持哪些编程语言?
IronPDF 主要用于 C#,但也可以集成到 VB.NET 和其他 .NET 支持的语言项目中。
IronPDF 能否在生成后自动显示 PDF?
是的,在使用 IronPDF 生成 PDF 后,你可以使用 System.Diagnostics.Process.Start 自动将其显示在用户的默认查看器中。
有没有可用于使用 IronPDF 的代码示例?
IronPDF 的文档提供了生成和操作 PDF 的各种代码示例,包括如何使用 C# 在默认查看器中打开它们。
IronPDF 的一些常见使用案例是什么?
IronPDF 的常见使用案例包括生成报告、发票和其他文档、将 HTML 转换为 PDF,以及自动化 PDF 显示过程在 .NET 应用程序中。
IronPDF 是否兼容 .NET 10?兼容 .NET 10 能带来哪些好处?
是的。IronPDF 完全兼容 .NET 10,包括其运行时和语言增强功能。将 IronPDF 与 .NET 10 结合使用,可让您的应用程序受益于性能提升,例如减少堆分配、加快 PDF 生成速度以及与现代 API 和平台更顺畅的集成。



