C#에서 PDF 문서 인쇄를 무음으로 처리하는 방법

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

무음 인쇄는 코드를 통해 문서를 직접 프린터로 전송합니다 — 대화 상자, 사용자 상호 작용, 중단 없음. 배치 송장 처리, 키오스크 응용 프로그램, Windows 서비스 백그라운드 작업과 같은 자동화된 워크플로에서는 인쇄 대화 상자의 제거가 필수적입니다. 네이티브 System.Drawing.Printing 네임스페이스는 무음 인쇄 경로를 제공하지만, 팀과 프로젝트 전반에 걸쳐 확장하기 어려운 이벤트 기반 보일러플레이트가 필요합니다.

IronPrint는 무음 인쇄를 단일 메서드 호출로 축소합니다. 우리는 하나의 NuGet 패키지를 설치하고 Printer.Print()을 호출합니다. — 라이브러리는 내부에서 프린터 통신, 문서 렌더링 및 인쇄 스풀러 상호작용을 처리합니다.

빠른 시작: 무음 인쇄

  1. NuGet을 통해 IronPrint 설치: Install-Package IronPrint
  2. 파일에 using IronPrint; 추가
  3. 문서를 기본 프린터로 보내기 위해 Printer.Print("filepath") 호출
  4. 프린터 이름, DPI, 복사본 수 및 용지 구성을 제어하는 PrintSettings 객체 전달
  5. 호출 스레드를 차단하지 않아야 할 때 Printer.PrintAsync() 사용
  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronPrint 설치하기

    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은 '페이지 X 중 Y 인쇄 중' 팝업을 표시하는 PrintControllerWithStatusDialog를 사용합니다. StandardPrintController로 전환하면 해당 대화 상자가 제거되지만 설정 비용은 여전히 상당합니다.

네이티브 접근 방식으로 무음 인쇄를 하기 위해 우리는 PrintDocument를 만들고, 인쇄 그래픽 표면에 콘텐츠를 그리는 PrintPage 이벤트 핸들러를 연결하고, StandardPrintController를 할당하고, PrinterSettings을 구성하고, Print()을 호출합니다. 이것은 단일 문서에 대해 대략 15~25줄의 설정 코드가 필요하며, 새로운 문서 유형이나 형식은 PrintPage 이벤트에서 고유한 렌더링 로직이 필요합니다. 특히 PDF 렌더링은 System.Drawing.Printing에 내장되어 있지 않습니다. 페이지를 추출하고 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 값은 밀리미터 단위로 지정됩니다.

특정 프린터를 어떻게 선택하나요?

우리는 시스템에 설치된 모든 프린터를 열거하기 위해 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"))
};

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로 감싸면 단일 손상된 파일이나 프린터 시간 초과에 의해 전체 배치가 중단되지 않도록 보장합니다. 백그라운드 서비스에서 실행되는 대용량 배치의 경우, 각 결과를 데이터베이스나 모니터링 시스템에 기록하면 운영 팀이 검토할 수 있는 감사 추적을 제공합니다.

스레드를 차단하지 않고 비동기적으로 인쇄하는 방법은 무엇입니까?

Printer.PrintAsync() 메소드는 Task을 반환하여 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

PrintAsync()는 파일 경로나 바이트 배열, 그리고 선택적인 PrintSettings 객체를 매개변수로받습니다 — Print()와 동일합니다. 비동기 오버로드는 수십 개의 문서가 동시에 인쇄 대기열에 놓이는 고처리량 시나리오에서 스레드 풀 고갈을 방지합니다. 이는 현대 .NET 개발 전반에 걸쳐 권장되는 작업 기반 비동기 패턴과 동일한 흐름을 따릅니다.

플랫폼 고려 사항은 무엇입니까?

IronPrint는 데스크탑과 모바일 플랫폼에서 조용한 인쇄를 지원하지만, 동작은 운영 체제에 따라 다릅니다.

플랫폼 무음 인쇄 노트
Windows (7+) 전체 지원 No dialog, full 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) 제2장 제508조, EU 접근성법 기존 규정과 호환됩니다.
검증 도구 veraPDF, Adobe Acrobat Pro, PAC 2024 veraPDF (점점 더 많은 지원)
폼 필드 의미론 기준 향상된 기능 (더욱 풍부한 접근성 메타데이터)
~에 가장 적합함 오늘날 대부분의 프로젝트 PDF 2.0 기능을 필요로 하는 새로운 시스템

네이티브 접근 방식은 이미 문서 렌더링 인프라가 있는 팀이 간단한 시나리오에서 작동합니다. PDF, 이미지 또는 HTML을 렌더링 코드 없이 인쇄하는 팀의 경우 IronPrint는 수주일의 개발과 지속적인 유지를 제거합니다. 2025년 5월 릴리스에서 제공된 30% 인쇄 속도 향상은 자체적으로 구축할 경우 엔지니어링 사이클을 소비할 최적화의 한 예입니다.

다음 단계

IronPrint를 사용한 무음 인쇄는 세 가지 주요 메소드로 요약됩니다: 동기식 무음 출력을 위한 Printer.Print(), 비차단 실행을 위한 Printer.PrintAsync(), 인쇄 작업에 대한 완전한 제어를 위한 PrintSettings. 이들은 데스크탑 플랫폼 전반에 걸쳐 단일 문서, 배치, 동시 인쇄 시나리오를 포괄합니다.

깊이 있는 튜토리얼을 살펴보려면 IronPrint 튜토리얼을 탐색하거나, 완전한 메서드 표면을 위해 프린터 클래스 API 레퍼런스를 검토하세요. 인쇄 설정 사용 방법은 트레이 선택 및 평면화와 같은 추가 구성 옵션을 다룹니다.

무료 30일 체험판을 시작하세요 실제 환경에서 조용한 인쇄를 테스트하십시오 — 신용카드가 필요 없습니다. 배포 준비가 되면, 749달러부터 시작하는 라이선스 옵션을 확인하세요.

Iron Software 엔지니어와 채팅하여 특정 배포 시나리오에 대한 도움을 받으세요.

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'name'

Filename: sections/author_component.php

Line Number: 18

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 18
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: sections/author_component.php

Line Number: 38

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 38
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'comment'

Filename: sections/author_component.php

Line Number: 48

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 48
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

시작할 준비 되셨나요?
Nuget 다운로드 38,930 | 버전: 2026.4 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronPrint
샘플을 실행하세요 문서가 프린터로 전송되는 것을 지켜보세요.