C#でドキュメントをサイレント印刷する方法

This article was translated from English: Does it need improvement?
Translated
View the article in English

サイレント印刷は、コードから直接プリンターにドキュメントを送ります。ダイアログボックスなし、ユーザーの操作なし、中断なしです。 バッチ請求書処理、キオスクアプリケーション、Windowsサービス背景ジョブのような自動化ワークフローにおいて、印刷ダイアログを排除することは必須の要件です。 ネイティブのSystem.Drawing.Printing名前空間は、サイレント印刷へのパスを提供しますが、イベント駆動のボイラープレートが必要で、チームやプロジェクト全体にわたってスケールしにくいです。

IronPrint はサイレント印刷を1つのメソッド呼び出しに簡略化します。 NuGetパッケージをインストールし、Printer.Print()を呼び出します。ライブラリが背景でプリンターとの通信、ドキュメントのレンダリング、および印刷スプーラーとのインタラクションを処理します。

クイックスタート: サイレント印刷

  1. NuGetを介してIronPrintをインストールします: Install-Package IronPrint
  2. ファイルにusing IronPrint;を追加します
  3. Printer.Print("filepath")を呼び出してドキュメントをデフォルトのプリンターに送信します
  4. プリンター名、DPI、コピー、および用紙構成を制御するPrintSettingsオブジェクトを渡します
  5. 印刷操作が呼び出し元のスレッドをブロックしないようにする必要がある場合はPrinter.PrintAsync()を使用します
  1. IronPrint をNuGetパッケージマネージャでインストール

    PM > Install-Package IronPrint
  2. このコード スニペットをコピーして実行します。

    using IronPrint;
    
    // Silent print — no dialog, no user interaction
    Printer.Print("invoice.pdf");
  3. 実際の環境でテストするためにデプロイする

    今日プロジェクトで IronPrint を使い始めましょう無料トライアル

    arrow pointer

.NETでサイレント印刷はどのように機能するのか?

.NETSystem.Drawing.Printing名前空間は、印刷操作中にステータスダイアログを抑制するStandardPrintControllerクラスを含んでいます。 デフォルトでは、.NETはPrintControllerWithStatusDialogを使用し、"Printing page X of Y"ポップアップを表示します。バッグをStandardPrintControllerに切り替えることでそのダイアログを排除できますが、セットアップコストは依然として重要です。

ネイティブアプローチでサイレント印刷を行うには、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)
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

各プロパティは標準的なプリントスポーラー設定にマッピングされています。 Resolutionは出力解像度を制御します。300はビジネスドキュメントに一般的な選択であり、150はドラフトに適しています。 カラーが不要な場合ColorModeはトナーの使用量を削減します。 Margins値はミリメートル単位で指定されます。

特定のプリンタを選択するにはどうすればよいですか?

システムにインストールされているすべてのプリンターを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)
$vbLabelText   $csharpLabel

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.")
$vbLabelText   $csharpLabel

Print()呼び出しをそれぞれtry/catchでラップしておくことで、1つの壊れたファイルやプリンタタイムアウトがバッチ全体を停止させないようにします。 バックグラウンドサービスで動作する大規模なバッチの場合、各結果をデータベースまたはモニタリングシステムに記録することで、運用チームが確認できる監査ル'_TRACK' を提供します。

スレッドをブロックせずに非同期で印刷するには?

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
$vbLabelText   $csharpLabel

PrintSettingsオブジェクトです。 非同期オーバーロードは、大量ドキュメントが同時に印刷キューに入る高スループットシナリオでスレッドプールの枯渇を防ぎます。 これはタスクベース非同期パターンに従っており、現代 for .NET開発全般で推奨されています。

プラットフォームの考慮点

IronPrintはデスクトップおよびモバイルプラットフォーム間でサイレント印刷をサポートしますが、動作はオペレーティングシステムによって異なります。

プラットフォーム サイレント印刷 ノート
Windows (7+) フルサポート ダイアログなしで、完全なPrintSettings制御
macOS (10+) サポート対象 ネイティブmacOS印刷サブシステムを使用
iOS (11+) ダイアログが表示されます Print()はシステムの印刷ダイアログを引き続き表示します
Android (API 21+) ダイアログが表示されます Print()はシステムの印刷ダイアログを引き続き表示します

モバイルプラットフォームでは、オペレーティングシステムの制限によって真にサイレント印刷ができません。Printer.Print()はネイティブの印刷ダイアログを必ず表示します。 Androidの場合、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つのコアメソッドに帰着します:同期サイレント出力用の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#アプリケーションにおける印刷プロセスを、ダイアログなしの印刷ソリューションを提供し、開発者が印刷の構成をプログラム的に制御し、効率的なバッチ処理のための非同期操作をサポートすることで改善します。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 44,051 | バージョン: 2026.7 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronPrint
サンプルを実行する プリンターに出力されるドキュメントを見る。