IronPDF로 Blazor에서 PDF를 표시하는 방법
Blazor 애플리케이션에서 PDF를 표시하려면, IronPDF의 PDF 뷰어 컴포넌트를 사용하세요. 이는 Blazor 서버 앱과 통합되며, 폼 작성, 주석 달기, 모바일 지원과 같은 기능을 제공하는 고성능 PDF 렌더링을 위해 타사 브라우저 도구에 의존하지 않습니다.
왜 Blazor 애플리케이션에 전용 PDF 뷰어가 필요합니까?
현대 웹 애플리케이션에서 PDF를 표시하려면 기본 브라우저 기능을 넘어서는 신뢰할 수 있는 뷰어 컴포넌트가 필요합니다. .NET 개발자가 Blazor 애플리케이션을 구축하기 위해, IronPDF는 Blazor 서버 앱과 통합되는 효과적인 PDF 뷰어 솔루션을 제공합니다. 이로 인해 타사 브라우저 도구에 의존하지 않고 고성능 PDF 렌더링과 풍부한 기능성이 가능해집니다.
브라우저 PDF에 대한 기본 지원은 브라우저와 플랫폼마다 상당히 다르므로, 일관되지 않은 사용자 경험을 초래할 수 있습니다. Blazor 애플리케이션에서 맞춤형 PDF 뷰어를 구현하면, 모든 플랫폼에서 일관된 기능성을 보장하는 보기 환경에 대한 완전한 제어를 얻을 수 있습니다. 이것은 규정 준수 기준 및 고급 보안 기능을 필요로 하는 애플리케이션에 특히 중요합니다.
Microsoft의 ASP.NET Core에서 구축된 Blazor 프레임워크는 PDF 조작 라이브러리와 자연스럽게 결합되는 컴포넌트 기반 개발을 가능하게 합니다. 외부 CDN에서 타사 뷰어 위젯을 포함시키는 대신, 애플리케이션의 정확한 요구 사항에 맞춘 컴포넌트를 구축할 수 있습니다.
Blazor 프로젝트에 IronPDF를 어떻게 설치합니까?
Blazor PDF 뷰어를 구현하기 전에, IronPDF를 설치하십시오. NuGet을 통해 패키지 관리자 콘솔 또는 .NET CLI를 사용하여 Blazor 서버 앱에 추가하십시오:
Install-Package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
dotnet add package IronPdf
다음으로, 새로운 Blazor 애플리케이션을 생성하고 최신 버전의 .NET이 설치되어 있는지 확인하십시오. PDF 파일을 쉽게 접근할 수 있도록 wwwroot 폴더에 저장하거나, 바이트 배열이나 URL 등의 다른 소스에서 로드하십시오. 설치 개요는 다양한 배포 시나리오에 대한 자세한 지침을 제공합니다.
필수 선행 조건은 무엇입니까?
Blazor PDF 뷰어를 성공적으로 구현하려면 다음이 필요합니다:
- 개발 머신에 .NET 10이 설치되어 있어야 합니다
- Visual Studio 2022 또는 C# 확장이 포함된 Visual Studio Code
- IronPDF 라이센스 키 (무료 체험판을 통해 이용 가능)
- Blazor 구성 요소 구조에 대한 기본 이해
- 테스트를 위한 샘플 PDF 파일 (이를
wwwroot폴더에 배치합니다)
Windows 배포의 경우 적절한 Visual C++ 런타임을 확인하십시오. Linux 사용자는 필요한 종속성을 설치해야 하며, macOS 개발자는 인텔과 Apple Silicon 호환성을 고려해야 합니다.
어디에 PDF 파일을 저장해야 합니까?
PDF 파일 저장 위치는 애플리케이션의 성능과 보안에 상당히 영향을 미칩니다. Blazor 애플리케이션의 경우 다음 옵션을 고려하십시오:
- wwwroot 폴더: 민감한 정보가 없는 정적 PDF에 이상적
- Azure 블롭 스토리지: 유연한 저장소가 필요한 클라우드 애플리케이션
- 바이트 배열로서 데이터베이스: 접근 제어가 필요한 작은 PDF에 적합
- 보호된 서버 디렉토리: 보안 요구 사항이 있는 민감한 문서에 최적
- 메모리 스트림: HTML을 PDF로 변환하여 동적으로 생성된 PDF에 이상적
Blazor PDF 뷰어 구성 요소를 어떻게 만듭니까?
PDF 문서를 표시할 수 있는 기본 Blazor PDF 뷰어 구성 요소를 빌드하십시오. 프로젝트에서 새로운 Razor 구성 요소를 생성하십시오:
@page "/pdfviewer"
@rendermode 인터랙티브Server
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
<h3>PDF Viewer Component</h3>
<div>
<button @onclick="LoadPdfDocument">Open File</button>
<div id="pdfContainer">
@if (!string.IsNullOrEmpty(pdfUrl))
{
<iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
}
</div>
</div>
@code {
private string pdfUrl = "";
private byte[] pdfData = Array.Empty<byte>();
private async Task LoadPdfDocument()
{
var pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf");
pdfData = pdfDocument.BinaryData;
var base64 = Convert.ToBase64String(pdfData);
pdfUrl = $"data:application/pdf;base64,{base64}";
}
}
@page "/pdfviewer"
@rendermode 인터랙티브Server
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
<h3>PDF Viewer Component</h3>
<div>
<button @onclick="LoadPdfDocument">Open File</button>
<div id="pdfContainer">
@if (!string.IsNullOrEmpty(pdfUrl))
{
<iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
}
</div>
</div>
@code {
private string pdfUrl = "";
private byte[] pdfData = Array.Empty<byte>();
private async Task LoadPdfDocument()
{
var pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf");
pdfData = pdfDocument.BinaryData;
var base64 = Convert.ToBase64String(pdfData);
pdfUrl = $"data:application/pdf;base64,{base64}";
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.AspNetCore.Components
Imports Microsoft.JSInterop
@page "/pdfviewer"
@rendermode InteractiveServer
<h3>PDF Viewer Component</h3>
<div>
<button @onclick="LoadPdfDocument">Open File</button>
<div id="pdfContainer">
@If Not String.IsNullOrEmpty(pdfUrl) Then
<iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
End If
</div>
</div>
@code
Private pdfUrl As String = ""
Private pdfData As Byte() = Array.Empty(Of Byte)()
Private Async Function LoadPdfDocument() As Task
Dim pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf")
pdfData = pdfDocument.BinaryData
Dim base64 = Convert.ToBase64String(pdfData)
pdfUrl = $"data:application/pdf;base64,{base64}"
End Function
이 코드는 PDF 문서를 로드하고 iframe을 사용하여 표시하는 PDF 뷰어 구성 요소를 만듭니다. LoadPdfDocument 메서드는 wwwroot 폴더에서 PDF를 읽고 iframe에서 직접 렌더링하는 base64 데이터 URL로 변환합니다. 이 접근 방식은 다양한 PDF 버전과 국제 문서의 UTF-8 인코딩을 지원합니다.
구성 요소가 PDF 파일을 어떻게 로드합니까?
구성 요소는 IronPDF의 문서 로딩 기능을 사용하여 PDF 파일을 효율적으로 읽습니다. 사용자가 '파일 열기' 버튼을 클릭하면, 메서드는:
PdfDocument.FromFile를 사용하여 PDF 파일을 로드합니다- 로드된 PDF 문서에서 이진 데이터를 추출합니다
- 브라우저 호환성을 위해 Base64 형식으로 변환합니다
- 브라우저가 직접 렌더링할 수 있는 데이터 URL을 생성합니다
이 접근 방식은 PDF 디스플레이에 대해 좋은 성능을 유지하면서 다양한 브라우저 간 호환성을 보장합니다. 구성 요소는 다양한 용지 크기와 페이지 방향을 처리할 수 있습니다.
출력

JavaScript Interop을 사용하여 더 나은 PDF 디스플레이를 어떻게 만듭니까?
PDF 콘텐츠 디스플레이에 대한 더 나은 제어를 위해 JavaScript 상호 운용성을 사용하여 PDF 뷰어 기능을 처리합니다. 이 패턴은 JavaScript 모듈을 비동기로 로드하고 브라우저의 네이티브 블롭/URL API로 렌더링을 위임합니다. 이는 잘 맞는 방식을 제공합니다 Blazor의 구성 요소 생명주기:
@page "/pdf-jsinterop"
@rendermode 인터랙티브Server
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable
<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>
@if (!string.IsNullOrEmpty(ErrorMessage))
{
<div class="alert alert-danger">Error: @ErrorMessage</div>
}
<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
Loading PDF...
</div>
@code {
private string documentId = Guid.NewGuid().ToString();
private string ErrorMessage = string.Empty;
private bool pdfLoaded = false;
private IJSObjectReference? jsModule;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender && !pdfLoaded)
{
try
{
jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>(
"import", "./pdfViewerInterop.js");
await LoadPdfWithJavaScript();
pdfLoaded = true;
}
catch (Exception ex)
{
ErrorMessage = $"Failed to load JS module: {ex.Message}";
}
finally
{
StateHasChanged();
}
}
}
private async Task LoadPdfWithJavaScript()
{
if (jsModule is null) return;
var pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf");
if (!File.Exists(pdfPath))
{
ErrorMessage = $"File not found: {pdfPath}";
return;
}
var pdf = PdfDocument.FromFile(pdfPath);
await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData);
}
public async ValueTask DisposeAsync()
{
if (jsModule is not null)
await jsModule.DisposeAsync();
}
}
@page "/pdf-jsinterop"
@rendermode 인터랙티브Server
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable
<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>
@if (!string.IsNullOrEmpty(ErrorMessage))
{
<div class="alert alert-danger">Error: @ErrorMessage</div>
}
<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
Loading PDF...
</div>
@code {
private string documentId = Guid.NewGuid().ToString();
private string ErrorMessage = string.Empty;
private bool pdfLoaded = false;
private IJSObjectReference? jsModule;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender && !pdfLoaded)
{
try
{
jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>(
"import", "./pdfViewerInterop.js");
await LoadPdfWithJavaScript();
pdfLoaded = true;
}
catch (Exception ex)
{
ErrorMessage = $"Failed to load JS module: {ex.Message}";
}
finally
{
StateHasChanged();
}
}
}
private async Task LoadPdfWithJavaScript()
{
if (jsModule is null) return;
var pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf");
if (!File.Exists(pdfPath))
{
ErrorMessage = $"File not found: {pdfPath}";
return;
}
var pdf = PdfDocument.FromFile(pdfPath);
await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData);
}
public async ValueTask DisposeAsync()
{
if (jsModule is not null)
await jsModule.DisposeAsync();
}
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports IronPdf
Imports Microsoft.AspNetCore.Components
Imports Microsoft.AspNetCore.Components.Web
Imports Microsoft.JSInterop
@page "/pdf-jsinterop"
@rendermode InteractiveServer
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable
<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>
@if Not String.IsNullOrEmpty(ErrorMessage) Then
<div class="alert alert-danger">Error: @ErrorMessage</div>
End If
<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
Loading PDF...
</div>
@code {
Private documentId As String = Guid.NewGuid().ToString()
Private ErrorMessage As String = String.Empty
Private pdfLoaded As Boolean = False
Private jsModule As IJSObjectReference
Protected Overrides Async Function OnAfterRenderAsync(firstRender As Boolean) As Task
If firstRender AndAlso Not pdfLoaded Then
Try
jsModule = Await JSRuntime.InvokeAsync(Of IJSObjectReference)(
"import", "./pdfViewerInterop.js")
Await LoadPdfWithJavaScript()
pdfLoaded = True
Catch ex As Exception
ErrorMessage = $"Failed to load JS module: {ex.Message}"
Finally
StateHasChanged()
End Try
End If
End Function
Private Async Function LoadPdfWithJavaScript() As Task
If jsModule Is Nothing Then Return
Dim pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf")
If Not File.Exists(pdfPath) Then
ErrorMessage = $"File not found: {pdfPath}"
Return
End If
Dim pdf = PdfDocument.FromFile(pdfPath)
Await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData)
End Function
Public Async Function DisposeAsync() As ValueTask Implements IAsyncDisposable.DisposeAsync
If jsModule IsNot Nothing Then
Await jsModule.DisposeAsync()
End If
End Function
}
wwwroot/pdfViewerInterop.js 파일에 해당 JavaScript 함수를 추가하십시오. 이 파일은 JavaScript(아니라 C#)를 사용하여 .js 모듈로 저장됩니다:
export function displayPdf(elementId, data) {
const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const container = document.getElementById(elementId);
if (!container) return;
container.innerHTML = '';
const iframe = document.createElement('iframe');
iframe.src = url;
iframe.style.width = '100%';
iframe.style.height = '600px';
iframe.style.border = 'none';
container.appendChild(iframe);
}
export function displayPdf(elementId, data) {
const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const container = document.getElementById(elementId);
if (!container) return;
container.innerHTML = '';
const iframe = document.createElement('iframe');
iframe.src = url;
iframe.style.width = '100%';
iframe.style.height = '600px';
iframe.style.border = 'none';
container.appendChild(iframe);
}
The provided code is JavaScript, not C#. Therefore, it cannot be directly converted to VB.NET, as VB.NET is a server-side language and JavaScript is a client-side language. If you have C# code that you need converted to VB.NET, please provide that code for conversion.
이 JavaScript 함수는 PDF 데이터에서 블롭을 생성하고, 객체 URL을 생성하며, 컨테이너에 iframe을 추가합니다. 이 기술은 JavaScript 렌더링과 복잡한 문서에 대한 사용자 정의 렌더링 지연을 지원합니다.
출력

다양한 소스에서 PDF를 어떻게 로드합니까?
Blazor PDF 뷰어는 다양한 소스에서 PDF 문서를 검색하고 표시할 수 있습니다. 아래 예는 URL에서 로딩하거나 HTML 콘텐츠에서 로딩하는 방법을 보여줍니다:
private async Task LoadFromUrl(string url)
{
using var client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(30);
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var stream = await response.Content.ReadAsStreamAsync();
var pdfDocument = new PdfDocument(stream);
await DisplayPdfContent(pdfDocument);
}
private async Task LoadFromHtmlContent()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
await DisplayPdfContent(pdfDocument);
}
private Task DisplayPdfContent(PdfDocument document)
{
var data = document.BinaryData;
pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}";
return Task.CompletedTask;
}
private async Task LoadFromUrl(string url)
{
using var client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(30);
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var stream = await response.Content.ReadAsStreamAsync();
var pdfDocument = new PdfDocument(stream);
await DisplayPdfContent(pdfDocument);
}
private async Task LoadFromHtmlContent()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>";
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
await DisplayPdfContent(pdfDocument);
}
private Task DisplayPdfContent(PdfDocument document)
{
var data = document.BinaryData;
pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}";
return Task.CompletedTask;
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks
Private Async Function LoadFromUrl(url As String) As Task
Using client As New HttpClient()
client.Timeout = TimeSpan.FromSeconds(30)
Dim response = Await client.GetAsync(url)
response.EnsureSuccessStatusCode()
Dim stream = Await response.Content.ReadAsStreamAsync()
Dim pdfDocument As New PdfDocument(stream)
Await DisplayPdfContent(pdfDocument)
End Using
End Function
Private Async Function LoadFromHtmlContent() As Task
Dim renderer As New ChromePdfRenderer()
Dim htmlContent As String = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>"
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
Await DisplayPdfContent(pdfDocument)
End Function
Private Function DisplayPdfContent(document As PdfDocument) As Task
Dim data = document.BinaryData
pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}"
Return Task.CompletedTask
End Function
LoadFromUrl 메서드는 원격 위치에서 PDF 문서를 가져오고, LoadFromHtmlContent는 HTML을 PDF로 즉석에서 변환하는 방법을 보여줍니다. Chrome 렌더링 엔진은 정확한 HTML 변환을 보장합니다. 추가 소스 옵션은 Azure 블롭 스토리지, 데이터베이스 메모리 스트림 및 DOCX 문서를 포함합니다.
어떤 소스 방법이 사용 사례에 적합한가요?
| 소스 유형 | 최적의 용도 | 성능 | 보안 |
|---|---|---|---|
| 로컬 파일 | 정적 콘텐츠 | 훌륭함 | 낮음 |
| URL | 외부 문서 | 좋은 | 중간 |
| HTML 변환 | 동적 보고서 | 가변적 | 높음 |
| 블롭 스토리지 | Enterprise 앱 | 훌륭함 | 높음 |
| 메모리 스트림 | 임시 PDF | 훌륭함 | 높음 |
HTML 콘텐츠를 사용한 출력

PDF 뷰어에 인터랙티브 기능을 어떻게 추가하나요?
페이지 내비게이션, 회전, 인쇄 및 다운로드 기능으로 PDF 뷰어 확장:
@code {
private int currentPage = 1;
private int totalPages;
private byte[] pdfData = Array.Empty<byte>();
private string pdfUrl = "";
private string rotationClass = "";
private string documentId = Guid.NewGuid().ToString();
private async Task NavigateToPage(int page)
{
currentPage = page;
await JSRuntime.InvokeVoidAsync("navigateTo", page);
}
private void RotateCounterclockwise()
{
rotationClass = "rotate-270";
}
private async Task PrintPdf()
{
await JSRuntime.InvokeVoidAsync("printDocument", documentId);
}
private async Task DownloadPdf()
{
await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf");
}
}
@code {
private int currentPage = 1;
private int totalPages;
private byte[] pdfData = Array.Empty<byte>();
private string pdfUrl = "";
private string rotationClass = "";
private string documentId = Guid.NewGuid().ToString();
private async Task NavigateToPage(int page)
{
currentPage = page;
await JSRuntime.InvokeVoidAsync("navigateTo", page);
}
private void RotateCounterclockwise()
{
rotationClass = "rotate-270";
}
private async Task PrintPdf()
{
await JSRuntime.InvokeVoidAsync("printDocument", documentId);
}
private async Task DownloadPdf()
{
await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf");
}
}
Imports System
Public Class CodeBehind
Private currentPage As Integer = 1
Private totalPages As Integer
Private pdfData As Byte() = Array.Empty(Of Byte)()
Private pdfUrl As String = ""
Private rotationClass As String = ""
Private documentId As String = Guid.NewGuid().ToString()
Private Async Function NavigateToPage(page As Integer) As Task
currentPage = page
Await JSRuntime.InvokeVoidAsync("navigateTo", page)
End Function
Private Sub RotateCounterclockwise()
rotationClass = "rotate-270"
End Sub
Private Async Function PrintPdf() As Task
Await JSRuntime.InvokeVoidAsync("printDocument", documentId)
End Function
Private Async Function DownloadPdf() As Task
Await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf")
End Function
End Class
이 코드는 페이지 내비게이션, 회전, 인쇄, 다운로드 기능을 추가합니다. 네비게이션이 많은 문서에는 페이지 번호 및 책갈피 추가를 고려하세요. 고급 기능에는 텍스트 추출 및 PDF를 HTML로 변환하는 것 등이 포함될 수 있습니다.
출력

PDF 양식 및 주석은 어떻게 처리하나요?
양식 필드 및 주석이 있는 PDF 문서에 대해 IronPDF는 필드 값을 프로그래밍 방식으로 읽고 쓰는 강력한 지원을 제공합니다:
private async Task ProcessFormFields()
{
var pdfDocument = PdfDocument.FromFile("form.pdf");
foreach (var field in pdfDocument.Form.Fields)
{
if (field.Type == PdfFormFieldType.Text)
{
field.Value = "User Input";
}
}
await DisplayPdfContent(pdfDocument);
}
private async Task SaveFormData()
{
var pdfWithFormData = PdfDocument.FromFile("filled-form.pdf");
var formData = pdfWithFormData.Form.Fields
.ToDictionary(f => f.Name, f => f.Value);
var json = System.Text.Json.JsonSerializer.Serialize(formData);
await File.WriteAllTextAsync("form-data.json", json);
pdfWithFormData.Form.Flatten();
pdfWithFormData.SaveAs("form-submission.pdf");
}
private async Task ProcessFormFields()
{
var pdfDocument = PdfDocument.FromFile("form.pdf");
foreach (var field in pdfDocument.Form.Fields)
{
if (field.Type == PdfFormFieldType.Text)
{
field.Value = "User Input";
}
}
await DisplayPdfContent(pdfDocument);
}
private async Task SaveFormData()
{
var pdfWithFormData = PdfDocument.FromFile("filled-form.pdf");
var formData = pdfWithFormData.Form.Fields
.ToDictionary(f => f.Name, f => f.Value);
var json = System.Text.Json.JsonSerializer.Serialize(formData);
await File.WriteAllTextAsync("form-data.json", json);
pdfWithFormData.Form.Flatten();
pdfWithFormData.SaveAs("form-submission.pdf");
}
Imports System.IO
Imports System.Threading.Tasks
Imports System.Text.Json
Private Async Function ProcessFormFields() As Task
Dim pdfDocument = PdfDocument.FromFile("form.pdf")
For Each field In pdfDocument.Form.Fields
If field.Type = PdfFormFieldType.Text Then
field.Value = "User Input"
End If
Next
Await DisplayPdfContent(pdfDocument)
End Function
Private Async Function SaveFormData() As Task
Dim pdfWithFormData = PdfDocument.FromFile("filled-form.pdf")
Dim formData = pdfWithFormData.Form.Fields.ToDictionary(Function(f) f.Name, Function(f) f.Value)
Dim json = JsonSerializer.Serialize(formData)
Await File.WriteAllTextAsync("form-data.json", json)
pdfWithFormData.Form.Flatten()
pdfWithFormData.SaveAs("form-submission.pdf")
End Function
이는 Blazor PDF 뷰어 내에서 양식 채우기 기능을 가능하게 하며, 사용자가 브라우저에서 양식 필드와 직접 상호작용할 수 있도록 합니다. 코드는 양식 필드를 반복하여 프로그래밍 방식으로 값을 설정하며, 이는 동적 사전 채우기가 필요한 애플리케이션에 이상적입니다. IronPDF는 디지털 서명 및 텍스트 주석도 지원합니다.
지원되는 필드 유형에는 텍스트 입력, 체크박스, 라디오 버튼, 드롭다운 목록, 디지털 서명 필드, 여러 줄 텍스트 영역, 날짜 선택기가 포함됩니다.
언제 프로그래밍 대 인터랙티브 양식 채우기를 사용해야 하나요?
| 접근 방식 | 사용 시기 | 혜택 |
|---|---|---|
| 프로그래밍 방식 | 알려진 데이터 사전 충전 | 더 빠르고, 일관되며 자동화됨 |
| 인터랙티브 | 사용자 입력 필요 | 유연하고 즉각적인 검증 |
| 하이브리드 | 일부 데이터 사용 가능 | 두 가지 접근 방식의 장점 |
제출 후 변조를 방지하기 위해 양식을 평면화하는 것을 고려하세요. PDF 클렌징을 보안을 위해 사용하세요.
출력

큰 PDF의 성능을 어떻게 최적화하나요?
PDF를 표시할 때, 특히 큰 파일에 대해 좋은 성능을 보장하려면 조각화 로딩 및 메모리 관리를 사용하세요:
private async Task LoadLargePdf()
{
const int chunkSize = 1024 * 1024; // 1MB chunks
var pdfPath = "largefile.pdf";
using var fileStream = File.OpenRead(pdfPath);
var buffer = new byte[chunkSize];
var chunks = new List<byte[]>();
int bytesRead;
while ((bytesRead = await fileStream.ReadAsync(buffer)) > 0)
{
var chunk = new byte[bytesRead];
Array.Copy(buffer, chunk, bytesRead);
chunks.Add(chunk);
}
await ProcessPdfChunks(chunks);
}
private async Task LoadLargePdf()
{
const int chunkSize = 1024 * 1024; // 1MB chunks
var pdfPath = "largefile.pdf";
using var fileStream = File.OpenRead(pdfPath);
var buffer = new byte[chunkSize];
var chunks = new List<byte[]>();
int bytesRead;
while ((bytesRead = await fileStream.ReadAsync(buffer)) > 0)
{
var chunk = new byte[bytesRead];
Array.Copy(buffer, chunk, bytesRead);
chunks.Add(chunk);
}
await ProcessPdfChunks(chunks);
}
Imports System.IO
Imports System.Threading.Tasks
Private Async Function LoadLargePdf() As Task
Const chunkSize As Integer = 1024 * 1024 ' 1MB chunks
Dim pdfPath As String = "largefile.pdf"
Using fileStream As FileStream = File.OpenRead(pdfPath)
Dim buffer(chunkSize - 1) As Byte
Dim chunks As New List(Of Byte())()
Dim bytesRead As Integer
Do
bytesRead = Await fileStream.ReadAsync(buffer, 0, buffer.Length)
If bytesRead > 0 Then
Dim chunk(bytesRead - 1) As Byte
Array.Copy(buffer, chunk, bytesRead)
chunks.Add(chunk)
End If
Loop While bytesRead > 0
End Using
Await ProcessPdfChunks(chunks)
End Function
이 접근 방식은 큰 PDF 파일을 조각으로 로드하여 메모리 문제를 방지하고 성능이 뛰어난 문서에서도 매끄러운 성능을 보장합니다. 이는 특히 모바일 기기나 리소스가 제한적인 시스템에서 PDF 파일을 다룰 때 유용합니다. 추가 조정 옵션에 대한 자세한 내용은 IronPDF의 성능 가이드를 참조하세요.
추가 최적화 전략에는 빠른 웹 보기를 위한 선형화, 파일 크기를 줄이기 위한 압축, 여러 PDF를 동시에 처리하기 위한 비동기 처리가 포함됩니다. PDF Association의 모범 사례에 따르면, 선형화된(웹 최적화된) PDF는 큰 문서의 초기 로드 시간을 30--60% 줄일 수 있습니다.
어떤 파일 크기가 조각화 로딩을 필요로 합니까?
| 파일 크기 | 로딩 전략 | 메모리 영향 |
|---|---|---|
| 5 MB 미만 | 직접 로딩 | 최소화 |
| 5 -- 20 MB | 선택적 청킹 | 적당함 |
| 20 -- 50 MB | 권장 청킹 | 상당한 |
| 50 MB 이상 | 필수 청킹 | 중요한 |
서버 측 렌더링은 100 MB 이상의 PDF를 처리하거나 복잡한 주석을 구현하거나 여러 동시 사용자를 지원할 때 유용해집니다.
암호로 보호된 파일을 위한 Blazor PDF 뷰어 보안을 어떻게 확보할 수 있습니까?
암호로 보호된 PDF 파일을 다룰 때, 암호를 PdfDocument.FromFile에 직접 전달하고 적절한 HTTP 보안 헤더를 구성하십시오.
private async Task LoadSecurePdf(string password)
{
var pdfDocument = PdfDocument.FromFile("secure.pdf", password);
var headers = new Dictionary<string, string>
{
{ "X-Frame-Options", "SAMEORIGIN" },
{ "Content-보안-Policy", "default-src 'self'" },
{ "X-Content-Type-Options", "nosniff" },
{ "Referrer-Policy", "no-referrer" }
};
await DisplayPdfContent(pdfDocument);
}
private async Task LoadSecurePdf(string password)
{
var pdfDocument = PdfDocument.FromFile("secure.pdf", password);
var headers = new Dictionary<string, string>
{
{ "X-Frame-Options", "SAMEORIGIN" },
{ "Content-보안-Policy", "default-src 'self'" },
{ "X-Content-Type-Options", "nosniff" },
{ "Referrer-Policy", "no-referrer" }
};
await DisplayPdfContent(pdfDocument);
}
Private Async Function LoadSecurePdf(password As String) As Task
Dim pdfDocument = PdfDocument.FromFile("secure.pdf", password)
Dim headers = New Dictionary(Of String, String) From {
{"X-Frame-Options", "SAMEORIGIN"},
{"Content-보안-Policy", "default-src 'self'"},
{"X-Content-Type-Options", "nosniff"},
{"Referrer-Policy", "no-referrer"}
}
Await DisplayPdfContent(pdfDocument)
End Function
이 코드는 적절한 헤더 구성을 통해 보안을 유지하면서 암호로 보호된 PDF 문서를 로드하는 방법을 보여줍니다. 개선된 인증을 위해 디지털 서명을 고려하십시오. PDF 클린징을 구현하여 잠재적으로 악의적인 콘텐츠를 제거하고 민감한 정보를 수정하십시오.
비밀번호를 처리할 때, 절대 평문이나 클라이언트 측 코드에 저장하지 마십시오. 적절한 유효성 검사로 보안 입력 방법을 사용하고, 민감한 문서의 세션 타임아웃을 구현하며, 사용 후 메모리에서 비밀번호를 지우십시오. Microsoft의 ASP.NET Core 보안 지침은 사용자 제공 자격 증명을 다운스트림 API에 전달하기 전에 항상 유효성 검사 및 클린징을 수행해야 한다고 권장합니다.
클라이언트 측 대 서버 측 복호화
| 복호화 유형 | 사용 사례 | 보안 수준 |
|---|---|---|
| 클라이언트 측 | 공공 문서 | 낮음 |
| 서버 측 | 민감한 데이터 | 높음 |
| 하이브리드 | 혼합 콘텐츠 | 중간 |
최대 보안을 위해 항상 서버 측에서 복호화를 수행하고, 복호화된 콘텐츠를 클라이언트에 안전하게 스트리밍하십시오. PDF/A 준수를 구현하여 장기 보관 요구 사항을 충족하십시오.
Blazor에서 PDF를 표시하기 위한 주요 요점은 무엇입니까?
IronPDF를 사용하여 Blazor PDF 뷰어를 구현하면 개발자에게 웹 애플리케이션에서 PDF를 표시하기 위한 완전한 솔루션을 제공합니다. 기본 표시에서 양식 채우기 및 주석과 같은 고급 기능까지, IronPDF의 PDF 뷰어 구성 요소는 전문적인 애플리케이션에 필요한 기능을 제공합니다.
예시에서는 다양한 PDF 소스를 처리하고, 대화형 기능을 제공하며, 성능을 유지하는 신뢰할 수 있는 Blazor PDF 뷰어를 만드는 방법을 보여줍니다. 단순한 문서 뷰어를 구축하든 복잡한 문서 관리 시스템을 구축하든, IronPDF와 Blazor Server 앱과의 통합은 전문적인 PDF 뷰잉 기능을 구현하는 것을 간단하게 만듭니다.
주요 이점은 다음과 같습니다.
- 일관된 렌더링을 제공하는 크로스 플랫폼 호환성
- 민감한 문서를 위한 고급 보안 기능
- 비동기 및 청크 로딩을 통한 큰 파일의 성능 최적화
- 디지털 서명을 포함한 완전한 양식 처리 기능
- 기존 .NET 애플리케이션과의 매끄러운 통합
IronPDF는 Azure, AWS, Docker, 및 전통적인 Windows 환경을 지원합니다. 자신만의 뷰어를 구축할 준비가 되었나요? IronPDF의 무료 체험판으로 시작하고, 완벽한 문서 및 코드 예시를 참조하여 Blazor 애플리케이션에서 효과적인 PDF 뷰잉 경험을 만드십시오.
자주 묻는 질문
IronPDF를 사용하여 Blazor 애플리케이션에서 PDF를 표시하려면 어떻게 해야 하나요?
IronPDF는 Blazor 애플리케이션 내에서 PDF를 렌더링하고 표시할 수 있는 종합적인 API를 제공합니다. IronPDF를 통합하면 강력한 PDF 뷰어 컴포넌트를 쉽게 구현할 수 있습니다.
Blazor PDF 보기를 위해 IronPDF를 사용하는 것의 이점은 무엇인가요?
Blazor PDF 보기를 위해 IronPDF를 사용하면 폼 필드 처리, 인터랙티브 뷰어 생성, 애플리케이션 내에서 고품질 PDF를 원활하게 렌더링하는 등의 이점이 있습니다.
IronPDF를 사용하여 Blazor에서 PDF의 양식 필드를 처리할 수 있나요?
네, IronPDF는 Blazor 애플리케이션 내에서 PDF 문서의 양식 필드를 처리하고 조작할 수 있게 하여 향상된 상호작용과 사용자 참여를 제공합니다.
IronPDF를 사용하여 Blazor에서 상호작용 가능한 PDF 뷰어를 만들 수 있나요?
물론입니다. IronPDF는 Blazor에서 상호작용 가능한 PDF 뷰어를 만들기 위한 도구를 제공하여 양식 처리 및 동적 콘텐츠 표시와 같은 기능을 가능하게 합니다.
IronPDF는 Blazor에서 PDF 조작을 위해 어떤 기능을 제공하나요?
IronPDF는 PDF 렌더링, 양식 필드 처리, 텍스트 추출, 페이지 조작과 같은 기능을 제공하여 Blazor에서 PDF 작업에 유연한 선택지를 제공합니다.
IronPDF는 Blazor 애플리케이션에서 PDF 보기 경험을 어떻게 향상시키나요?
IronPDF는 Blazor 애플리케이션에서 매끄러운 렌더링, 상호작용 기능, 견고한 PDF 문서 처리를 제공하여 PDF 보기 경험을 향상시킵니다.


