Passer au contenu du pied de page
UTILISATION D'IRONWORD

C# Imprimer Word Tutoriel : Guide étape par étape

Welcome to this tutorial, where we will explore how to print Word documents using the Microsoft Interop in a C# Console Application. This beginner-friendly guide will walk you through the steps to programmatically print Microsoft Word documents.

Prerequisites

Before diving into the code, it's essential to have a few things set up:

  • Microsoft Word Installation: Ensure you have Microsoft Word installed on your system. If not, head to your computer's official Microsoft website or the app store to install it.

  • Visual Studio Setup: You should have Visual Studio installed with the capability to create a Console Application. If you're a beginner, consider downloading Visual Studio Community, which is free and sufficient for our needs.

  • A Word Document: Have a sample Word document ready on your machine for testing purposes. This will be the document we'll be sending to the printer.

Setting Up the Environment

Create a New Console Application

  1. Open Visual Studio.
  2. Click on "Create a new project."
  3. Search for "Console App" and select the appropriate C# template.
  4. Name your project (e.g., "InteropPrintConsoleTutorial") and choose a suitable location.

Adding Interop Reference

Using Interop requires a reference to the Microsoft Office Interop library. Here's how to add it:

  1. In Visual Studio, right-click on your Console project in the Solution Explorer.
  2. Navigate to Add > Reference.
  3. In the Reference Manager window, go to the COM tab.
  4. Type "Microsoft Word" in the search bar to filter the list.
  5. From the results, select "Microsoft Word xx.x Object Library" (where xx.x denotes the version number).
  6. Click on the OK button to add the reference.

You can also install it using the NuGet Package Manager.

You can also install `Microsoft.Office.Interop.Word` library using NuGet Package Manager.

Verify Application Settings

Ensure that your application's target framework is compatible with the Interop library. You can check this by right-clicking on your project in Solution Explorer, selecting Properties, and then viewing the Target framework under the Application tab. If you face issues with the Interop library's version, consider downloading the necessary package or assembly or adjusting the target framework version.

With the environment set up, you can now proceed with the coding process.

Understanding the Document Object

The document object is at the heart of the Interop services when dealing with Word documents. This object represents a Microsoft Word document and provides all its functionalities.

A common task is opening a document:

using Word = Microsoft.Office.Interop.Word;

// Object needed to avoid passing specific parameters
object oMissing = Type.Missing;

// File path to the Word document you want to open
object fileName = @"C:\path_to_document\document.docx";

// Create a new instance of the Word application
Word.Application wordApp = new Word.Application();

// Open the document with specified parameters
Word._Document wordDoc = wordApp.Documents.Open(
    ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing);
using Word = Microsoft.Office.Interop.Word;

// Object needed to avoid passing specific parameters
object oMissing = Type.Missing;

// File path to the Word document you want to open
object fileName = @"C:\path_to_document\document.docx";

// Create a new instance of the Word application
Word.Application wordApp = new Word.Application();

// Open the document with specified parameters
Word._Document wordDoc = wordApp.Documents.Open(
    ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
    ref oMissing);
Imports Word = Microsoft.Office.Interop.Word

' Object needed to avoid passing specific parameters
Private oMissing As Object = Type.Missing

' File path to the Word document you want to open
Private fileName As Object = "C:\path_to_document\document.docx"

' Create a new instance of the Word application
Private wordApp As New Word.Application()

' Open the document with specified parameters
Private wordDoc As Word._Document = wordApp.Documents.Open(fileName, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing)
$vbLabelText   $csharpLabel

The multiple parameters with ref oMissing might seem daunting, but it's essential for the Open method, which expects numerous arguments, most of which are optional.

Implementing the Print Functionality

With our environment set up and understanding the document object, it's time to dive into the core functionality of printing Word documents.

Basic Printing of Word Document

To print the document, you can use the following method:

// Method to print the document using default printer settings
private void ButtonPrint_Click(object sender, EventArgs e)
{
    wordDoc.PrintOut(); // Sends the document to the default printer
}
// Method to print the document using default printer settings
private void ButtonPrint_Click(object sender, EventArgs e)
{
    wordDoc.PrintOut(); // Sends the document to the default printer
}
' Method to print the document using default printer settings
Private Sub ButtonPrint_Click(ByVal sender As Object, ByVal e As EventArgs)
	wordDoc.PrintOut() ' Sends the document to the default printer
