C#でドキュメントをサイレント印刷する方法
サイレント印刷は、コードから直接プリンターにドキュメントを送ります。ダイアログボックスなし、ユーザーの操作なし、中断なしです。 バッチ請求書処理、キオスクアプリケーション、Windowsサービス背景ジョブのような自動化ワークフローにおいて、印刷ダイアログを排除することは必須の要件です。 ネイティブの System.Drawing.Printing 名前空間は、バックグラウンドでの印刷を実現する手段を提供しますが、チームやプロジェクト間で拡張性に乏しいイベント駆動型の定型コードを必要とします。
IronPrint はサイレント印刷を1つのメソッド呼び出しに簡略化します。 1つのNuGetパッケージをインストールし、Printer.Print()を呼び出すだけで、ライブラリがバックグラウンドでプリンターとの通信、ドキュメントのレンダリング、およびプリントスプーラーとの連携を処理します。
クイックスタート: サイレント印刷
- NuGet 経由で IronPrint をインストールします:
Install-Package IronPrint - ファイルに
using IronPrint;を追加してください Printer.Print("filepath")を呼び出して、ドキュメントをデフォルトのプリンターに送信しますPrintSettingsオブジェクトを渡して、プリンター名、DPI、部数、用紙設定を制御します- PRINT処理が呼び出しスレッドをブロックしないようにする必要がある場合は、
Printer.PrintAsync()を使用してください
最小限のワークフロー(5ステップ)
- IronPrint C#印刷ライブラリをインストール
- サイレント出力のために
Printer.Print("filepath")を呼び出します - カスタム設定には
PrintSettingsオブジェクトを渡します - ブロッキングされない実行のために
Printer.PrintAsync()を使用します - プロジェクトを実行してダイアログなしでサイレント印刷します
.NETでサイレント印刷はどのように機能するのか?
.NETのSystem.Drawing.Printing名前空間には、印刷操作中にステータスダイアログを表示しないようにするStandardPrintControllerクラスが含まれています。 デフォルトでは、.NETはStandardPrintControllerに切り替えることでこのダイアログは表示されなくなりますが、設定にかかるコストは依然として大きいです。
ネイティブのアプローチでバックグラウンドでPRINTするには、Print()を呼び出します。 これには、1つのドキュメントにつき約15~25行の設定コードが必要であり、新しいドキュメントタイプやフォーマットごとに、PrintPageイベント内で独自のレンダリングロジックを実装する必要があります。 特にPDFのレンダリング機能はGraphicsの画面上に描画するには、別途PDF解析ライブラリが必要となります。
IronPrintはこの全パイプラインをPrinterクラスにラップします。 Print() メソッドは、ファイルパスまたはバイト配列を受け取り、ファイル形式を検出し、適切なエンジンを通じてレンダリングし、デフォルトのプリンターに送信します。これらすべての処理は、ダイアログを表示することなく行われます。
:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-pdf-and-byte-array.cs
using IronPrint;
// Print a PDF silently
Printer.Print("quarterly-report.pdf");
// Print from a byte array
byte[] pdfData = File.ReadAllBytes("shipping-label.pdf");
Printer.Print(pdfData);
Imports IronPrint
' Print a PDF silently
Printer.Print("quarterly-report.pdf")
' Print from a byte array
Dim pdfData As Byte() = File.ReadAllBytes("shipping-label.pdf")
Printer.Print(pdfData)
Print() メソッドは、PDF、PNG、TIFF、JPEG、GIF、HTML、および BMP ファイル形式をサポートしています。 ファイルパスを文字列として、または生のファイルデータを byte[] として渡すと、IronPrint が自動的にレンダリング戦略を決定します。
サイレント出力のための印刷設定をどのように設定するか?
PrintSettingsクラスは印刷ジョブを完全に制御します。 対象のプリンター、用紙サイズ、向き、余白、DPI、カラーモード、部数、両面印刷の設定を構成し、その設定オブジェクトを Printer.Print() に渡します。 DPI Grayscale PaperMargins
:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-with-settings.cs
using IronPrint;
// Configure print settings
var settings = new PrintSettings
{
PrinterName = "HP LaserJet Pro",
PaperSize = PaperSize.A4,
PaperOrientation = PaperOrientation.Portrait,
Dpi = 300,
NumberOfCopies = 2,
Grayscale = false,
PaperMargins = new Margins(10, 10, 10, 10)
};
// Print with custom settings
Printer.Print("report.pdf", settings);
Imports IronPrint
' Configure print settings
Dim settings As New PrintSettings With {
.PrinterName = "HP LaserJet Pro",
.PaperSize = PaperSize.A4,
.PaperOrientation = PaperOrientation.Portrait,
.Dpi = 300,
.NumberOfCopies = 2,
.Grayscale = False,
.PaperMargins = New Margins(10, 10, 10, 10)
}
' Print with custom settings
Printer.Print("report.pdf", settings)
各プロパティは標準的なプリントスポーラー設定にマッピングされています。 Resolution は出力解像度を制御します。ビジネス文書には 300 が一般的ですが、下書きには 150 が適しています。 ColorMode は、カラー印刷が不要な場合にトナーの使用量を削減します。 Margins の値はミリメートル単位で指定されています。
特定のプリンタを選択するにはどうすればよいですか?
Printer.GetPrinterNames() を使用してシステムにインストールされているすべてのプリンターを列挙し、その後、対象のプリンター名を PrintSettings.PrinterName に割り当てます。
:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-select-specific-printer.cs
using IronPrint;
// List all available printers
List<string> printers = Printer.GetPrinterNames();
foreach (string name in printers)
{
Console.WriteLine(name);
}
// Target a specific network printer
var settings = new PrintSettings
{
PrinterName = printers.First(p => p.Contains("LaserJet"))
};
// Print the document
Printer.Print("document.pdf", settings);
Imports IronPrint
' List all available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()
For Each name As String In printers
Console.WriteLine(name)
Next
' Target a specific network printer
Dim settings As New PrintSettings With {
.PrinterName = printers.First(Function(p) p.Contains("LaserJet"))
}
' Print the document
Printer.Print("document.pdf", settings)
PrinterNameが指定されていない場合、IronPrintはジョブをオペレーティングシステムのデフォルトプリンターに送信します。 複数のプリンターがある環境では—共有オフィス、倉庫、印刷室など— プリンターをプログラムで列挙し正しく選択することで、誤ったルートを防ぎます。
複数のドキュメントを一括印刷するにはどうすればよいですか?
バッチ印刷はわかりやすいループパターンに従います。 ファイルパスのコレクションを反復処理し、各ドキュメントに対して Printer.Print() を呼び出します。 各呼び出しがサイレントであるため、バッチ全体が一度のダイアログプロンプトなしで完了します。
:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-batch-print.cs
using IronPrint;
// Collect all PDFs in the batch folder
string[] invoices = Directory.GetFiles(@"C:\Invoices\Pending", "*.pdf");
// Configure print settings for the batch
var settings = new PrintSettings
{
PrinterName = "Accounting Printer",
NumberOfCopies = 1,
Grayscale = true
};
// Print each invoice and track successes
int successCount = 0;
foreach (string invoice in invoices)
{
try
{
Printer.Print(invoice, settings);
successCount++;
Console.WriteLine($"Printed: {Path.GetFileName(invoice)}");
}
catch (Exception ex)
{
Console.WriteLine($"Failed: {Path.GetFileName(invoice)}: {ex.Message}");
}
}
// Report batch results
Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed.");
Imports IronPrint
Imports System.IO
' Collect all PDFs in the batch folder
Dim invoices As String() = Directory.GetFiles("C:\Invoices\Pending", "*.pdf")
' Configure print settings for the batch
Dim settings As New PrintSettings With {
.PrinterName = "Accounting Printer",
.NumberOfCopies = 1,
.Grayscale = True
}
' Print each invoice and track successes
Dim successCount As Integer = 0
For Each invoice As String In invoices
Try
Printer.Print(invoice, settings)
successCount += 1
Console.WriteLine($"Printed: {Path.GetFileName(invoice)}")
Catch ex As Exception
Console.WriteLine($"Failed: {Path.GetFileName(invoice)}: {ex.Message}")
End Try
Next
' Report batch results
Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed.")
各 Print() 呼び出しを try-catch で囲むことで、1つの破損ファイルやプリンターのタイムアウトによってバッチ処理全体が停止することを防ぎます。 バックグラウンドサービスで動作する大規模なバッチの場合、各結果をデータベースまたはモニタリングシステムに記録することで、運用チームが確認できる監査ル'_TRACK' を提供します。
スレッドをブロックせずに非同期で印刷するには?
Printer.PrintAsync() メソッドは Task を返すため、await パターンと互換性があります。 これは、ブロックする印刷呼び出しがインターフェイスをフリーズさせるUIアプリケーションや、同時操作を処理するサービスにとって不可欠です。
:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-async-print.cs
using IronPrint;
// Print asynchronously without blocking the thread
await Printer.PrintAsync("report.pdf");
// Print a batch of reports asynchronously
string[] files = Directory.GetFiles(@"C:\Reports", "*.pdf");
foreach (string file in files)
{
await Printer.PrintAsync(file);
}
Imports IronPrint
' Print asynchronously without blocking the thread
Await Printer.PrintAsync("report.pdf")
' Print a batch of reports asynchronously
Dim files As String() = Directory.GetFiles("C:\Reports", "*.pdf")
For Each file As String In files
Await Printer.PrintAsync(file)
Next
PrintAsync() は、Print() と同じパラメータ(ファイルパスまたはバイト配列、およびオプションの PrintSettings オブジェクト)を受け付けます。 非同期オーバーロードは、大量ドキュメントが同時に印刷キューに入る高スループットシナリオでスレッドプールの枯渇を防ぎます。 これはタスクベース非同期パターンに従っており、現代 for .NET開発全般で推奨されています。
プラットフォームの考慮点
IronPrintはデスクトップおよびモバイルプラットフォーム間でサイレント印刷をサポートしますが、動作はオペレーティングシステムによって異なります。
| プラットフォーム | サイレント印刷 | ノート |
|---|---|---|
| Windows (7+) | フルサポート | 対話形式は不要、完全な PrintSettings 制御 |
| macOS (10+) | サポート対象 | ネイティブmacOS印刷サブシステムを使用 |
| iOS (11+) | ダイアログが表示されます | Print() システム印刷ダイアログが依然として表示される |
| Android (API 21+) | ダイアログが表示されます | Print() システム印刷ダイアログが依然として表示される |
モバイルプラットフォームでは、OSの制限により完全なサイレント印刷は不可能です。Printer.Print() を実行しても、ネイティブのPRINTダイアログが表示されます。 Androidの場合、PRINT操作を行う前にPrinter.Initialize(Android.Content.Context)呼び出しが必要です。 デスクトッププラットフォーム(WindowsとmacOS)は注意点なしで完全無人のサイレント印刷をサポートします。
ネイティブ.NET印刷との比較
ライブラリを採用するか、ネイティブの System.Drawing.Printing 名前空間上で構築するかを検討しているエンジニアリングチームにとって、そのトレードオフは次のようにまとめられます:
| PDF/UA-1 | PDF/UA-2 | |
|---|---|---|
| 出版 | 2012 | 2024 |
| 基本仕様 | PDF 1.7 (ISO 32000-1) | PDF 2.0 (ISO 32000-2) |
| 規制対象範囲 | ADA第II編第508条、EUアクセシビリティ法 | 同じ規制との互換性 |
| 検証ツール | veraPDF、Adobe Acrobat Pro、PAC 2024 | veraPDF(サポート拡大中) |
| フォームフィールドのセマンティクス | 標準 | 強化(アクセシビリティ メタデータの強化) |
| 最適な用途 | 今日のほとんどのプロジェクト | PDF 2.0の機能を必要とする新しいシステム |
ネイティブアプローチは、チームがすでにドキュメントレンダリングインフラを持っているシンプルなシナリオに適しています。 既存のレンダリングコードなしでPDF、画像、HTMLを印刷するチームにとって、IronPrintは開発期間と継続的なメンテナンスの数週間を削減します。 5月2025年リリースで提供された30%印刷速度改善は、社内で構築した場合にはエンジニアリングサイクルを消費するであろう最適化です。
次のステップ
IronPrint によるサイレント印刷は、3つの主要なメソッドに集約されます。同期的なサイレント出力を行う Printer.Print()、ノンブロッキング実行を行う Printer.PrintAsync()、および印刷ジョブを完全に制御する PrintSettings です。 これらは、デスクトッププラットフォーム全体の単一ドキュメント、バッチ、および同時印刷シナリオをカバーします。
IronPrintチュートリアルで詳細なウォークスルーを調べるか、プリンタークラスAPIリファレンスで完全なメソッド表面を確認してください。 印刷設定ハウツーではトレー選択や平坦化などの追加の設定オプションをカバーしています。
無料の30日間トライアルを開始して、実環境でサイレント印刷をテストしてください—クレジットカード不要です。 デプロイの準備が整いましたら、$999 から始まるライセンスオプションをご確認ください。
Iron Softwareのエンジニアとチャットして特定の配備シナリオについて助けを求めてください。
よくある質問
C#におけるサイレント印刷とは?
C#におけるサイレント印刷は、印刷ダイアログやユーザー操作のプロンプトを表示せずに、文書を直接プリンターに印刷する機能を指します。IronPrintは、この機能を実現するために開発者がプログラムで印刷設定を構成できるようにします。
IronPrintを使用してサイレント印刷を行うにはどうすればよいですか?
IronPrintを使うと、DPIやコピー数の設定、非同期バッチ印刷の有効化などのプリンタ設定を直接C#コード内で設定することで、印刷ダイアログボックスを回避し、サイレント印刷を行うことができます。
IronPrintはPDFファイルのサイレント印刷に対応していますか?
はい、IronPrintはPDFファイルのサイレント印刷に特化して設計されており、ダイアログを伴う中断なしにPDF文書をシームレスに印刷することができます。
IronPrintを使用してプリンタ設定を構成することは可能ですか?
もちろんです。IronPrintは、プリンタの選択、DPIの設定、およびコピー数の指定など、様々なプリンタ設定をコードを通じてユーザーの介入なしに構成することを可能にします。
IronPrintは非同期バッチ印刷をサポートしていますか?
はい、IronPrintは非同期バッチ印刷をサポートしており、バックグラウンドで複数の印刷ジョブをキューに入れて実行することができ、C#アプリケーションの効率とパフォーマンスを向上させます。
IronPrintはどのプログラミング言語と互換性がありますか?
IronPrintはC#と互換性があり、.NETフレームワーク内でロバストなサイレント印刷機能を必要とする開発者にとって優れた選択となります。
IronPrintを利用してどの印刷ダイアログも開くことなく印刷できますか?
はい、IronPrintはサイレント印刷用に特別設計されており、印刷ダイアログやユーザー入力を必要とすることなく、文書を直接プリンターに送ることができます。
IronPrintを使用して印刷できる文書の種類は何ですか?
IronPrintは主要にPDF文書に対する印刷をサポートしており、C#アプリケーションからのシームレスでダイアログなしの印刷体験を提供します。
IronPrintのサイレント印刷はバッチ処理に適していますか?
はい、IronPrintのサイレント印刷はバッチ処理に最適で、複数の印刷ジョブを管理し、非同期的に実行することで、生産性を向上させ、ワークフローを合理化することができます。
IronPrintはC#アプリケーションにおける印刷プロセスをどのように改善しますか?
IronPrintはC#アプリケーションにおける印刷プロセスを、ダイアログなしの印刷ソリューションを提供し、開発者が印刷の構成をプログラム的に制御し、効率的なバッチ処理のための非同期操作をサポートすることで改善します。

