푸터 콘텐츠로 바로가기
IRONPDF 사용하기

ASP.NET에서 IronPDF로 PDF 파일을 인쇄하는 방법

IronPDF는 ASP.NET 애플리케이션에서 서버 측 및 클라이언트 측 기능으로 신뢰할 수 있는 PDF 인쇄를 가능합니다. 이는 네트워크 프린터, 오류 처리, 감사 추적을 포함하여 기업 요구 사항을 처리하며, 완전한 감사 추적을 통해 규정을 준수하는 문서 생성이 가능합니다.

ASP.NET에서 PDF 인쇄 작업은 종종 기업 아키텍처에 특정한 과제에 직면합니다. 송장, 보고서, 배송 라벨을 위한 문서를 생성하든, 보안 준수를 유지하면서 서버-클라이언트 아키텍처의 복잡함을 탐색해야 하는 신뢰할 수 있는 인쇄 기능을 구현하려면 필요한 기능을 구현해야 합니다. IronPDF 라이브러리는 장기 아카이브를 위한 디지털 서명, 워터마킹, PDF/A 규정 준수 등의 전문 기능을 제공합니다.

이 문서는 IronPDF의 .NET PDF 라이브러리를 사용하여 PDF 인쇄 작업을 처리하는 방법을 설명하며, 서버 측 자동화와 클라이언트 측 인쇄 워크플로를 다룹니다. 예제는 .NET 10에 대해 상위 수준의 문장 스타일로 작성되며 C#로 작성되었습니다.

ASP.NET에서는 PDF 인쇄의 주요 과제가 무엇인가요?

전통적인 데스크톱 애플리케이션은 기본 프린터에 직접 접근할 수 있지만, ASP.NET Core 애플리케이션은 PDF 문서를 인쇄할 때 여러 가지 장애물에 직면합니다. 서버 환경은 IIS 보안 제한으로 인해 직접 프린터 접근이 부족하며, 파일 접근을 위한 프로세스 스폰을 시도하면 권한 오류가 발생합니다. 이러한 제한은 감사 추적과 접근 제어가 유지되어야 하는 규제 산업에서 특히 중요합니다. 또한, 웹 서버 프로세스는 물리적 프린터 드라이버에 접근할 수 없는 제한된 서비스 계정 하에서 실행되므로 로컬 테스트를 통과하더라도 프로세스 기반 인쇄가 신뢰할 수 없습니다.

// This fails in ASP.NET -- wrong approach
Process.Start(@"C:\Files\document.pdf"); // Works locally, crashes on server
// This fails in ASP.NET -- wrong approach
Process.Start(@"C:\Files\document.pdf"); // Works locally, crashes on server
$vbLabelText   $csharpLabel

위 코드가 흔히 발생하는 실수를 보여줍니다. 웹 애플리케이션은 서버 측과 클라이언트 측 인쇄 시나리오를 효과적으로 처리하면서 데이터 거주 요구 사항을 준수해야 합니다. IronPDF는 외부 프로세스나 프린터 드라이버에 의존하지 않는 완전히 관리되는 .NET API를 제공하여 이러한 문제를 해결합니다.

ASP.NET 프로젝트에 IronPDF를 설치하는 방법은 무엇인가요?

IronPDF는 외부 종속성 없이 PDF 문서를 생성하고 인쇄할 수 있는 완전한 .NET Core 솔루션을 제공합니다. NuGet Install-Package는 .NET Framework와 .NET Core 애플리케이션 모두에 대해 간단합니다.

패키지 관리자 콘솔을 통해 설치하십시오:

Install-Package IronPdf
Install-Package IronPdf
SHELL

.NET CLI를 통해서도 가능합니다:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

IronPDF는 Windows Server, 리눅스 배포판 및 Docker 컨테이너를 포함하여 운영 체제 전반에서 작동하며, 다른 라이브러리에 영향을 주는 호환성 문제를 제거합니다. macOS에서 이 라이브러리는 인텔과 애플 실리콘 프로세서를 모두 기본적으로 지원합니다.

설치 후, 시작 시 전체 기능 세트를 활성화하기 위해 라이선스 키를 추가하십시오:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

모든 기능을 구매하기 전에 평가할 수 있는 무료 체험 라이선스가 있습니다.

서버 측에서 PDF 문서를 생성하고 인쇄하는 방법은 무엇인가요?

다음 예제는 ASP.NET 컨트롤러 내 HTML 마크업에서 PDF 문서를 생성하고 인쇄하는 방법을 보여줍니다. ChromePdfRenderer는 전체 CSS 지원으로 픽셀 완벽한 렌더링을 보장합니다. CssMediaType.Print를 사용하면 HTML에 정의된 인쇄 전용 스타일시트를 활성화하여 출력을 브라우저의 인쇄 미리보기에서 볼 수 있는 것과 정확히 일치하게 합니다:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("print")]
    public IActionResult PrintDocument()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $749.00</p>");

        // Print to default server printer
        pdf.Print();

        return Ok("Document sent to printer");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("print")]
    public IActionResult PrintDocument()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $749.00</p>");

        // Print to default server printer
        pdf.Print();

        return Ok("Document sent to printer");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllers()
Dim app = builder.Build()
app.MapControllers()
app.Run()

<ApiController>
<Route("[controller]")>
Public Class PdfController
    Inherits ControllerBase

    <HttpGet("print")>
    Public Function PrintDocument() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PrintHtmlBackgrounds = True
        renderer.RenderingOptions.MarginBottom = 10
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $749.00</p>")

        ' Print to default server printer
        pdf.Print()

        Return Ok("Document sent to printer")
    End Function
End Class
$vbLabelText   $csharpLabel

이 예제는 렌더링된 PDF를 기본 서버 프린터에 직접 보냅니다. ChromePdfRenderer는 CSS 스타일링과 글꼴 형식을 보존합니다. JavaScript가 많은 페이지의 경우, RenderingOptions.WaitFor를 사용하여 렌더링 지연을 추가하여 동적 콘텐츠가 캡처 전에 로드 완료되도록 합니다.

서버 측 인쇄 출력은 어떻게 보이나요?

Windows '출력 파일로 저장' 대화 상자가 파일 시스템 폴더 및 드라이브를 표시하며, PDF 형식이 저장 유형으로 선택됨

ASP.NET에서 네트워크 프린터를 어떻게 구성합니까?

IronPDF는 특정 프린터 라우팅 및 규정 준수 추적을 필요로 하는 기업 환경에 대한 완전한 인쇄 문서 관리를 제공합니다. 이 라이브러리는 다양한 용지 크기 및 페이지 방향을 지원합니다:

using IronPdf;
using System.Drawing.Printing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class NetworkPrintController : ControllerBase
{
    [HttpPost("print-network")]
    public IActionResult PrintToNetworkPrinter(string filePath)
    {
        try
        {
            var pdfDocument = PdfDocument.FromFile(filePath);
            var printDocument = pdfDocument.GetPrintDocument();

            // Specify network printer with failover support
            printDocument.PrinterSettings.PrinterName = @"\\server\printer";
            printDocument.PrinterSettings.Copies = 2;
            printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169);

            var printJobId = Guid.NewGuid().ToString();
            printDocument.Print();

            return Ok(new
            {
                success = true,
                jobId = printJobId,
                message = "Document sent to " + printDocument.PrinterSettings.PrinterName
            });
        }
        catch (Exception ex)
        {
            return StatusCode(500, new { error = "Print operation failed", details = ex.Message });
        }
    }
}
using IronPdf;
using System.Drawing.Printing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class NetworkPrintController : ControllerBase
{
    [HttpPost("print-network")]
    public IActionResult PrintToNetworkPrinter(string filePath)
    {
        try
        {
            var pdfDocument = PdfDocument.FromFile(filePath);
            var printDocument = pdfDocument.GetPrintDocument();

            // Specify network printer with failover support
            printDocument.PrinterSettings.PrinterName = @"\\server\printer";
            printDocument.PrinterSettings.Copies = 2;
            printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169);

            var printJobId = Guid.NewGuid().ToString();
            printDocument.Print();

            return Ok(new
            {
                success = true,
                jobId = printJobId,
                message = "Document sent to " + printDocument.PrinterSettings.PrinterName
            });
        }
        catch (Exception ex)
        {
            return StatusCode(500, new { error = "Print operation failed", details = ex.Message });
        }
    }
}
Imports IronPdf
Imports System.Drawing.Printing
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class NetworkPrintController
    Inherits ControllerBase

    <HttpPost("print-network")>
    Public Function PrintToNetworkPrinter(filePath As String) As IActionResult
        Try
            Dim pdfDocument = PdfDocument.FromFile(filePath)
            Dim printDocument = pdfDocument.GetPrintDocument()

            ' Specify network printer with failover support
            printDocument.PrinterSettings.PrinterName = "\\server\printer"
            printDocument.PrinterSettings.Copies = 2
            printDocument.DefaultPageSettings.PaperSize = New PaperSize("A4", 827, 1169)

            Dim printJobId = Guid.NewGuid().ToString()
            printDocument.Print()

            Return Ok(New With {
                .success = True,
                .jobId = printJobId,
                .message = "Document sent to " & printDocument.PrinterSettings.PrinterName
            })
        Catch ex As Exception
            Return StatusCode(500, New With {.error = "Print operation failed", .details = ex.Message})
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

이 접근 방식은 종이 형식 및 해상도를 포함하여 프린터 설정에 대한 완벽한 제어를 제공합니다. 구현에는 규정 준수 프레임워크에 필요한 오류 처리 및 작업 추적이 포함됩니다. 대량 인쇄의 경우, 서버 처리량을 높게 유지하기 위해 비동기 처리 및 메모리 최적화를 고려하십시오.

네트워크 인쇄의 보안 고려 사항은 무엇인가요?

Windows 저장 대화 상자가 인쇄 출력을 PDF로 저장하도록 제시하며, 폴더와 드라이브 저장 정보가 표시됨

인쇄 작업이 성공했는지 어떻게 확인합니까?

브라우저 콘솔 출력에 'success: true' JSON 응답이 포함되어 있는 인쇄 작업 성공 메시지와 문서가 Microsoft Print to PDF로 전송되었다는 확인 메시지 표시

최고의 클라이언트 측 인쇄 전략은 무엇인가?

브라우저는 보안상의 이유로 직접 인쇄기 접근을 제한하므로 적절한 보안 헤더를 사용하여 PDF 파일을 제공함으로써 클라이언트 측 인쇄를 구현합니다. IronPDF는 파일 전송 속도를 높이기 위한 다양한 압축 옵션을 지원합니다. 이 패턴은 최종 사용자가 브라우저 인쇄 대화상자에서 자신의 인쇄 목적지를 선택해야 할 때 이상적입니다:

using IronPdf;
using IronPdf.Rendering;
using Microsoft.AspNetCore.Mvc;
using System.Text;

[ApiController]
[Route("[controller]")]
public class ClientPrintController : ControllerBase
{
    [HttpGet("pdf")]
    public IActionResult GetRawPrintablePdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = false;

        var pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml());

        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        pdf.ApplyWatermark(
            "<h2 style='color:red;opacity:0.3'>CONFIDENTIAL</h2>",
            30,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        HttpContext.Response.Headers["Content-Disposition"] = "inline; filename=invoice.pdf";
        HttpContext.Response.Headers["X-Content-Type-Options"] = "nosniff";

        return File(pdf.BinaryData, "application/pdf");
    }

    [HttpGet("print-wrapper")]
    public IActionResult PrintUsingClientWrapper()
    {
        var printUrl = Url.Action(nameof(GetRawPrintablePdf));
        var html = new StringBuilder();
        html.AppendLine("<!DOCTYPE html><html lang=\"en\"><head><title>Print Document</title></head><body>");
        html.AppendLine($"<iframe src='{printUrl}' style='position:absolute;top:0;left:0;width:100%;height:100%;border:none;'></iframe>");
        html.AppendLine("<script>window.onload = function() { setTimeout(function() { window.print(); }, 100); };</script>");
        html.AppendLine("</body></html>");
        return Content(html.ToString(), "text/html");
    }

    private static string GetInvoiceHtml() => @"
        <html><head><style>
            body { font-family: Arial, sans-serif; }
            .header { font-weight: bold; color: #1e40af; }
            @media print { .no-print { display: none; } }
        </style></head>
        <body>
            <div class='header'>Invoice Summary</div>
            <p>Total Amount: <b>$749.00</b></p>
        </body></html>";
}
using IronPdf;
using IronPdf.Rendering;
using Microsoft.AspNetCore.Mvc;
using System.Text;

[ApiController]
[Route("[controller]")]
public class ClientPrintController : ControllerBase
{
    [HttpGet("pdf")]
    public IActionResult GetRawPrintablePdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = false;

        var pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml());

        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        pdf.ApplyWatermark(
            "<h2 style='color:red;opacity:0.3'>CONFIDENTIAL</h2>",
            30,
            VerticalAlignment.Middle,
            HorizontalAlignment.Center);

        HttpContext.Response.Headers["Content-Disposition"] = "inline; filename=invoice.pdf";
        HttpContext.Response.Headers["X-Content-Type-Options"] = "nosniff";

        return File(pdf.BinaryData, "application/pdf");
    }

    [HttpGet("print-wrapper")]
    public IActionResult PrintUsingClientWrapper()
    {
        var printUrl = Url.Action(nameof(GetRawPrintablePdf));
        var html = new StringBuilder();
        html.AppendLine("<!DOCTYPE html><html lang=\"en\"><head><title>Print Document</title></head><body>");
        html.AppendLine($"<iframe src='{printUrl}' style='position:absolute;top:0;left:0;width:100%;height:100%;border:none;'></iframe>");
        html.AppendLine("<script>window.onload = function() { setTimeout(function() { window.print(); }, 100); };</script>");
        html.AppendLine("</body></html>");
        return Content(html.ToString(), "text/html");
    }

    private static string GetInvoiceHtml() => @"
        <html><head><style>
            body { font-family: Arial, sans-serif; }
            .header { font-weight: bold; color: #1e40af; }
            @media print { .no-print { display: none; } }
        </style></head>
        <body>
            <div class='header'>Invoice Summary</div>
            <p>Total Amount: <b>$749.00</b></p>
        </body></html>";
}
Imports IronPdf
Imports IronPdf.Rendering
Imports Microsoft.AspNetCore.Mvc
Imports System.Text

<ApiController>
<Route("[controller]")>
Public Class ClientPrintController
    Inherits ControllerBase

    <HttpGet("pdf")>
    Public Function GetRawPrintablePdf() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.EnableJavaScript = False

        Dim pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml())

        pdf.SecuritySettings.AllowUserPrinting = True
        pdf.SecuritySettings.AllowUserEditing = False
        pdf.SecuritySettings.AllowUserCopyPasteContent = False

        pdf.ApplyWatermark("<h2 style='color:red;opacity:0.3'>CONFIDENTIAL</h2>", 30, VerticalAlignment.Middle, HorizontalAlignment.Center)

        HttpContext.Response.Headers("Content-Disposition") = "inline; filename=invoice.pdf"
        HttpContext.Response.Headers("X-Content-Type-Options") = "nosniff"

        Return File(pdf.BinaryData, "application/pdf")
    End Function

    <HttpGet("print-wrapper")>
    Public Function PrintUsingClientWrapper() As IActionResult
        Dim printUrl = Url.Action(NameOf(GetRawPrintablePdf))
        Dim html As New StringBuilder()
        html.AppendLine("<!DOCTYPE html><html lang=""en""><head><title>Print Document</title></head><body>")
        html.AppendLine($"<iframe src='{printUrl}' style='position:absolute;top:0;left:0;width:100%;height:100%;border:none;'></iframe>")
        html.AppendLine("<script>window.onload = function() { setTimeout(function() { window.print(); }, 100); };</script>")
        html.AppendLine("</body></html>")
        Return Content(html.ToString(), "text/html")
    End Function

    Private Shared Function GetInvoiceHtml() As String
        Return "
        <html><head><style>
            body { font-family: Arial, sans-serif; }
            .header { font-weight: bold; color: #1e40af; }
            @media print { .no-print { display: none; } }
        </style></head>
        <body>
            <div class='header'>Invoice Summary</div>
            <p>Total Amount: <b>$749.00</b></p>
        </body></html>"
    End Function
End Class
$vbLabelText   $csharpLabel

PDF는 브라우저에서 열리며 사용자는 표준 인쇄 대화상자를 통해 인쇄를 실행합니다. 이 접근 방식은 콘텐츠 보안 정책과 워터마킹을 통해 보안을 유지하면서 인쇄기 드라이버 종속성을 서버 자원에서 자유롭게 합니다.

클라이언트 측 인쇄는 데이터 보안을 어떻게 보장합니까?

Microsoft Edge print dialog showing a PDF invoice preview with $749.00 total and various print settings on the right side

여러 입력 소스를 어떻게 다루나요?

IronPDF는 데이터를 주권을 유지하면서 다양한 입력 소스를 처리합니다 -- Enterprise 환경에서 동적 인쇄 워크플로를 구축하는 개발자에게 중요합니다. 도서관은 HTML 파일, URL, HTML 문자열 및 Markdown 콘텐츠를 지원합니다:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class MultiSourcePrintController : ControllerBase
{
    [HttpPost("print-multi")]
    public async Task<IActionResult> PrintFromMultipleSources()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = false;
        renderer.RenderingOptions.Timeout = 30;

        // From URL with authentication
        renderer.LoginCredentials = new ChromeHttpLoginCredentials
        {
            NetworkUsername = "serviceaccount",
            NetworkPassword = "securepassword"
        };
        var pdfFromUrl = await renderer.RenderUrlAsPdfAsync("https://reports.internal.example.com/report");

        // From HTML file template
        var pdfFromFile = renderer.RenderHtmlFileAsPdf(@"Templates\report.html");

        // From sanitized HTML string
        var pdfFromString = renderer.RenderHtmlAsPdf("<h2>Summary Report</h2><p>Generated on demand.</p>");

        pdfFromUrl.Print();

        return Ok(new
        {
            message = "PDF documents processed and printed.",
            sources = new[] { "URL", "File", "HTML string" },
            timestamp = DateTime.UtcNow
        });
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class MultiSourcePrintController : ControllerBase
{
    [HttpPost("print-multi")]
    public async Task<IActionResult> PrintFromMultipleSources()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = false;
        renderer.RenderingOptions.Timeout = 30;

        // From URL with authentication
        renderer.LoginCredentials = new ChromeHttpLoginCredentials
        {
            NetworkUsername = "serviceaccount",
            NetworkPassword = "securepassword"
        };
        var pdfFromUrl = await renderer.RenderUrlAsPdfAsync("https://reports.internal.example.com/report");

        // From HTML file template
        var pdfFromFile = renderer.RenderHtmlFileAsPdf(@"Templates\report.html");

        // From sanitized HTML string
        var pdfFromString = renderer.RenderHtmlAsPdf("<h2>Summary Report</h2><p>Generated on demand.</p>");

        pdfFromUrl.Print();

        return Ok(new
        {
            message = "PDF documents processed and printed.",
            sources = new[] { "URL", "File", "HTML string" },
            timestamp = DateTime.UtcNow
        });
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class MultiSourcePrintController
    Inherits ControllerBase

    <HttpPost("print-multi")>
    Public Async Function PrintFromMultipleSources() As Task(Of IActionResult)
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.EnableJavaScript = False
        renderer.RenderingOptions.Timeout = 30

        ' From URL with authentication
        renderer.LoginCredentials = New ChromeHttpLoginCredentials With {
            .NetworkUsername = "serviceaccount",
            .NetworkPassword = "securepassword"
        }
        Dim pdfFromUrl = Await renderer.RenderUrlAsPdfAsync("https://reports.internal.example.com/report")

        ' From HTML file template
        Dim pdfFromFile = renderer.RenderHtmlFileAsPdf("Templates\report.html")

        ' From sanitized HTML string
        Dim pdfFromString = renderer.RenderHtmlAsPdf("<h2>Summary Report</h2><p>Generated on demand.</p>")

        pdfFromUrl.Print()

        Return Ok(New With {
            .message = "PDF documents processed and printed.",
            .sources = New String() {"URL", "File", "HTML string"},
            .timestamp = DateTime.UtcNow
        })
    End Function
End Class
$vbLabelText   $csharpLabel

각 방법은 문서 구조와 그래픽을 유지하면서 인쇄 품질을 보존합니다. 구현에는 인증, 입력 유효성 검증, 암호화 지원이 포함됩니다. 추가 입력 소스로서 IronPDF는 DOCX 파일, RTF 문서 및 이미지 형식을 지원하여 전체 응용 프로그램에서 단일 PDF 파이프라인으로 사용할 수 있을 만큼 유연합니다.

PDF 문서를 처리한 후 Windows에서 기본 프린터로 문서를 전송했음을 확인하는 저장 대화 상자를 표시하여 사용자가 인쇄 출력을 저장할 수 있게 합니다

오류 처리 및 로그 작성은 어떻게 구현합니까?

신뢰할 수 있는 오류 처리는 컴플라이언스 로그 요구사항이 있는 프로덕션 환경에서 필수적입니다. IronPDF는 네이티브 예외 처리와 인쇄 오류 진단을 위한 문제 해결 가이드를 제공합니다. 상관관계 ID 패턴은 감사 이력을 검토할 때 특정 인쇄 요청과 로그 항목을 간단히 일치시킵니다:

using IronPdf;
using System.Drawing.Printing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class SafePrintController : ControllerBase
{
    [HttpPost("safe-print")]
    public IActionResult SafePrint(string documentId)
    {
        var correlationId = Guid.NewGuid().ToString();

        try
        {
            var pdf = PdfDocument.FromFile(GetSecureFilePath(documentId));

            var availablePrinters = PrinterSettings.InstalledPrinters.Cast<string>().ToList();
            var targetPrinter = availablePrinters.FirstOrDefault();

            if (string.IsNullOrEmpty(targetPrinter))
            {
                return BadRequest(new
                {
                    error = "No printer available",
                    correlationId
                });
            }

            var printDoc = pdf.GetPrintDocument();
            printDoc.PrinterSettings.PrinterName = targetPrinter;
            printDoc.Print();

            return Ok(new
            {
                message = $"Document {documentId} printed successfully",
                printer = targetPrinter,
                correlationId,
                timestamp = DateTime.UtcNow
            });
        }
        catch (UnauthorizedAccessException)
        {
            return StatusCode(403, new { error = "Access denied", correlationId });
        }
        catch (Exception ex)
        {
            return StatusCode(500, new
            {
                error = "Printing failed",
                correlationId,
                message = "Contact support with the correlation ID"
            });
        }
    }

    private static string GetSecureFilePath(string documentId) =>
        Path.Combine(AppContext.BaseDirectory, "documents", documentId + ".pdf");
}
using IronPdf;
using System.Drawing.Printing;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class SafePrintController : ControllerBase
{
    [HttpPost("safe-print")]
    public IActionResult SafePrint(string documentId)
    {
        var correlationId = Guid.NewGuid().ToString();

        try
        {
            var pdf = PdfDocument.FromFile(GetSecureFilePath(documentId));

            var availablePrinters = PrinterSettings.InstalledPrinters.Cast<string>().ToList();
            var targetPrinter = availablePrinters.FirstOrDefault();

            if (string.IsNullOrEmpty(targetPrinter))
            {
                return BadRequest(new
                {
                    error = "No printer available",
                    correlationId
                });
            }

            var printDoc = pdf.GetPrintDocument();
            printDoc.PrinterSettings.PrinterName = targetPrinter;
            printDoc.Print();

            return Ok(new
            {
                message = $"Document {documentId} printed successfully",
                printer = targetPrinter,
                correlationId,
                timestamp = DateTime.UtcNow
            });
        }
        catch (UnauthorizedAccessException)
        {
            return StatusCode(403, new { error = "Access denied", correlationId });
        }
        catch (Exception ex)
        {
            return StatusCode(500, new
            {
                error = "Printing failed",
                correlationId,
                message = "Contact support with the correlation ID"
            });
        }
    }

    private static string GetSecureFilePath(string documentId) =>
        Path.Combine(AppContext.BaseDirectory, "documents", documentId + ".pdf");
}
Imports IronPdf
Imports System.Drawing.Printing
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class SafePrintController
    Inherits ControllerBase

    <HttpPost("safe-print")>
    Public Function SafePrint(documentId As String) As IActionResult
        Dim correlationId = Guid.NewGuid().ToString()

        Try
            Dim pdf = PdfDocument.FromFile(GetSecureFilePath(documentId))

            Dim availablePrinters = PrinterSettings.InstalledPrinters.Cast(Of String)().ToList()
            Dim targetPrinter = availablePrinters.FirstOrDefault()

            If String.IsNullOrEmpty(targetPrinter) Then
                Return BadRequest(New With {
                    .error = "No printer available",
                    .correlationId = correlationId
                })
            End If

            Dim printDoc = pdf.GetPrintDocument()
            printDoc.PrinterSettings.PrinterName = targetPrinter
            printDoc.Print()

            Return Ok(New With {
                .message = $"Document {documentId} printed successfully",
                .printer = targetPrinter,
                .correlationId = correlationId,
                .timestamp = DateTime.UtcNow
            })
        Catch ex As UnauthorizedAccessException
            Return StatusCode(403, New With {.error = "Access denied", .correlationId = correlationId})
        Catch ex As Exception
            Return StatusCode(500, New With {
                .error = "Printing failed",
                .correlationId = correlationId,
                .message = "Contact support with the correlation ID"
            })
        End Try
    End Function

    Private Shared Function GetSecureFilePath(documentId As String) As String
        Return Path.Combine(AppContext.BaseDirectory, "documents", documentId & ".pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

이로 인해 시스템 리소스가 사용 불가할 때도 안정적인 인쇄가 보장됩니다. 상관관계 ID를 통해 분산 시스템 전반에 걸쳐 요청을 추적하고 감사 추적에서 특정 인쇄 작업과 로그 항목을 연결할 수 있습니다. 구조화된 오류 응답을 통해 호출 클라이언트는 적절한 작업을 수행할 수 있습니다 -- 예를 들어 대체 인쇄기로 다시 시도하거나 사용자를 알리는 등의 작업이 가능합니다.

프린터가 사용 불가하면 무슨 일이 발생합니까?

코드에서 지정한 프린터가 사용할 수 없는 경우 구조화된 오류 응답을 반환합니다:

사용자가 문서를 인쇄하려 할 때 발생할 수 있는 일반적인 프린터 오류 메시지

성공적인 인쇄 작업을 어떻게 모니터링합니까?

성공적인 인쇄 작업은 작업 세부 정보와 함께 확인 메시지를 반환합니다:

Windows 명령 프롬프트에서 중첩된 데스크탑 폴더 구조에 위치한 파일에 대한 PDF 인쇄 성공 확인 표시

어떤 고급 구성 옵션이 제공됩니까?

IronPDF의 렌더링 옵션은 Enterprise 아키텍처에서 필요한 복잡한 시나리오를 지원합니다. 도서관은 고충실도 문서를 생성할 때 성능 최적화 및 메모리 관리를 위한 설정을 제공합니다. DpiResolution를 300으로 설정하면 물리적 문서에 적합한 인쇄 품질 출력을 생성하며, CssMediaType.Print 옵션은 HTML 소스의 인쇄 전용 CSS 규칙을 활성화합니다:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class AdvancedPrintController : ControllerBase
{
    [HttpGet("advanced")]
    public IActionResult ConfigureAdvancedPrinting()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.EnableJavaScript = false;
        renderer.RenderingOptions.RenderDelay = 500;
        renderer.RenderingOptions.Timeout = 60;
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.DpiResolution = 300;

        var pdf = renderer.RenderHtmlAsPdf(GetEnterpriseHtml());

        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
        pdf.SecuritySettings.OwnerPassword = Guid.NewGuid().ToString();

        pdf.MetaData.Author = "Enterprise Document System";
        pdf.MetaData.Subject = "Compliance Document";
        pdf.MetaData.Keywords = "enterprise,secure,compliant";
        pdf.MetaData.CreationDate = DateTime.UtcNow;

        // Apply digital signature for document integrity
        // pdf.SignWithFile("/path/to/certificate.pfx", "certificatePassword");

        return File(pdf.BinaryData, "application/pdf");
    }

    private static string GetEnterpriseHtml() => @"
        <!DOCTYPE html><html><head>
        <style>@page { size: A4; margin: 1cm; } body { font-family: Arial, sans-serif; }</style>
        </head><body>
        <h1>Enterprise Document</h1>
        <p>CONFIDENTIAL -- INTERNAL USE ONLY</p>
        </body></html>";
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class AdvancedPrintController : ControllerBase
{
    [HttpGet("advanced")]
    public IActionResult ConfigureAdvancedPrinting()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.EnableJavaScript = false;
        renderer.RenderingOptions.RenderDelay = 500;
        renderer.RenderingOptions.Timeout = 60;
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.DpiResolution = 300;

        var pdf = renderer.RenderHtmlAsPdf(GetEnterpriseHtml());

        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
        pdf.SecuritySettings.OwnerPassword = Guid.NewGuid().ToString();

        pdf.MetaData.Author = "Enterprise Document System";
        pdf.MetaData.Subject = "Compliance Document";
        pdf.MetaData.Keywords = "enterprise,secure,compliant";
        pdf.MetaData.CreationDate = DateTime.UtcNow;

        // Apply digital signature for document integrity
        // pdf.SignWithFile("/path/to/certificate.pfx", "certificatePassword");

        return File(pdf.BinaryData, "application/pdf");
    }

    private static string GetEnterpriseHtml() => @"
        <!DOCTYPE html><html><head>
        <style>@page { size: A4; margin: 1cm; } body { font-family: Arial, sans-serif; }</style>
        </head><body>
        <h1>Enterprise Document</h1>
        <p>CONFIDENTIAL -- INTERNAL USE ONLY</p>
        </body></html>";
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class AdvancedPrintController
    Inherits ControllerBase

    <HttpGet("advanced")>
    Public Function ConfigureAdvancedPrinting() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.EnableJavaScript = False
        renderer.RenderingOptions.RenderDelay = 500
        renderer.RenderingOptions.Timeout = 60
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
        renderer.RenderingOptions.PrintHtmlBackgrounds = True
        renderer.RenderingOptions.DpiResolution = 300

        Dim pdf = renderer.RenderHtmlAsPdf(GetEnterpriseHtml())

        pdf.SecuritySettings.AllowUserPrinting = True
        pdf.SecuritySettings.AllowUserEditing = False
        pdf.SecuritySettings.OwnerPassword = Guid.NewGuid().ToString()

        pdf.MetaData.Author = "Enterprise Document System"
        pdf.MetaData.Subject = "Compliance Document"
        pdf.MetaData.Keywords = "enterprise,secure,compliant"
        pdf.MetaData.CreationDate = DateTime.UtcNow

        ' Apply digital signature for document integrity
        ' pdf.SignWithFile("/path/to/certificate.pfx", "certificatePassword")

        Return File(pdf.BinaryData, "application/pdf")
    End Function

    Private Shared Function GetEnterpriseHtml() As String
        Return "
        <!DOCTYPE html><html><head>
        <style>@page { size: A4; margin: 1cm; } body { font-family: Arial, sans-serif; }</style>
        </head><body>
        <h1>Enterprise Document</h1>
        <p>CONFIDENTIAL -- INTERNAL USE ONLY</p>
        </body></html>"
    End Function
End Class
$vbLabelText   $csharpLabel

모든 보안 구성이 적용된 상태에서 생성된 후 pdf.Print()를 호출하면 문서를 프린터로 보냅니다. 이 접근 방식은 디지털 서명 및 암호화를 통해 문서 무결성을 유지하면서 Enterprise 보안 표준을 준수합니다. 장기 보관을 위해, PDF/A 준수를 고려하십시오 -- 수십 년 동안 읽기 및 재생 가능해야 하는 문서에 특화된 표준입니다.

서버 측 및 클라이언트 측 인쇄는 어떻게 비교됩니까?

서버 측 및 클라이언트 측 인쇄를 선택하는 것은 사용 사례에 따라 다릅니다. 아래 표는 주요 트레이드오프를 요약합니다:

ASP.NET에서 서버 측 대 클라이언트 측 PDF 인쇄
측면 서버 측 인쇄 클라이언트 측 인쇄
프린터 액세스 서버의 네트워크 및 로컬 프린터 사용자의 로컬 연결 프린터
사용자 상호 작용 없음 -- 완전히 자동화됨 브라우저 인쇄 대화 상자가 나타남
컴플라이언스 로깅 완전한 서버 측 감사 추적 클라이언트 측 콘솔 로그만
보안 제어 서버는 모든 제한을 강제합니다 브라우저는 콘텐츠 보안 정책을 강제합니다
~에 가장 적합함 배치 작업, 송장, 규제 산업 사용자 트리거 온디맨드 인쇄

문서화된 감사 기록이 필요한 규제 산업의 경우 서버측 인쇄가 선호됩니다. 사용자 측 인쇄는 최종 사용자가 인쇄 목적지를 제어해야 하는 상황에 적합합니다.

ASP.NET의 PDF 인쇄를 위해 IronPDF를 선택하는 이유는?

IronPDF는 ASP.NET PDF 인쇄를 복잡한 과제에서 간단한 구현으로 변환하여 기업 보안 표준을 유지합니다. Adobe Reader나 외부 종속성을 요구하지 않고, 이 라이브러리는 최소한의 코드로 PDF 파일을 생성하고 인쇄하며, SOC2, HIPAA 및 산업별 규정을 준수합니다.

완벽한 API는 다양한 입력 형식, 편집 기능, 보안 기능 및 조직 도구를 통해 전체 PDF 관리를 지원합니다. 이 라이브러리의 광범위한 튜토리얼, 코드 예제, 문제해결 리소스는 기존 인프라에 원활하게 통합되도록 보장합니다.

이미지나 Office 파일의 직접 인쇄 같은 PDF 생성 이상으로 필요한 인쇄 요구 사항에 대해 Iron Software는 IronPrint, 전 for .NET 인쇄 라이브러리도 제공합니다. PDF 콘텐츠 생성 및 조작에 초점을 맞춘 IronPDF와 달리 IronPrint는 중간 변환 없이 직접 파일 인쇄를 전문으로 합니다. Microsoft의 ASP.NET 문서에 따르면 서버측 인쇄 작업은 IIS 응용 프로그램 풀 ID 제한을 받으며, 이러한 이유로 라이브러리 접근 방식이 프로덕션 배포의 올바른 아키텍처적 선택입니다.

무료 체험판을 오늘 시작하고 IronPDF가 ASP.NET 애플리케이션에서 문서 처리를 어떻게 간소화하는지 경험해보세요. 완전한 문서, 직접적인 엔지니어 지원 및 입증된 준수 인증을 통해 프로덕션 준비된 PDF 인쇄는 몇 분 내에 시작될 수 있습니다. Iron Software의 PDF 문서 보안 가이드W3C PDF 접근성 사양을 추가로 읽어보세요.

자주 묻는 질문

ASP.NET 응용 프로그램에서 직접 PDF를 인쇄하려면 어떻게 하나요?

IronPDF를 사용하여 HTML 파일을 PDF로 변환한 후 이를 프린터로 보내는 방식으로 ASP.NET 응용 프로그램에서 직접 PDF를 인쇄할 수 있습니다. IronPDF는 이 과정을 내장된 메서드로 간소화합니다.

ASP.NET에서 PDF를 인쇄할 때 IronPDF를 사용하는 이점은 무엇인가요?

IronPDF는 ASP.NET에서 PDF를 인쇄할 때 손쉬운 통합, 고품질 렌더링, 그리고 HTML 콘텐츠를 정확하게 PDF로 변환할 수 있는 기능을 포함한 여러 이점을 제공합니다.

IronPDF를 사용하여 인쇄 전에 PDF를 사용자 정의할 수 있나요?

네, IronPDF는 인쇄하기 전에 헤더, 푸터 및 워터마크를 추가하고 페이지 크기와 여백을 설정하여 PDF를 사용자 정의할 수 있습니다.

IronPDF는 대형 PDF 파일을 인쇄할 수 있나요?

IronPDF는 대형 PDF 파일을 효율적으로 처리할 수 있으며, 복잡한 문서라도 정확하고 신속하게 ASP.NET 응용 프로그램에서 인쇄되도록 보장합니다.

IronPDF는 PDF 인쇄를 위한 다양한 프린터 설정을 지원하나요?

IronPDF는 다양한 프린터 설정을 지원하여 필요에 맞게 용지 크기, 방향 및 인쇄 품질을 지정할 수 있습니다.

ASP.NET에서 인쇄 전에 PDF를 미리 볼 수 있는 방법이 있나요?

IronPDF를 사용하면 ASP.NET 응용 프로그램 내에서 PDF 미리보기를 생성하고 표시할 수 있으며, 사용자가 인쇄 명령을 실행하기 전에 문서를 검토할 수 있습니다.

IronPDF는 인쇄를 위해 어떤 포맷을 PDF로 변환할 수 있나요?

IronPDF는 HTML, ASPX 및 이미지 파일을 포함한 다양한 형식을 PDF로 변환하여 인쇄할 수 있으며, 다양한 응용 프로그램 요구에 적합합니다.

IronPDF는 인쇄된 PDF 문서의 품질을 어떻게 보장하나요?

IronPDF는 고급 렌더링 기술을 사용하여 인쇄된 PDF 문서가 원본 콘텐츠에 대한 높은 충실도를 유지하도록 보장하며, 선명한 텍스트와 명확한 이미지를 제공합니다.

IronPDF는 암호화되거나 암호로 보호된 PDF를 인쇄하는 데 사용할 수 있나요?

네, IronPDF는 암호화되거나 암호로 보호된 PDF를 처리할 수 있으며, 필요한 자격 증명을 제공하여 ASP.NET 응용 프로그램 내에서 안전하게 인쇄할 수 있습니다.

기존 ASP.NET 응용 프로그램에 IronPDF를 통합하기가 쉬운가요?

IronPDF를 기존 ASP.NET 응용 프로그램에 통합하는 것은 다양한 개발 환경을 지원하는 포괄적인 문서 덕분에 간단합니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해