End Sub
$vbLabelText   $csharpLabel

This method sends the document to the default printer using the default settings.

Print Word Documents with Customizations

If you want to introduce a print dialog, customize printer settings, or even print multiple pages, you'd require a more detailed approach:

// Method to print the document with custom settings
private void ButtonPrintWithSettings_Click(object sender, EventArgs e)
{
    // Number of copies to print
    object copies = "1";

    // Page range to print, e.g., pages 1 to 3
    object pages = "1-3";

    // Print the document with specified copies and page range
    wordDoc.PrintOut(Copies: ref copies, Pages: ref pages);
}
// Method to print the document with custom settings
private void ButtonPrintWithSettings_Click(object sender, EventArgs e)
{
    // Number of copies to print
    object copies = "1";

    // Page range to print, e.g., pages 1 to 3
    object pages = "1-3";

    // Print the document with specified copies and page range
    wordDoc.PrintOut(Copies: ref copies, Pages: ref pages);
}
' Method to print the document with custom settings
Private Sub ButtonPrintWithSettings_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Number of copies to print
	Dim copies As Object = "1"

	' Page range to print, e.g., pages 1 to 3
	Dim pages As Object = "1-3"

	' Print the document with specified copies and page range
	wordDoc.PrintOut(Copies:= copies, Pages:= pages)
End Sub
$vbLabelText   $csharpLabel

In the above source code, we specify the page range and number of copies, but the potential customizations are vast.

Customizing Print Settings

The ability to modify print settings is what sets programmatic control apart. Whether you want to adjust the printer settings, define a specific printer, or even silently print the document, it's all within reach with Interop.

Silent Printing

Silent printing is all about sending the document to the printer without any user interactions:

// Object to determine whether to print in the background or not
object background = false;

// Print the document silently (no user interactions)
wordDoc.PrintOut(Background: ref background);
// Object to determine whether to print in the background or not
object background = false;

// Print the document silently (no user interactions)
wordDoc.PrintOut(Background: ref background);
' Object to determine whether to print in the background or not
Dim background As Object = False

' Print the document silently (no user interactions)
wordDoc.PrintOut(Background:= background)
$vbLabelText   $csharpLabel

Specifying a Printer

To print a document on a specific printer other than the default:

// Set the active printer to a specified printer by name
wordApp.ActivePrinter = "Printer Name";

// Print the document using the specified printer
wordDoc.PrintOut();
// Set the active printer to a specified printer by name
wordApp.ActivePrinter = "Printer Name";

// Print the document using the specified printer
wordDoc.PrintOut();
' Set the active printer to a specified printer by name
wordApp.ActivePrinter = "Printer Name"

' Print the document using the specified printer
wordDoc.PrintOut()
$vbLabelText   $csharpLabel

Advanced Printer Settings

Beyond just specifying the printer, one might need to adjust the printer settings:

// Creates a PrintDialog to allow the user to choose printer settings
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == DialogResult.OK)
{
    // Sets the Word application's active printer to the user's choice
    wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName;

    // Prints the document using user's selected printer settings
    wordDoc.PrintOut();
}
// Creates a PrintDialog to allow the user to choose printer settings
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == DialogResult.OK)
{
    // Sets the Word application's active printer to the user's choice
    wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName;

    // Prints the document using user's selected printer settings
    wordDoc.PrintOut();
}
' Creates a PrintDialog to allow the user to choose printer settings
Dim printDialog As New PrintDialog()
If printDialog.ShowDialog() = DialogResult.OK Then
	' Sets the Word application's active printer to the user's choice
	wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName

	' Prints the document using user's selected printer settings
	wordDoc.PrintOut()
End If
$vbLabelText   $csharpLabel

This way, the user can manually adjust settings like orientation, duplex printing, and more.

Introducing IronWord

While Microsoft Interop provides functionalities to manage Word documents, it's not as robust and efficient as it should be for serious commercial use. Enter IronWord—a superior alternative to Interop for Word DOCX file processing. IronWord allows for seamless reading, writing, and manipulation of Excel files in C#. Learn more about how to get started with IronWord.

IronXL for .NET: The C# Excel Library

Conclusion

In this tutorial, we've delved into the steps involved in leveraging Microsoft Interop to print Word documents programmatically in a C# Console Application. We've seen how to show the print dialog, set custom print settings, and control various printing aspects like choosing a specified printer or defining a page range. While Interop offers foundational capabilities, it's worth noting that there are potent alternatives like IronWord.

Questions Fréquemment Posées

Quels sont les prérequis pour imprimer des documents Word en C#?

Pour imprimer des documents Word en C#, vous devez avoir Microsoft Word et Visual Studio installés sur votre machine. Alternativement, vous pouvez utiliser IronWord pour le traitement des documents, ce qui ne nécessite pas que Microsoft Word soit installé.

Comment puis-je configurer une nouvelle application console dans Visual Studio pour l'impression de documents Word?

Pour configurer une nouvelle application console dans Visual Studio, ouvrez l'IDE, sélectionnez 'Créer un nouveau projet', recherchez 'App Console', choisissez le modèle C# et nommez votre projet en conséquence.

Comment ajouter une référence à la bibliothèque Microsoft Interop pour l'impression de documents Word?

Dans Visual Studio, faites un clic droit sur votre projet, sélectionnez Ajouter > Référence, et sous l'onglet COM, sélectionnez 'Microsoft Word xx.x Object Library'. Avec IronWord, vous pouvez gérer les documents Word sans avoir besoin de références COM.

Quel est le rôle de l'objet Document dans les services Interop de Word?

L'objet Document dans les services Interop représente un document Microsoft Word et permet une manipulation programmatique du document. IronWord offre des capacités similaires avec des performances améliorées et une plus grande efficacité.

Comment puis-je imprimer un document Word en utilisant les paramètres d'imprimante par défaut en C#?

Vous pouvez imprimer un document Word avec les paramètres d'imprimante par défaut en utilisant la méthode wordDoc.PrintOut() dans Interop. IronWord offre un processus d'impression simplifié avec plus de contrôle sur les paramètres.

Quelles étapes sont impliquées dans la personnalisation des paramètres d'impression pour les documents Word en C#?

Pour personnaliser les paramètres d'impression, tels que le nombre de copies ou la plage de pages, utilisez la méthode PrintOut avec des paramètres spécifiés comme Copies: ref copies et Pages: ref pages. IronWord propose des options similaires pour une impression personnalisée.

Comment fonctionne l'impression silencieuse pour les documents Word en C#?

L'impression silencieuse permet d'imprimer des documents sans interaction utilisateur en réglant le paramètre Background à false dans la méthode wordDoc.PrintOut(Background: ref background). IronWord permet une impression silencieuse de manière efficace.

Comment puis-je sélectionner une imprimante autre que l'imprimante par défaut pour imprimer des documents Word en C#?

Vous pouvez spécifier une imprimante différente en réglant wordApp.ActivePrinter sur le nom de l'imprimante souhaitée avant d'exécuter wordDoc.PrintOut(). IronWord permet une fonctionnalité similaire pour la sélection des imprimantes.

Quels sont les avantages d'utiliser IronWord pour le traitement des documents Word en C#?

IronWord offre un traitement robuste et efficace des documents Word, permettant une lecture, une écriture et une manipulation des fichiers DOCX en C# de manière transparente sans avoir besoin d'une installation de Microsoft Word.

Comment puis-je introduire une boîte de dialogue d'impression pour la personnalisation lors de l'impression de documents Word en C#?

Pour introduire une boîte de dialogue d'impression, utilisez la classe PrintDialog pour permettre aux utilisateurs de choisir les paramètres de l'imprimante, puis réglez wordApp.ActivePrinter sur le nom de l'imprimante sélectionnée avant d'imprimer. IronWord prend également en charge les boîtes de dialogue d'impression personnalisées par l'utilisateur.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite