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

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

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

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

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

  1. NuGet経由でIronPrintをインストールします: Install-Package IronPrint
  2. using IronPrint;をファイルに追加します
  3. Printer.Print("filepath")を呼び出してドキュメントをデフォルトプリンターに送信します
  4. PrintSettingsオブジェクトを渡してプリンター名、DPI、部数、用紙設定を管理します
  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でサイレント印刷はどのように機能するのか?

.NETのSystem.Drawing.Printingネームスペースには、印刷操作中にステータスダイアログを抑制するStandardPrintControllerクラスが含まれています。 デフォルトでは、.NETは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 to the default printer
Printer.Print("quarterly-report.pdf");

// Print from a byte array (e.g., retrieved from a database or API)
byte[] pdfData = File.ReadAllBytes("shipping-label.pdf");
Printer.Print(pdfData);
Imports IronPrint

' Print a PDF silently to the default printer
Printer.Print("quarterly-report.pdf")

' Print from a byte array (e.g., retrieved from a database or API)
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()に渡します。

:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-with-settings.cs
using IronPrint;

// Configure detailed print settings
var settings = new PrintSettings
{
    PrinterName = "HP LaserJet Pro",
    PaperSize = PaperSize.A4,
    Orientation = PaperOrientation.Portrait,
    DPI = 300,
    NumberOfCopies = 2,
    Grayscale = false,
    PaperMargins = new Margins(10, 10, 10, 10)
};

// Print with custom settings — still silent, no dialog
Printer.Print("monthly-summary.pdf", settings);
Imports IronPrint

' Configure detailed print settings
Dim settings As New PrintSettings With {
    .PrinterName = "HP LaserJet Pro",
    .PaperSize = PaperSize.A4,
    .Orientation = PaperOrientation.Portrait,
    .DPI = 300,
    .NumberOfCopies = 2,
    .Grayscale = False,
    .PaperMargins = New Margins(10, 10, 10, 10)
}

' Print with custom settings — still silent, no dialog
Printer.Print("monthly-summary.pdf", settings)
$vbLabelText   $csharpLabel

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

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

システムにインストールされているすべてのプリンターを列挙するために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"))
};

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"))
}

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;

string[] invoices = Directory.GetFiles(@"C:\Invoices\Pending", "*.pdf");

var settings = new PrintSettings
{
    PrinterName = "Accounting Printer",
    NumberOfCopies = 1,
    Grayscale = true
};

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}");
    }
}
Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed.");
Imports IronPrint

Dim invoices As String() = Directory.GetFiles("C:\Invoices\Pending", "*.pdf")

Dim settings As New PrintSettings With {
    .PrinterName = "Accounting Printer",
    .NumberOfCopies = 1,
    .Grayscale = True
}

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
Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed.")
$vbLabelText   $csharpLabel

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

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

awaitパターンに適合しています。 これは、ブロックする印刷呼び出しがインターフェイスをフリーズさせるUIアプリケーションや、同時操作を処理するサービスにとって不可欠です。

:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-async-print.cs
using IronPrint;

// Non-blocking silent print
await Printer.PrintAsync("report.pdf");

// Async batch printing
string[] files = Directory.GetFiles(@"C:\Reports", "*.pdf");
foreach (string file in files)
{
    await Printer.PrintAsync(file);
}
Imports IronPrint

' Non-blocking silent print
Await Printer.PrintAsync("report.pdf")

' Async batch printing
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でのサイレント印刷は、同期サイレント出力用PrintSettings の3つのコアメソッドに帰結します。 これらは、デスクトッププラットフォーム全体の単一ドキュメント、バッチ、および同時印刷シナリオをカバーします。

IronPrintチュートリアルで詳細なウォークスルーを調べるか、プリンタークラスAPIリファレンスで完全なメソッド表面を確認してください。 印刷設定ハウツーではトレー選択や平坦化などの追加の設定オプションをカバーしています。

無料の30日間トライアルを開始して、実環境でサイレント印刷をテストしてください—クレジットカード不要です。 配備準備が整ったら、ライセンスオプションを確認して$749から始めましょう。

Iron Softwareのエンジニアとチャットして特定の配備シナリオについて助けを求めてください。

カーティス・チャウ
テクニカルライター

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

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

準備はできましたか?
Nuget ダウンロード 38,930 | バージョン: 2026.4 リリース
Still Scrolling Icon

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

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