
Comment créer un visualiseur de PDF Blazor avec IronPDF
Les tâches d'impression de fichiers PDF ASP .NET impliquent souvent des défis uniques auxquels les développeurs sont fréquemment confrontés. Que vous génériez des documents PDF pour des factures, des rapports ou des étiquettes d'expédition, la mise en œuvre d'une fonctionnalité d'impression fiable nécessite de naviguer dans les complexités de l'architecture serveur-client.
Dans cet article, nous vous montrerons comment gérer les tâches d'impression PDF en utilisant la puissante bibliothèque PDF for .NET de IronPDF.
Comprendre le Défi
Les applications de bureau traditionnelles peuvent accéder directement à l'imprimante par défaut, mais les applications ASP.NET Core rencontrent plusieurs obstacles lors de l'impression de documents PDF :
// This fails in ASP.NET - wrong approach
Process.Start(@"C:\Files\document.pdf"); // Works locally, crashes on server' This fails in ASP.NET - wrong approach
Process.Start("C:\Files\document.pdf") ' Works locally, crashes on serverLe code ci-dessus illustre une erreur courante. L'environnement serveur ne dispose pas d'un accès direct à l'imprimante, et le système génère des erreurs en raison de restrictions de permissions IIS. Une autre chose à garder à l'esprit est que les applications web doivent gérer efficacement les scénarios d'impression côté serveur et côté client.
Commencer avec IronPDF
IronPDF fournit une solution complète pour .NET core pour générer des documents PDF et les imprimer sans dépendances externes comme Adobe Reader. Installons le package IronPDF en utilisant NuGet :
Cette bibliothèque .NET fonctionne parfaitement sur tous les systèmes d'exploitation, éliminant les problèmes de compatibilité qui affectent d'autres bibliothèques. Cet outil fonctionne bien dans les environnements Microsoft Windows et autres systèmes d'exploitation.
Créer et Imprimer des Documents PDF du Côté Serveur avec l'Imprimante par Défaut
Voici comment générer et imprimer un document PDF à partir d'un balisage HTML dans votre contrôleur ASP.NET :
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using System.Drawing;
public class PdfController : Controller
{
public IActionResult Index()
{
// Initialize the renderer
var renderer = new ChromePdfRenderer();
// Configure print-optimized settings
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
// Generate PDF from HTML
var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $999</p>");
// Print to default printer
pdf.Print();
return Ok("Document sent to printer");
}
}
Le ChromePdfRenderer gère la conversion tout en préservant le style CSS et le formatage des tailles de police. Cet exemple montre une impression basique à l'imprimante par défaut sans interaction utilisateur.
Sortie
Configuration de l'Imprimante Réseau
Pour les environnements d'entreprise nécessitant un routage d'imprimante spécifique :
public IActionResult PrintToNetworkPrinter(string filePath)
{
// Load existing PDF file
var pdfDocument = PdfDocument.FromFile(filePath);
// Get print document for advanced settings
var printDocument = pdfDocument.GetPrintDocument();
// Specify network printer
printDocument.PrinterSettings.PrinterName = @"\\server\printer";
printDocument.PrinterSettings.Copies = 2;
// Configure page settings
printDocument.DefaultPageSettings.Landscape = false;
var renderer = printDocument.PrinterSettings.PrinterResolution;
// Execute print
printDocument.Print();
return Json(new { success = true });
}Public Function PrintToNetworkPrinter(filePath As String) As IActionResult
' Load existing PDF file
Dim pdfDocument = PdfDocument.FromFile(filePath)
' Get print document for advanced settings
Dim printDocument = pdfDocument.GetPrintDocument()
' Specify network printer
printDocument.PrinterSettings.PrinterName = "\\server\printer"
printDocument.PrinterSettings.Copies = 2
' Configure page settings
printDocument.DefaultPageSettings.Landscape = False
Dim renderer = printDocument.PrinterSettings.PrinterResolution
' Execute print
printDocument.Print()
Return Json(New With {.success = True})
End FunctionCette approche offre un contrôle complet sur les paramètres de l'imprimante, y compris le format du papier et la résolution, ce qui est essentiel pour un dessin et une mise en page corrects.
Sortie

Confirmation d'Impression

