ドキュメント印刷 は、デスクトップアプリケーション、バックグラウンドサービス、サーバーサイドシステムにおいて非常に一般的な要件です。実際の開発や業務シナリオでは、ユーザー操作に依存せず、サイレント印刷 や 特定プリンターへの出力、あるいは コードによる印刷動作の制御 が求められるケースが多くあります。 本記事では、Spire.Printing を使用して、Windows、Linux、macOS 環境において C# で PDF および Office ドキュメントを自動的に印刷する方法 を解説します。印刷用ドキュメントストリームの扱い方、プリンターのプログラム制御、そして高度な印刷設定について理解することで、モダンな .NET アプリケーションにおける安定したクロスプラットフォーム印刷を実現できます。 目次 Spire.Printing のインストール 基本的な印刷フローと印刷設定 Word / Excel / PowerPoint / PDF の印刷 高度な印刷設定と操作 ライセンスについて Spire.Printing のインストール Spire.Printing は NuGet パッケージとして提供されており、以下のコマンドで簡単に導入できます。 Install-Package Spire.Printing プラットフォーム互換性 Spire.Printing は、モダンな .NET アプリケーション向けに設計された クロスプラットフォーム印刷ライブラリ です。.NET Standard に対応した Spire.Office ライブラリと組み合わせることで、Microsoft Office Interop に依存せず、Windows、Linux、macOS 上で Word、Excel、PowerPoint、PDF などのドキュメントを印刷できます。 対応する .NET ランタイムは以下のとおりです。 .NET 5.0 .NET 6.0 .NET 9.0 .NET 10.0 対応プラットフォーム: Windows(x64 / x86) Linux(x64 / ARM) macOS(x64 / ARM) 基本的な印刷フローと印刷設定 Spire.Printing は、印刷可能なドキュメントストリームを直接プリンターへ送信する という設計思想を採用しています。異なるオペレーティングシステムでは、印刷可能なストリームの形式が若干異なります。Windows では XPS ドキュメントストリームを使用し、Linux / macOS では通常 PDF ドキュメントストリームを使用します。 実際の開発では、Spire.Printing を Spire.Office for .NET と組み合わせて使用することで、統一されたクロスプラットフォーム印刷フローを構築できます。 印刷の基本手順 ドキュメントから IPrintDocumentStream を作成 PrintDocument インスタンスを生成 PrintSettings で印刷設定を構成 プリンターへ印刷ジョブを送信 サンプルコード using Spire.Printing; IPrintDocumentStream documentStream; if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform( System.Runtime.InteropServices.OSPlatform.Windows)) { // Windows 環境では XPS を使用 documentStream = new XpsPrintDocument("test.xps"); } else { // Linux / macOS では PDF を使用 documentStream = new PdfPrintDocument("test.pdf"); } PrintDocument printDocument = new PrintDocument(documentStream); // 用紙サイズの設定 printDocument.PrintSettings.PaperSize = PaperSize.A4; // 印刷部数 printDocument.PrintSettings.Copies = 2; // ページ範囲の指定 printDocument.PrintSettings.SelectPageRange(2, 5); // 両面印刷 if (printDocument.PrintSettings.CanDuplex) { printDocument.PrintSettings.Duplex = Duplex.Vertical; } // 部単位で印刷するかどうか printDocument.PrintSettings.Collate = true; // 使用するプリンター(未指定の場合は既定のプリンター) printDocument.PrintSettings.PrinterName = "Your Printer Name"; // ファイルとして出力 printDocument.PrintSettings.PrintToFile("toXps.xps"); // 印刷ログの記録 printDocument.PrintSettings.PrintLogger = new DefaultPrintLogger("log.txt"); // 印刷実行 printDocument.Print(); // リソース解放 printDocument.Dispose(); このストリームベースの仕組みにより、プラットフォーム間で一貫した印刷処理を維持しつつ、PrintSettings API を通じて詳細な印刷制御が可能になります。 Word / Excel / PowerPoint / PDF の印刷 実際のプロジェクトでは、Spire.Printing は通常、対応する Spire.Office ドキュメントコンポーネント(Spire.Doc、Spire.XLS、Spire.Presentation、Spire.PDF)と連携して使用されます。これらのコンポーネントは元のドキュメントを読み込み、PDF または XPS のドキュメントストリームとして保存し、Spire.Printing に渡してプリンターへ送信する役割を担います。 C# で Word 文書を印刷する ライブラリのインストール Install-Package Spire.Printing Install-Package Spire.Docfor.NETStandard サンプルコード using Spire.Doc; using Spire.Printing; bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows); using (Document document = new Document()) { document.LoadFromFile("test.docx"); var fileFormat = !isWindows ? Spire.Doc.FileFormat.PDF : Spire.Doc.FileFormat.XPS; MemoryStream stream = new MemoryStream(); document.SaveToStream(stream, fileFormat); IPrintDocumentStream docStream = !isWindows ? new PdfPrintDocument(stream) : new XpsPrintDocument(stream); PrintDocument printDoc = new PrintDocument(docStream); printDoc.PrintSettings.SelectPageRange(1, 1); printDoc.Print(); printDoc.Dispose(); } C# で Excel ファイルを印刷する ライブラリのインストール Install-Package Spire.Printing Install-Package Spire.XLSfor.NETStandard サンプルコード using Spire.Printing; using Spire.Xls; // 実行環境の判定 bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows); using (Workbook workbook = new Workbook()) { // Excel ファイルを読み込み workbook.LoadFromFile("test.xlsx"); // OS に応じて PDF または XPS 形式でストリームに保存 var fileFormat = !isWindows ? Spire.Xls.FileFormat.PDF : Spire.Xls.FileFormat.XPS; MemoryStream stream = new MemoryStream(); workbook.SaveToStream(stream, fileFormat); // 印刷用ドキュメントストリームを作成 IPrintDocumentStream xlsStream = !isWindows ? new PdfPrintDocument(stream) : new XpsPrintDocument(stream); // 印刷実行 PrintDocument printXls = new PrintDocument(xlsStream); printXls.PrintSettings.SelectPageRange(1, 1); printXls.Print(); // リソース解放 printXls.Dispose(); } C# で PDF ファイルを印刷する ライブラリのインストール Install-Package Spire.Printing Install-Package Spire.PDFfor.NETStandard サンプルコード using Spire.Pdf; using Spire.Printing; // 実行環境の判定 bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows); using (PdfDocument pdfDocument = new PdfDocument()) { // PDF ファイルを読み込み pdfDocument.LoadFromFile("test.pdf"); // OS に応じて保存形式を切り替え var fileFormat = !isWindows ? Spire.Pdf.FileFormat.PDF : Spire.Pdf.FileFormat.XPS; MemoryStream stream = new MemoryStream(); pdfDocument.SaveToStream(stream, fileFormat); // 印刷用ストリームを生成 IPrintDocumentStream pdfStream = !isWindows ? new PdfPrintDocument(stream) : new XpsPrintDocument(stream); // 印刷実行 PrintDocument printPdf = new PrintDocument(pdfStream); printPdf.PrintSettings.SelectPageRange(1, 1); printPdf.Print(); // リソース解放 printPdf.Dispose(); } C# で PowerPoint プレゼンテーションを印刷する ライブラリのインストール Install-Package Spire.Printing Install-Package Spire.Presentationfor.NETStandard サンプルコード using Spire.Presentation; using Spire.Printing; // 実行環境の判定 bool isWindows = System.Runtime.InteropServices.RuntimeInformation .IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows); using (Presentation presentation = new Presentation()) { // PowerPoint ファイルを読み込み presentation.LoadFromFile("test.pptx"); // OS に応じて PDF / XPS 形式でストリーム保存 var fileFormat = !isWindows ? Spire.Presentation.FileFormat.PDF : Spire.Presentation.FileFormat.XPS; MemoryStream stream = new MemoryStream(); presentation.SaveToFile(stream, fileFormat); // 印刷用ドキュメントストリームを作成 IPrintDocumentStream pptStream = !isWindows ? new PdfPrintDocument(stream) : new XpsPrintDocument(stream); // 印刷実行 PrintDocument printPpt = new PrintDocument(pptStream); printPpt.PrintSettings.SelectPageRange(1, 1); printPpt.Print(); // リソース解放 printPpt.Dispose(); } 高度な印刷設定と操作 自動印刷やクロスプラットフォーム環境においては、単にドキュメントを印刷するだけでなく、使用するプリンター、用紙サイズ、印刷対象ページ を正確に制御することが重要です。 Spire.Printing では、PrintSettings API を通じて、これらの要素をプログラムから柔軟に制御できます。この機能は、バックグラウンドサービス、バッチ印刷処理、業務システムなど、ユーザー操作を伴わない印刷シナリオで特に有効です。 プリンターの一覧取得と選択 既定のプリンターを使用する代わりに、インストールされているプリンターを列挙し、任意のプリンターを選択して印刷することができます。 IEnumerable<string> printers = printDocument.PrintSettings.Printers; // ビジネスロジックに基づいてプリンターを選択 string selectedPrinterName = printers.First(); printDocument.PrintSettings.PrinterName = selectedPrinterName; この方法は、複数のプリンターが接続されている環境や、帳票の種類ごとに出力先を切り替える必要がある場合に役立ちます。 プリンターが対応する用紙サイズの選択 プリンターごとに対応している用紙サイズは異なるため、あらかじめ使用可能な用紙サイズを取得し、その中から選択することで、印刷エラーを防ぐことができます。 IEnumerable<PaperSize> paperSizes = printDocument.PrintSettings.PaperSizes; // 使用可能な用紙サイズから選択 PaperSize selectedPaperSize = paperSizes.First(); printDocument.PrintSettings.PaperSize = selectedPaperSize; このアプローチにより、選択した用紙サイズが対象プリンターで確実に使用可能であることを保証できます。 印刷ページの指定 Spire.Printing では、印刷対象ページを連続した範囲 または 特定のページ一覧 として指定できます。 // 2 ページ目から 5 ページ目までを印刷 printDocument.PrintSettings.SelectPageRange(2, 5); // 特定のページのみを印刷(例:1, 3, 5, 7 ページ) int[] pages = { 1, 3, 5, 7 }; printDocument.PrintSettings.SelectSomePages(pages); ※ 同一の印刷ジョブ内では、いずれか一方のみを使用してください。 この機能を利用することで、不要なページの出力を避け、用紙や印刷コストの削減につながります。 これらの高度な印刷設定を活用することで、 複数のドキュメントやプリンターに対しても、一貫した印刷結果を得ることができます。 そのため、Spire.Printing は自動化ワークフローや業務向け印刷処理に非常に適しています。 ライセンスについて ライセンス未適用の場合、Spire.Printing は最初の 10 ページのみ印刷可能 です。 Spire.Office for .NET、または Spire.Doc / Spire.XLS / Spire.PDF / Spire.Presentation のライセンスを適用することで、この制限を解除できます。 Spire.Pdf.License.LicenseProvider.SetLicenseKey(key); Spire.Doc.License.LicenseProvider.SetLicenseKey(key); Spire.Xls.License.LicenseProvider.SetLicenseKey(key); Spire.Presentation.License.LicenseProvider.SetLicenseKey(key); 詳細は ライセンスガイド を参照してください。 まとめ Spire.Printing は、C# アプリケーションにおいて PDF、Word、Excel、PowerPoint をストリームベースで印刷できる柔軟かつ信頼性の高いソリューション です。 Windows、Linux、macOS に対応し、Spire.Office for .NET(特に .NET Standard 版)と組み合わせることで、モダンな .NET 環境でも安定した印刷処理を実現できます。 基本的な印刷フローを理解すれば、プリンター選択、用紙サイズ、ページ指定などの高度な設定 も容易に適用でき、実務に即した自動化印刷システムを構築できます。 評価や短期間の開発用途には、一時ライセンス を申請することで、試用制限を解除した状態で検証できます。