<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Meatball&#039;s Guide to .NET &#187; Word</title>
	<atom:link href="http://rogerpence.com/blog/index.php/archives/tag/word/feed" rel="self" type="application/rss+xml" />
	<link>http://rogerpence.com/blog</link>
	<description>A dogma-free guide to making real-world sense of .NET</description>
	<lastBuildDate>Wed, 23 Jun 2010 16:15:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Batch printing Word documents</title>
		<link>http://rogerpence.com/blog/index.php/archives/180</link>
		<comments>http://rogerpence.com/blog/index.php/archives/180#comments</comments>
		<pubDate>Fri, 19 Jun 2009 14:41:58 +0000</pubDate>
		<dc:creator>rp</dc:creator>
				<category><![CDATA[Office]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[Word]]></category>

		<guid isPermaLink="false">http://rogerpence.com/blog/index.php/archives/180</guid>
		<description><![CDATA[I recently worked on a project where one of the tasks needing to be done was printing previously-created Word documents in batch, from a Windows fat-client program. The specification required that the user not see the Word doc. The class below provides a PrintDocument() method that automates Word to open the document and print it, [...]]]></description>
			<content:encoded><![CDATA[<p>I recently worked on a project where one of the tasks needing to be done was printing previously-created Word documents in batch, from a Windows fat-client program. The specification required that the user not see the Word doc. The class below provides a PrintDocument() method that automates Word to open the document and print it, without making Word document visible. </p>
<h3>Windows only!</h3>
<p>Do note that this code is only for use in a fat client environment. Word automation won’t work in multi-threaded, service-side environments such as ASP.NET. Don’t attempt to use this code in a Web app. Although the code presented here doesn’t show the Word document, Word does indeed get loaded (albeit invisibly) to print the document.</p>
<p>My general language of choice is C#, but I’ve learned that its much easier to code Office automation tasks with VB.NET than it is any other .NET language. My friends from England would call this “Horses for Courses.” The <a href="http://code.msdn.microsoft.com/csharpfuture">upcoming C# 4.0 enhancements</a> may (hopefully!) change this, but until then, I’m going to stick with using VB.NET for Office automation.</p>
<div class="sourceCodeHeading">Figure 1. A helper class to print a Word document</div>
<div id="Id0936453103SourceCode" class="sourceCode">
<pre class="even"><span class="ln">  1</span><span class="code">Imports System.IO </span></pre>
<pre class="odd"><span class="ln">  2</span><span class="code">Imports System.Windows.Forms </span></pre>
<pre class="even"><span class="ln">  3</span><span class="code">Imports System.Drawing</span></pre>
<pre class="odd"><span class="ln">  4</span><span class="code"></span></pre>
<pre class="even"><span class="ln">  5</span><span class="code">Namespace rp.OfficeHelpers</span></pre>
<pre class="odd"><span class="ln">  6</span><span class="code"></span></pre>
<pre class="even"><span class="ln">  7</span><span class="code">    Public Enum PrintStatus</span></pre>
<pre class="odd"><span class="ln">  8</span><span class="code">        Success</span></pre>
<pre class="even"><span class="ln">  9</span><span class="code">        FileNotFound</span></pre>
<pre class="odd"><span class="ln"> 10</span><span class="code">        FailedToOpenDocument</span></pre>
<pre class="even"><span class="ln"> 11</span><span class="code">        FailedToPrintDocument</span></pre>
<pre class="odd"><span class="ln"> 12</span><span class="code">    End Enum</span></pre>
<pre class="even"><span class="ln"> 13</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 14</span><span class="code">    Public Class Word</span></pre>
<pre class="even"><span class="ln"> 15</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 16</span><span class="code">        Public Shared Function PrintDocument( DocumentName As String, _  </span></pre>
<pre class="even"><span class="ln"> 17</span><span class="code">                                              PrinterName As String ) As PrintStatus </span></pre>
<pre class="odd"><span class="ln"> 18</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 19</span><span class="code">            PrintDocument( DocumentName, PrinterName, 1 ) </span></pre>
<pre class="odd"><span class="ln"> 20</span><span class="code">        End Function</span></pre>
<pre class="even"><span class="ln"> 21</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 22</span><span class="code">        Public Shared Function PrintDocument( DocumentName As String, _  </span></pre>
<pre class="even"><span class="ln"> 23</span><span class="code">                                              PrinterName As String, _ </span></pre>
<pre class="odd"><span class="ln"> 24</span><span class="code">                                              NumberOfCopies As Integer ) As PrintStatus </span></pre>
<pre class="even"><span class="ln"> 25</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 26</span><span class="code">            Dim wordApp As Microsoft.Office.Interop.Word.Application = _ </span></pre>
<pre class="even"><span class="ln"> 27</span><span class="code">                           new Microsoft.Office.Interop.Word.Application()</span></pre>
<pre class="odd"><span class="ln"> 28</span><span class="code">            Dim wordDoc As Microsoft.Office.Interop.Word.Document</span></pre>
<pre class="even"><span class="ln"> 29</span><span class="code">            Dim CurrentPrinter As String = wordApp.ActivePrinter</span></pre>
<pre class="odd"><span class="ln"> 30</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 31</span><span class="code">            If ( Not File.Exists( DocumentName ) )</span></pre>
<pre class="odd"><span class="ln"> 32</span><span class="code">                Return PrintStatus.FileNotFound    </span></pre>
<pre class="even"><span class="ln"> 33</span><span class="code">            End If</span></pre>
<pre class="odd"><span class="ln"> 34</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 35</span><span class="code">            wordApp.Visible = false</span></pre>
<pre class="odd"><span class="ln"> 36</span><span class="code">         </span></pre>
<pre class="even"><span class="ln"> 37</span><span class="code">            wordApp.ActivePrinter = PrinterName</span></pre>
<pre class="odd"><span class="ln"> 38</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 39</span><span class="code">            ' Document name must be provided as an object, not a string.</span></pre>
<pre class="odd"><span class="ln"> 40</span><span class="code">            Try </span></pre>
<pre class="even"><span class="ln"> 41</span><span class="code">                wordDoc = wordApp.Documents.Open( CType( DocumentName, Object ) )</span></pre>
<pre class="odd"><span class="ln"> 42</span><span class="code">            Catch WordError as System.Exception </span></pre>
<pre class="even"><span class="ln"> 43</span><span class="code">                Return PrintStatus.FailedToOpenDocument</span></pre>
<pre class="odd"><span class="ln"> 44</span><span class="code">            End Try  </span></pre>
<pre class="even"><span class="ln"> 45</span><span class="code">         </span></pre>
<pre class="odd"><span class="ln"> 46</span><span class="code">            Try </span></pre>
<pre class="even"><span class="ln"> 47</span><span class="code">                wordDoc.PrintOut( Copies := CType( NumberOfCopies, Object ), Background:= false )</span></pre>
<pre class="odd"><span class="ln"> 48</span><span class="code">            Catch WordError as System.Exception </span></pre>
<pre class="even"><span class="ln"> 49</span><span class="code">                Return PrintStatus.FailedToPrintDocument</span></pre>
<pre class="odd"><span class="ln"> 50</span><span class="code">            End Try  </span></pre>
<pre class="even"><span class="ln"> 51</span><span class="code">                                                                  </span></pre>
<pre class="odd"><span class="ln"> 52</span><span class="code">            wordApp.ActivePrinter = CurrentPrinter</span></pre>
<pre class="even"><span class="ln"> 53</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 54</span><span class="code">            wordApp.Quit( SaveChanges := false )</span></pre>
<pre class="even"><span class="ln"> 55</span><span class="code"></span></pre>
<pre class="odd"><span class="ln"> 56</span><span class="code">            Return PrintStatus.Success        </span></pre>
<pre class="even"><span class="ln"> 57</span><span class="code">        End Function</span></pre>
<pre class="odd"><span class="ln"> 58</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 59</span><span class="code">    End Class</span></pre>
<pre class="odd"><span class="ln"> 60</span><span class="code"></span></pre>
<pre class="even"><span class="ln"> 61</span><span class="code">End Namespace</span></pre>
</div>
<div class="sourceCodeFooter"><a id="Id0936453103SourceCodeToClipboard" class="copyLink" href="javascript:toggleLineNumbers( 'Id0936453103SourceCode' );">Show copy-friendly code</a></div>
]]></content:encoded>
			<wfw:commentRss>http://rogerpence.com/blog/index.php/archives/180/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
