Test in a live environment
Test in production without watermarks.
Works wherever you need it to.
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.
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.
Using Interop requires a reference to the Microsoft Office Interop library. Here's how to add it:
You can also install it using the NuGet Package Manager.
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.
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:
object oMissing = Type.Missing;
object fileName = @"C:\path_to_document\document.docx";
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);
object oMissing = Type.Missing;
object fileName = @"C:\path_to_document\document.docx";
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);
Dim oMissing As Object = Type.Missing
Dim fileName As Object = "C:\path_to_document\document.docx"
Dim wordDoc As Word._Document = wordApp.Documents.Open(fileName, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing)
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.
With our environment set up and understanding the document object, it's time to dive into the core functionality of printing Word documents.
To print the document, you can use the following method:
private void ButtonPrint_Click(object sender, EventArgs e)
{
wordDoc.PrintOut();
}
private void ButtonPrint_Click(object sender, EventArgs e)
{
wordDoc.PrintOut();
}
Private Sub ButtonPrint_Click(ByVal sender As Object, ByVal e As EventArgs)
wordDoc.PrintOut()
End Sub
This method sends the document to the default printer using the default settings.
If you want to introduce a print dialog, customize printer settings, or even print multiple pages, you'd require a more detailed approach:
private void ButtonPrintWithSettings_Click(object sender, EventArgs e)
{
object copies = "1";
object pages = "1-3"; // To print multiple pages, e.g., 1 to 3.
wordDoc.PrintOut(Copies: ref copies, Pages: ref pages);
}
private void ButtonPrintWithSettings_Click(object sender, EventArgs e)
{
object copies = "1";
object pages = "1-3"; // To print multiple pages, e.g., 1 to 3.
wordDoc.PrintOut(Copies: ref copies, Pages: ref pages);
}
Private Sub ButtonPrintWithSettings_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim copies As Object = "1"
Dim pages As Object = "1-3" ' To print multiple pages, e.g., 1 to 3.
wordDoc.PrintOut(Copies:= copies, Pages:= pages)
End Sub
In the above source code, we specify the page range and number of copies, but the potential customizations are vast.
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 is all about sending the document to the printer without any user interactions:
object background = false;
wordDoc.PrintOut(Background: ref background);
object background = false;
wordDoc.PrintOut(Background: ref background);
Dim background As Object = False
wordDoc.PrintOut(Background:= background)
To print a document on a specific printer other than the default:
wordApp.ActivePrinter = "Printer Name";
wordDoc.PrintOut();
wordApp.ActivePrinter = "Printer Name";
wordDoc.PrintOut();
wordApp.ActivePrinter = "Printer Name"
wordDoc.PrintOut()
Beyond just specifying the printer, one might need to adjust the printer settings:
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == DialogResult.OK)
{
wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName;
wordDoc.PrintOut();
}
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == DialogResult.OK)
{
wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName;
wordDoc.PrintOut();
}
Dim printDialog As New PrintDialog()
If printDialog.ShowDialog() = DialogResult.OK Then
wordApp.ActivePrinter = printDialog.PrinterSettings.PrinterName
wordDoc.PrintOut()
End If
This way, the user can manually adjust settings like orientation, duplex printing, and more.
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.
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.
9 .NET API products for your office documents