Stratégie d'Impression Côté Client
Puisque les navigateurs restreignent l'accès direct à l'imprimante, implémentez une impression côté client en servant le fichier PDF pour téléchargement :
public IActionResult GetRawPrintablePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml());
// This header tells the browser to display the file inline.
// We use IHeaderDictionary indexer to prevent ArgumentException.
**HttpContext context**.Response.Headers["Content-Disposition"] = "inline; filename=invoice.pdf";
return File(pdf.BinaryData, "application/pdf");
}
public IActionResult PrintUsingClientWrapper()
{
var printUrl = Url.Action(nameof(GetRawPrintablePdf));
// Use a simple HTML/JavaScript wrapper to force the print dialog
var html = new StringBuilder();
html.AppendLine("<!DOCTYPE html>");
html.AppendLine("<html lang=\"en\">");
html.AppendLine("<head>");
html.AppendLine(" <title>Print Document</title>");
html.AppendLine("</head>");
html.AppendLine("<body>");
// Load the PDF from the 'GetRawPrintablePdf' action into an invisible iframe.
html.AppendLine($" <iframe src='{printUrl}' style='position:absolute; top:0; left:0; width:100%; height:100%; border:none;'></iframe>");
html.AppendLine(" <script>");
// Wait for the iframe (and thus the PDF) to load, then trigger the print dialog.
html.AppendLine(" window.onload = function() {");
html.AppendLine(" // Wait briefly to ensure the iframe content is rendered before printing.");
html.AppendLine(" setTimeout(function() {");
html.AppendLine(" window.print();");
html.AppendLine(" }, 100);");
html.AppendLine(" };");
html.AppendLine(" </script>");
html.AppendLine("</body>");
html.AppendLine("</html>");
return Content(html.ToString(), "text/html");
}
private string GetInvoiceHtml()
{
// Build HTML with proper structure
return @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { font-weight: bold; color: #1e40af; border-bottom: 2px solid #3b82f6; padding-bottom: 5px; }
.content { padding-top: 10px; }
</style>
</head>
<body>
<div class='header'>Invoice Summary (Client View)</div>
<div class='content'>
<p>Document content: This file is optimized for printing.</p>
<p>Total Amount: <b>$999.00</b></p>
</div>
</body>
</html>";
}
Le document PDF s'ouvre dans le navigateur où les utilisateurs peuvent déclencher l'impression via leur imprimante par défaut en utilisant les boîtes de dialogue d'impression standard du navigateur. Cette approche est supérieure à une demande de serveur direct pour l'impression.
Sortie

Travailler avec différentes entrées de code source
IronPDF gère avec flexibilité diverses entrées de code source, ce qui est important à noter pour les développeurs cherchant à créer du code d'impression dynamique :
public async Task<IActionResult> PrintFromMultipleSources()
{
var renderer = new ChromePdfRenderer();
// From URL
var pdfFromUrl = await renderer.RenderUrlAsPdfAsync("https://example.com");
// From HTML file path
var pdfFromFile = renderer.RenderHtmlFileAsPdf(@"Templates\report.html");
var pdfToStream = renderer.RenderHtmlAsPdf("<h2>PDF from Memory Stream</h2><p>This content was loaded into memory first.</p>");
// Now, write the valid PDF bytes to the stream
using (var stream = new MemoryStream(pdfToStream.BinaryData))
{
var pdfFromStream = new PdfDocument(stream);
// Example: Print the PDF loaded from the stream
// pdfFromStream.Print();
}
pdfFromUrl.Print();
// Logging the various files handled
var fileList = new List<string> { "URL", "File Path", "Memory Stream" };
return Ok("PDF documents processed and 'example.com' printed to default server printer.");
}Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Public Class YourController
Inherits Controller
Public Async Function PrintFromMultipleSources() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
' From URL
Dim pdfFromUrl = Await renderer.RenderUrlAsPdfAsync("https://example.com")
' From HTML file path
Dim pdfFromFile = renderer.RenderHtmlFileAsPdf("Templates\report.html")
Dim pdfToStream = renderer.RenderHtmlAsPdf("<h2>PDF from Memory Stream</h2><p>This content was loaded into memory first.</p>")
' Now, write the valid PDF bytes to the stream
Using stream = New MemoryStream(pdfToStream.BinaryData)
Dim pdfFromStream = New PdfDocument(stream)
' Example: Print the PDF loaded from the stream
' pdfFromStream.Print()
End Using
pdfFromUrl.Print()
' Logging the various files handled
Dim fileList = New List(Of String) From {"URL", "File Path", "Memory Stream"}
Return Ok("PDF documents processed and 'example.com' printed to default server printer.")
End Function
End ClassLes lignes ci-dessus démontrent comment créer une nouvelle liste de sources de fichiers gérées. Chaque méthode préserve la structure du document et les graphiques tout en maintenant la qualité d'impression.

Gestion des Erreurs et Journalisation
Implémentez une gestion robuste des erreurs pour les environnements de production :
using System.Drawing.Printing; // For PrinterSettings
// ... other usings ...
public IActionResult SafePrint(string documentId)
{
try
{
var pdf = LoadPdfDocument(documentId);
// Verify printer availability
if (!PrinterSettings.InstalledPrinters.Cast<string>()
.Contains("Target Printer"))
{
// Log error and handle gracefully
return BadRequest("Printer not available");
}
pdf.Print();
// Log successful output
return Ok($"Document {documentId} printed successfully");
}
catch (Exception ex)
{
// Log error details
return StatusCode(500, "Printing failed");
}
}Imports System.Drawing.Printing ' For PrinterSettings
' ... other Imports ...
Public Function SafePrint(documentId As String) As IActionResult
Try
Dim pdf = LoadPdfDocument(documentId)
' Verify printer availability
If Not PrinterSettings.InstalledPrinters.Cast(Of String)().Contains("Target Printer") Then
' Log error and handle gracefully
Return BadRequest("Printer not available")
End If
pdf.Print()
' Log successful output
Return Ok($"Document {documentId} printed successfully")
Catch ex As Exception
' Log error details
Return StatusCode(500, "Printing failed")
End Try
End FunctionCela garantit une impression fiable même lorsque les ressources système ne sont pas disponibles et est une partie clé de votre service d'impression.
Scénarios de Sortie
Imprimante Non Disponible
Si l'imprimante spécifiée dans le code n'est pas disponible, le code fournira ce message d'erreur :

PDF Imprimé avec Succès
Si votre PDF est imprimé avec succès, vous devriez voir un message de confirmation tel que :

Configuration Avancée
La structure de dossiers d'IronPDF supporte des scénarios complexes. La version de la bibliothèque IronPDF que vous utilisez peut affecter ces paramètres :
public IActionResult ConfigureAdvancedPrinting(object sender, EventArgs e)
{
var renderer = new ChromePdfRenderer();
// Configure rendering options
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Wait for dynamic content
// Generate complex PDF documents
var pdf = renderer.RenderHtmlAsPdf(GetDynamicContent());
// Apply security settings
pdf.SecuritySettings.AllowUserPrinting = true;
pdf.MetaData.Author = "Your Company";
return File(pdf.BinaryData, "application/pdf");
}Public Function ConfigureAdvancedPrinting(sender As Object, e As EventArgs) As IActionResult
Dim renderer = New ChromePdfRenderer()
' Configure rendering options
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 500 ' Wait for dynamic content
' Generate complex PDF documents
Dim pdf = renderer.RenderHtmlAsPdf(GetDynamicContent())
' Apply security settings
pdf.SecuritySettings.AllowUserPrinting = True
pdf.MetaData.Author = "Your Company"
Return File(pdf.BinaryData, "application/pdf")
End FunctionLa commande pour imprimer est simplement pdf.Print() une fois le document généré.
Alternative IronPrint
Pour des besoins d'impression spécialisés, Iron Software offre également IronPrint, une bibliothèque d'impression .NET dédiée avec un support multiplateforme amélioré. Vous pouvez trouver un lien pour plus d'informations sur leur site Web. Le paramètre principal est simplement le chemin du fichier. La description du produit est disponible sur leur site web.
Conclusion
IronPDF transforme l'impression PDF ASP.NET d'un défi complexe en une implémentation simple. Sans nécessiter d'Adobe Reader ou de dépendances externes, vous pouvez générer et imprimer des fichiers PDF avec un minimum de code. La bibliothèque PDF gère tout, de la conversion HTML à la configuration de l'imprimante, ce qui la rend idéale pour l'automatisation côté serveur et les scénarios d'impression côté client.
Prêt à simplifier votre flux de travail d'impression PDF ? Commencez dès aujourd'hui avec l'essai gratuit et découvrez comment IronPDF simplifie le traitement des documents dans vos applications ASP.NET. Avec une documentation complète et un support technique direct, vous aurez une impression PDF prête pour la production en quelques minutes.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.
Articles connexes


