چاپ سند Word در سی شارپ
سند Word در سی شارپ، را با Microsoft.Office.Interop.Word (نیاز به Office) یا Aspose.Words (بدون Office) چاپ کنید.
30 اردیبهشت 1405
لینک کوتاه
چاپ سند Word در سی شارپ
برای چاپ یک سند Word در سیشارپ، معمولاً از کتابخانه Microsoft.Office.Interop.Word استفاده میشود که امکان ارتباط با برنامه Word و فراخوانی مستقیم قابلیت چاپ را فراهم میکند.ابتدا باید ارجاعی به این کتابخانه در پروژه اضافه کنید.
سپس با ایجاد یک شیء از کلاس Application، سند مورد نظر را باز کرده و با متد () PrintOut آن را به چاپگر پیشفرض ارسال کنید.
همچنین میتوانید تعداد کپی، شماره صفحات و نام چاپگر را نیز تنظیم نمایید.
پس از اتمام چاپ، حتماً اشیاء COM را به درستی آزاد کنید (با فراخوانی Marshal.ReleaseComObject یا با استفاده از الگوی try-catch-finally) تا از باقی ماندن فرآیند Word در حافظه جلوگیری شود.
توجه داشته باشید که این روش نیازمند نصب Microsoft Word روی سیستم مقصد است و برای برنامههای تحت وب یا محیطهای سروری مناسب نیست.
در چنین مواردی، استفاده از کتابخانههای بدون وابستگی مانند DocumentFormat.OpenXml و چاپ از طریق PrintDocument در WinForms توصیه میشود.
استفاده از Microsoft Office Interop Word در چاپ سند
Microsoft Office Interop Word رایجترین روش برای کار با اسناد Word در سی شارپ است.این روش از نصب شده بودن نرمافزار Microsoft Word روی سیستم استفاده میکند و قابلیتهای کامل Word را در اختیار توسعهدهنده قرار میدهد.
مراحل پیادهسازی
گام 1: افزودن Reference
ابتدا باید در پروژه خود به کتابخانه Microsoft Office Interop Word ارجاع دهید:- در Solution Explorer روی References کلیک راست کنید
- گزینه Add Reference را انتخاب کنید
- به بخش COM بروید و Microsoft Word 16.0 Object Library (یا نسخه مناسب) را انتخاب کنید
گام 2: افزودن Usingهای لازم
using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
گام 3: کد اصلی چاپ
public void PrintWordDocumentWithInterop(string filePath)
{
Application wordApp = null;
Document wordDoc = null;
try
{
// ایجاد شیء برنامه Word
wordApp = new Application();
// مخفی کردن پنجره Word
wordApp.Visible = false;
// باز کردن سند
wordDoc = wordApp.Documents.Open(filePath);
// چاپ مستقیم سند بدون نمایش دیالوگ
wordDoc.PrintOut(
Background: false, // چاپ در پسزمینه
Append: false, // اضافه به فایل چاپ موجود
Range: WdPrintRange.wdPrintAllDocument, // چاپ تمام سند
Copies: 1 // تعداد کپیها
);
Console.WriteLine("سند با موفقیت چاپ شد.");
}
catch (Exception ex)
{
Console.WriteLine($"خطا در چاپ سند: {ex.Message}");
}
finally
{
// بستن سند
if (wordDoc != null)
{
wordDoc.Close(false);
Marshal.ReleaseComObject(wordDoc);
}
// خروج از برنامه Word
if (wordApp != null)
{
wordApp.Quit(false);
Marshal.ReleaseComObject(wordApp);
}
}
}
گام 4: چاپ با تنظیمات پیشرفته
public void PrintWithAdvancedSettings(string filePath, string printerName, int copies)
{
Application wordApp = new Application();
wordApp.Visible = false;
Document wordDoc = wordApp.Documents.Open(filePath);
// تنظیم نام چاپگر
wordApp.ActivePrinter = printerName;
// چاپ با تنظیمات سفارشی
wordDoc.PrintOut(
Background: false,
Copies: copies,
Pages: "1-5", // فقط صفحات 1 تا 5 چاپ شوند
Item: WdPrintOutItem.wdPrintDocumentContent,
PrintToFile: false
);
wordDoc.Close();
wordApp.Quit();
}
مزایا و معایب
مزایا
- دسترسی کامل به تمام قابلیتهای Word
- دقت بالا در حفظ فرمت سند
- پشتیبانی از تنظیمات پیشرفته چاپ
معایب
- نیاز به نصب Microsoft Word روی سیستم
- مصرف بالای حافظه
- کندی نسبی در پردازش
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
استفاده از کتابخانه Spire.Doc در چاپ سند در سی شارپ
Spire.Doc یک کتابخانه تجاری قدرتمند است که برای کار با اسناد Word بدون نیاز به نصب Microsoft Office طراحی شده است.مراحل پیادهسازی
گام 1: نصب از طریق NuGet
Install-Package Spire.Doc
گام 2: کد اصلی چاپ
using Spire.Doc;
using System.Drawing.Printing;
public void PrintWithSpireDoc(string filePath)
{
// ایجاد شیء Document
Document document = new Document();
// بارگذاری سند Word
document.LoadFromFile(filePath);
// دریافت شیء PrintDocument
PrintDocument printDoc = document.PrintDocument;
// انتخاب چاپگر پیشفرض
printDoc.PrinterSettings.PrinterName =
PrinterSettings.InstalledPrinters[0];
// انجام چاپ
printDoc.Print();
Console.WriteLine("چاپ با موفقیت انجام شد.");
}
گام 3: چاپ با تنظیمات پیشرفته
public void PrintAdvancedWithSpireDoc(string filePath)
{
Document document = new Document();
document.LoadFromFile(filePath);
PrintDocument printDoc = document.PrintDocument;
// تنظیمات پیشرفته
printDoc.PrinterSettings.PrinterName = "HP LaserJet";
printDoc.PrinterSettings.Copies = 2;
printDoc.PrinterSettings.Duplex = Duplex.Horizontal;
// تنظیم کیفیت چاپ
printDoc.DefaultPageSettings.PrintQuality = 600;
printDoc.DefaultPageSettings.Landscape = true;
// چاپ
printDoc.Print();
}
مزایا و معایب استفاده از کتابخانه Spire.Doc در سی شارپ
مزایا
- عدم نیاز به نصب Microsoft Office
- عملکرد بالا و مصرف حافظه بهینه
- پشتیبانی از فرمتهای مختلف (DOC, DOCX, RTF)
معایب
- کتابخانه تجاری و نیاز به خرید لایسنس
- محدودیت در نسخه رایگان (حداکثر 10 صفحه)

استفاده از Aspose.Words در چاپ سند در سی شارپ
Aspose.Words یکی از قدرتمندترین کتابخانههای پردازش اسناد در دنیای داتنت است که قابلیتهای بسیار پیشرفتهای برای چاپ اسناد Word ارائه میدهد.مراحل پیادهسازی
گام 1: نصب از طریق NuGet
Install-Package Aspose.Words
گام 2: کد اصلی چاپ
using Aspose.Words;
using System.Drawing.Printing;
public void PrintWithAsposeWords(string filePath)
{
// بارگذاری سند
Document doc = new Document(filePath);
// انتخاب اولین چاپگر موجود
string printerName = PrinterSettings.InstalledPrinters[0].ToString();
// چاپ بیصدا (بدون نمایش دیالوگ)
doc.Print(printerName);
Console.WriteLine("چاپ با Aspose.Words انجام شد.");
}
گام 3: چاپ حرفهای با تنظیمات کامل
public void ProfessionalPrintWithAspose(string filePath)
{
Document doc = new Document(filePath);
// ایجاد تنظیمات چاپگر
PrinterSettings printerSettings = new PrinterSettings
{
PrinterName = "HP LaserJet",
FromPage = 1,
ToPage = 10,
Copies = 3,
Duplex = Duplex.Vertical, // چاپ دو رو
PrintRange = PrintRange.SomePages
};
// تنظیمات صفحه
printerSettings.DefaultPageSettings.Landscape = false;
printerSettings.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169);
// چاپ با تنظیمات
doc.Print(printerSettings);
}
گام 4: چاپ اسناد حاوی کامنت (نظرات)
public void PrintWithComments(string filePath)
{
Document doc = new Document(filePath);
// تنظیم نمایش نظرات
doc.LayoutOptions.RevisionOptions.ShowInBalloons = true;
doc.LayoutOptions.RevisionOptions.MeasurementUnit = MeasurementUnit.Inches;
// چاپ با نظرات
doc.Print("Microsoft Print to PDF");
}
ویژگیهای پیشرفته Aspose.Words در سی شارپ
Aspose.Words قابلیتهای چشمگیری برای چاپ حرفهای ارائه میدهد:- پشتیبانی از فرمتهای متعدد: DOCX, DOC, PDF, HTML, RTF, ODT, EPUB
- چاپ چندنخی (Thread-Safe): امکان چاپ همزمان چند سند
- پشتیبانی از چاپ ناهمگام: عدم مسدود شدن رابط کاربری
- گزارشگیری از خطا: تشخیص خطاهایی مانند تمام شدن کاغذ یا آفلاین بودن چاپگر
روش چهارم: استفاده از Process.Start (روش ساده)
این روش سادهترین روش برای چاپ اسناد است که از دستورات سیستمی ویندوز استفاده میکند.کد پیادهسازی
using System.Diagnostics;
using System.IO;
public void PrintUsingProcessStart(string filePath, string printerName = null)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = filePath,
Verb = "print", // دستور چاپ
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
};
// تنظیم چاپگر (اختیاری)
if (!string.IsNullOrEmpty(printerName))
{
startInfo.Arguments = $"\"{printerName}\"";
}
using (Process process = Process.Start(startInfo))
{
process.WaitForExit(30000); // حداکثر 30 ثانیه صبر
}
Console.WriteLine("سند به چاپگر ارسال شد.");
}
catch (Exception ex)
{
Console.WriteLine($"خطا: {ex.Message}");
}
}
مزایا و معایب
مزایا
- بسیار ساده و سریع
- بدون نیاز به کتابخانه اضافی
- سبک و کم مصرف
معایب
- کنترل محدود بر تنظیمات چاپ
- وابستگی به برنامه پیشفرض سیستم برای باز کردن فایل Word
- عدم امکان تنظیمات پیشرفته
چاپ اسناد با قابلیت جایگزینی داده (Mail Merge)
یکی از نیازهای رایج در سیستمهای سازمانی، چاپ اسنادی است که دادههای آنها به صورت پویا از دیتابیس جایگزین میشود.استفاده از Bookmark در Word
گام 1: در فایل Word الگو، برای بخشهای متغیر Bookmark تعریف کنید.گام 2: کد سی شارپ برای جایگزینی و چاپ:
public void PrintDocumentWithBookmarks(string templatePath, Dictionary<string, string> data)
{
Application wordApp = new Application();
wordApp.Visible = false;
Document doc = wordApp.Documents.Open(templatePath);
// جایگزینی بوکمارکها
foreach (var item in data)
{
object bookmarkName = item.Key;
Bookmark bookmark = doc.Bookmarks.get_Item(ref bookmarkName);
if (bookmark != null)
{
bookmark.Range.Text = item.Value;
}
}
// چاپ سند
doc.PrintOut();
doc.Close();
wordApp.Quit();
}
// استفاده
var data = new Dictionary<string, string>
{
{ "نام_مشتری", "علی محمدی" },
{ "شماره_فاکتور", "INV-12345" },
{ "تاریخ", "1402/10/15" }
};
PrintDocumentWithBookmarks(@"C:\Template.docx", data);
چاپ دستهای چند سند
روش اول: چاپ متوالی
public void BatchPrint(string[] filePaths)
{
foreach (string filePath in filePaths)
{
try
{
Document doc = new Document(filePath);
doc.Print(PrinterSettings.InstalledPrinters[0]);
Console.WriteLine($"چاپ شد: {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"خطا در {filePath}: {ex.Message}");
}
}
}
روش دوم: ادغام اسناد قبل از چاپ
برای افزایش سرعت چاپ، میتوانید اسناد را ابتدا در یک سند ادغام کنید و سپس یک بار چاپ کنید:public void MergeAndPrint(string[] filePaths, string outputPath)
{
Application wordApp = new Application();
wordApp.Visible = false;
// ایجاد سند خالی برای ادغام
Document mergedDoc = wordApp.Documents.Add();
foreach (string filePath in filePaths)
{
Document sourceDoc = wordApp.Documents.Open(filePath);
// کپی محتوا
sourceDoc.Content.Copy();
// چسباندن در سند نهایی
Range range = mergedDoc.Content;
range.Collapse(WdCollapseDirection.wdCollapseEnd);
range.Paste();
sourceDoc.Close();
}
// چاپ سند ادغام شده
mergedDoc.PrintOut();
mergedDoc.Close();
wordApp.Quit();
}
رفع خطاهای رایج چاپ سند Word در سی شارپ
خطای 1: کتابخانه COM یافت نشد
راه حل: اطمینان حاصل کنید که Microsoft Office روی سیستم نصب است و Reference مناسب اضافه شده است.خطای 2: خطای دسترسی به فایل
// راه حل: بررسی وجود فایل و مجوزها
if (!File.Exists(filePath))
{
throw new FileNotFoundException("فایل پیدا نشد");
}
خطای 3: چاپگر یافت نشد
// بررسی وجود چاپگر
if (PrinterSettings.InstalledPrinters.Count == 0)
{
Console.WriteLine("هیچ چاپگری نصب نشده است");
return;
}

جدول مقایسه روشها چاپ سند Word در سی شارپ
| ویژگی | Process.Start | Aspose.Words | Spire.Doc | Interop Word |
| نیاز به Office | ✅ نیاز دارد | ❌ نیاز ندارد | ❌ نیاز ندارد | ❌ نیاز ندارد |
| سرعت چاپ | متوسط | بالا | خیلی بالا | بالا |
| کنترل تنظیمات | کامل | خوب | عالی | محدود |
| هزینه | رایگان | تجاری | تجاری | رایگان |
| مصرف حافظه | بالا | متوسط | متوسط | پایین |
| مناسب برای سرور | خیر | بله | بله | خیر |
جمعبندی و توصیه نهایی
انتخاب روش مناسب برای چاپ Word در سی شارپ به نیازهای خاص پروژه شما بستگی دارد:برای پروژههای کوچک و شخصی: روش Process.Start به دلیل سادگی و رایگان بودن توصیه میشود.
برای پروژههای سازمانی با Office نصب شده: روش Microsoft Office Interop انتخاب مناسبی است، با این حال باید توجه داشت که این روش برای استفاده در سرور توصیه نمیشود.
برای برنامههای تحت وب و سرور: حتماً از کتابخانههای مستقل مانند Aspose.Words یا Spire.Doc استفاده کنید.
برای پروژههای حرفهای با نیازهای پیشرفته: Aspose.Words بهترین گزینه است با قابلیتهایی مانند چاپ ناهمگام، پشتیبانی از فرمتهای متعدد و دقت بالا در رندر.


کاربران ما
شما هم نظرتون با ما دریاره “چاپ سند Word در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید