Datatables .NET (개발자를 위한 작동 원리)
ASP.NET 개발자들은 종종 정렬, 검색 및 페이지 매김과 같은 고급 기능이 포함된 표 형태의 데이터를 또는 HTML 테이블을 효율적으로 표시할 방법을 찾습니다. DataTables.NET은 웹 애플리케이션에서 상호작용적이고 기능이 풍부한 테이블을 쉽게 생성할 수 있는 강력한 jQuery JavaScript 라이브러리이자 매우 유연한 도구입니다. 이 기사에서는 서버 사이드 프로세싱을 위한 테이블 향상 라이브러리인 DataTables.NET 배포 파일을 ASP.NET 프로젝트에 통합하여 표 형태의 데이터의 표현과 사용자 경험을 향상시키는 방법을 탐구할 것입니다.
ASP.NET 웹 애플리케이션에서 DataTables를 사용하는 방법은?
- ASP.NET 웹 애플리케이션 생성
- DataTables 클라이언트 사이드 스타일링 패키지 추가
- 핵심 소프트웨어만 추가하여 Entity Framework Core Install-Package
- 모델 클래스, 컨트롤러, Razor 페이지 추가
- JS 파일에 JavaScript 코드 추가
- 설정 구성
- 프로그램 빌드 및 실행
- IronXL을 사용하여 Excel 파일로 데이터 내보내기
DataTables.NET이란 무엇인가요?
DataTables.NET은 .NET 애플리케이션에서 상호작용적 테이블을 생성하고 조작할 수 있는 jQuery JavaScript 라이브러리입니다. 이는 jQuery DataTables 플러그인에 기반하며, 동적 및 정적 HTML 테이블에 대한 페이징, 정렬, 필터링 및 스크롤링 등의 포괄적인 API 기능을 제공합니다. 이것은 SQL 데이터베이스, AJAX 또는 메모리 내 객체와 같은 다양한 데이터 소스를 사용할 수 있는 테이블 향상 라이브러리입니다.
서버 사이드 프로세싱
방대한 제품 데이터 세트를 제공하는 API 엔드포인트를 보유한 시나리오를 가정해보십시오. 표준 접근 방식은 jQuery DataTables가 이 API에 AJAX 호출을 하여 JSON 형식으로 제품 목록을 얻고 HTML 테이블로 렌더링하는 것입니다. 이는 클라이언트 측 프로세싱이라고 하며, 일반적으로 100에서 1000개의 기록 사이의 작은 데이터 세트에 적합합니다. 그러나 데이터 세트가 10,000개 이상의 기록으로 확장되면 어떻게 될까요?
대량의 기록을 다룰 때 전체 데이터 세트를 한 번에 브라우저로 전송하는 것은 비현실적이게 됩니다. 한 번에 10,000개의 기록을 전송하는 것은 대역폭뿐만 아니라 브라우저 리소스에도 부담을 줍니다. 이러한 경우, 성능을 최적화하기 위해 서버 사이드 프로세싱과 같은 대안 접근 방식이 중요해집니다.
서버 사이드 프로세싱에서는 전체 데이터 세트를 보내는 대신, API가 약 50개 기록으로 구성된 페이지로 나뉜 소량의 데이터를 전송합니다. 이를 통해 로드 시간이 크게 개선되며, jQuery DataTables는 전체 데이터를 한 번에 처리하는 대신 적당한 양의 기록(~50개)을 로드합니다. 이 접근 방식은 CPU와 대역폭 사용을 줄이며 API와 DataTable 간의 상호작용을 보다 효율적으로 만듭니다.
이 기사에서는 ASP.NET Razor Page 애플리케이션에서 서버 사이드 프로세싱을 구현하는 방법을 탐구하여 확장된 데이터 세트를 효율적으로 처리하고 표시하며 웹 애플리케이션의 전체 성능을 향상시키는 방법을 시연할 것입니다.
ASP.NET 8에서 DataTables.NET 시작하기
시작하기 위해 우리의 프로젝트에 DataTables.NET 클라이언트 사이드 라이브러리를 추가해야 합니다. 이 문서에서는 .NET 8을 사용하여 ASP.NET Core 웹 앱 (Razor Pages) 프로젝트를 사용할 것입니다. 각각의 요구 사항에 따라 웹 앱 프로젝트를 사용할 수 있습니다.
클라이언트 측 라이브러리를 추가하려면 솔루션을 마우스 오른쪽으로 클릭하고 > 추가 > 클라이언트 측 라이브러리 추가를 클릭한 후 아래와 같이 데이터 테이블을 검색합니다.

이제 모델 클래스, DB 컨텍스트, 컨트롤러, HTML 테이블, AJAX 호출을 추가해야 합니다.
하지만 그 전에, 우리의 애플리케이션을 데이터베이스에 연결하기 위해 EntityFramework NuGet 패키지를 설치해야 합니다. 이 문서에서는 코드 퍼스트 접근 방식을 사용할 것이며, 필요에 따라 데이터베이스 퍼스트를 사용할 수 있습니다.
다음의 로컬 호스트 패키지를 설치하십시오:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
NuGet 패키지 관리자 콘솔에서 install-package 명령을 사용하여 위 패키지를 설치하거나, NuGet 패키지 관리자 솔루션에서 검색하여 설치하십시오.
모델 클래스 추가
이 예제에서는 제품 모델 클래스를 사용하고 있으며, 필요에 따라 사용할 수 있습니다.
public class Product
{
public int Id { get; set; }
public string ProductName { get; set; } = string.Empty;
public string ProductPrice { get; set; } = string.Empty;
public string ProductWeight { get; set; } = string.Empty;
public string ProductDescription { get; set; } = string.Empty;
public DateTime ProductManufacturingDate { get; set; }
public DateTime ProductExpiryDate { get; set; }
}
public class Product
{
public int Id { get; set; }
public string ProductName { get; set; } = string.Empty;
public string ProductPrice { get; set; } = string.Empty;
public string ProductWeight { get; set; } = string.Empty;
public string ProductDescription { get; set; } = string.Empty;
public DateTime ProductManufacturingDate { get; set; }
public DateTime ProductExpiryDate { get; set; }
}
Public Class Product
Public Property Id() As Integer
Public Property ProductName() As String = String.Empty
Public Property ProductPrice() As String = String.Empty
Public Property ProductWeight() As String = String.Empty
Public Property ProductDescription() As String = String.Empty
Public Property ProductManufacturingDate() As DateTime
Public Property ProductExpiryDate() As DateTime
End Class
ApplicationDBContext 클래스 추가
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
}
public class ApplicationDBContext : DbContext
{
public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
}
Public Class ApplicationDBContext
Inherits DbContext
Public Sub New(ByVal options As DbContextOptions(Of ApplicationDBContext))
MyBase.New(options)
End Sub
Public Property Products() As DbSet(Of Product)
End Class
고급 상호작용 제어 추가
우리는 @@wwwroot/js 폴더 안에 ProductDatatables.js를 추가하여 페이지 매김, 검색 등과 같은 고급 컨트롤을 추가할 것입니다.
// Initialize the DataTables plugin for the HTML element with 'productDatatable' ID
$(document).ready(function () {
$("#productDatatable").DataTable({
"processing": true, // Enable processing indicator
"serverSide": true, // Enable server-side processing
"ajax": {
"url": "/api/Product", // API endpoint for fetching product data
"type": "POST",
"datatype": "json"
},
"columnDefs": [{
// Define properties for columns
"targets": [0],
"visible": false, // Hide the 'Id' column
"searchable": false // Disable searching for the 'Id' column
}],
"columns": [
{ "data": "id", "name": "Id", "autoWidth": true },
{ "data": "productName", "name": "ProductName", "autoWidth": true },
{ "data": "productPrice", "name": "ProductPrice", "autoWidth": true },
{ "data": "productWeight", "name": "ProductWeight", "autoWidth": true },
{ "data": "productDescription", "name": "ProductDescription", "autoWidth": true },
{ "data": "productManufacturingDate", "name": "ProductManufacturingDate", "autoWidth": true },
{ "data": "productExpiryDate", "name": "ProductExpiryDate", "autoWidth": true },
{
// Add a 'Delete' button with an onclick event for deleting the product
"render": function (data, type, row) {
return "<a href='#' class='btn btn-danger' onclick=DeleteProduct('" + row.id + "');>Delete</a>";
}
}
]
});
});
// Initialize the DataTables plugin for the HTML element with 'productDatatable' ID
$(document).ready(function () {
$("#productDatatable").DataTable({
"processing": true, // Enable processing indicator
"serverSide": true, // Enable server-side processing
"ajax": {
"url": "/api/Product", // API endpoint for fetching product data
"type": "POST",
"datatype": "json"
},
"columnDefs": [{
// Define properties for columns
"targets": [0],
"visible": false, // Hide the 'Id' column
"searchable": false // Disable searching for the 'Id' column
}],
"columns": [
{ "data": "id", "name": "Id", "autoWidth": true },
{ "data": "productName", "name": "ProductName", "autoWidth": true },
{ "data": "productPrice", "name": "ProductPrice", "autoWidth": true },
{ "data": "productWeight", "name": "ProductWeight", "autoWidth": true },
{ "data": "productDescription", "name": "ProductDescription", "autoWidth": true },
{ "data": "productManufacturingDate", "name": "ProductManufacturingDate", "autoWidth": true },
{ "data": "productExpiryDate", "name": "ProductExpiryDate", "autoWidth": true },
{
// Add a 'Delete' button with an onclick event for deleting the product
"render": function (data, type, row) {
return "<a href='#' class='btn btn-danger' onclick=DeleteProduct('" + row.id + "');>Delete</a>";
}
}
]
});
});
이제 HTML 테이블을 추가해야 합니다.
HTML 테이블 추가
정적 HTML 페이지를 추가하기 위해 index.cshtml 파일에 다음 코드를 작성하세요.
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<link href="~/lib/datatables/css/dataTables.bootstrap4.min.css" rel="stylesheet" />
<div class="container">
<br />
<div style="width:90%; margin:0 auto;">
<table id="productDatatable" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
<thead>
<tr>
<th>Id</th>
<th>Product Name</th>
<th>Product Price</th>
<th>Product Weight</th>
<th>Product Description</th>
<th>Product Manufacturing Date</th>
<th>Product Expiry Date</th>
<th>Actions</th>
</tr>
</thead>
</table>
</div>
</div>
@section Scripts {
<script src="~/lib/datatables/js/jquery.dataTables.min.js"></script>
<script src="~/lib/datatables/js/dataTables.bootstrap4.min.js"></script>
<script src="~/js/ProductDatatable.js"></script>
}
컨트롤러를 추가해야 합니다.
제품 컨트롤러 추가
엔드포인트 생성 및 직접 풀 요청을 위해 제품 컨트롤러를 추가합니다.
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly ApplicationDBContext context;
public ProductController(ApplicationDBContext context)
{
this.context = context;
}
[HttpPost]
public IActionResult GetProducts()
{
try
{
var draw = Request.Form["draw"].FirstOrDefault();
var start = Request.Form["start"].FirstOrDefault();
var length = Request.Form["length"].FirstOrDefault();
var searchValue = Request.Form["search[value]"].FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int recordsTotal = 0;
var productData = context.Products.ToLis();
// Filtering data based on provided search value
if (!string.IsNullOrEmpty(searchValue))
{
productData = productData.Where(m => m.ProductName.Contains(searchValue)
|| m.ProductDescription.Contains(searchValue)
|| m.Id.ToString().Contains(searchValue)).ToList();
}
recordsTotal = productData.Count();
var data = productData.Skip(skip).Take(pageSize).ToList();
var jsonData = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data };
return Ok(jsonData);
}
catch (Exception)
{
throw;
}
}
}
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private readonly ApplicationDBContext context;
public ProductController(ApplicationDBContext context)
{
this.context = context;
}
[HttpPost]
public IActionResult GetProducts()
{
try
{
var draw = Request.Form["draw"].FirstOrDefault();
var start = Request.Form["start"].FirstOrDefault();
var length = Request.Form["length"].FirstOrDefault();
var searchValue = Request.Form["search[value]"].FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int recordsTotal = 0;
var productData = context.Products.ToLis();
// Filtering data based on provided search value
if (!string.IsNullOrEmpty(searchValue))
{
productData = productData.Where(m => m.ProductName.Contains(searchValue)
|| m.ProductDescription.Contains(searchValue)
|| m.Id.ToString().Contains(searchValue)).ToList();
}
recordsTotal = productData.Count();
var data = productData.Skip(skip).Take(pageSize).ToList();
var jsonData = new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data };
return Ok(jsonData);
}
catch (Exception)
{
throw;
}
}
}
<Route("api/[controller]")>
<ApiController>
Public Class ProductController
Inherits ControllerBase
Private ReadOnly context As ApplicationDBContext
Public Sub New(ByVal context As ApplicationDBContext)
Me.context = context
End Sub
<HttpPost>
Public Function GetProducts() As IActionResult
Try
Dim draw = Request.Form("draw").FirstOrDefault()
Dim start = Request.Form("start").FirstOrDefault()
Dim length = Request.Form("length").FirstOrDefault()
Dim searchValue = Request.Form("search[value]").FirstOrDefault()
Dim pageSize As Integer = If(length IsNot Nothing, Convert.ToInt32(length), 0)
Dim skip As Integer = If(start IsNot Nothing, Convert.ToInt32(start), 0)
Dim recordsTotal As Integer = 0
Dim productData = context.Products.ToLis()
' Filtering data based on provided search value
If Not String.IsNullOrEmpty(searchValue) Then
productData = productData.Where(Function(m) m.ProductName.Contains(searchValue) OrElse m.ProductDescription.Contains(searchValue) OrElse m.Id.ToString().Contains(searchValue)).ToList()
End If
recordsTotal = productData.Count()
Dim data = productData.Skip(skip).Take(pageSize).ToList()
Dim jsonData = New With {
Key .draw = draw,
Key .recordsFiltered = recordsTotal,
Key .recordsTotal = recordsTotal,
Key .data = data
}
Return Ok(jsonData)
Catch e1 As Exception
Throw
End Try
End Function
End Class
여기에서는 서버 측에서 페이지 매김 및 검색을 구현했습니다.
이제 데이터베이스를 설정하고 Program.cs 클래스에 구성을 추가해야 합니다. .NET 5 또는 하위 버전을 사용하는 경우 Startup.cs 클래스에서 수행해야 할 수도 있습니다.
먼저 appsettings.json 파일에 다음 연결 문자열을 추가합니다.
"ConnectionStrings": {
"ProductDB": "Server=localserver\\SQLEXPRESS;Database=ProductDB;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;"
}
이제 Program.cs 클래스에 다음 코드를 추가합니다.
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"));
});
builder.Services.AddControllers();
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.MapRazorPages();
app.Run();
}
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ApplicationDBContext>(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"));
});
builder.Services.AddControllers();
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.MapRazorPages();
app.Run();
}
Public Shared Sub Main(ByVal args() As String)
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddDbContext(Of ApplicationDBContext)(Sub(options)
options.UseSqlServer(builder.Configuration.GetConnectionString("ProductDB"))
End Sub)
builder.Services.AddControllers()
' Add services to the container.
builder.Services.AddRazorPages()
Dim app = builder.Build()
' Configure the HTTP request pipeline.
If Not app.Environment.IsDevelopment() Then
app.UseExceptionHandler("/Error")
' The default HSTS value is 30 days.
app.UseHsts()
End If
app.UseHttpsRedirection()
app.UseStaticFiles()
app.UseRouting()
app.UseAuthorization()
app.MapControllers()
app.MapRazorPages()
app.Run()
End Sub
코드 우선 접근 방식을 사용하므로 마이그레이션을 실행해야 합니다.
패키지 관리자 콘솔에서 다음 명령을 실행하세요.
Add-Migration init
Add-Migration init
위 명령어는 마이그레이션을 생성합니다. 이제 이 마이그레이션을 데이터베이스에 적용해야 합니다. 패키지 관리자 콘솔에서 다음 명령을 실행하세요.
Update-Database
Update-Database
위 명령어는 데이터베이스에 테이블을 생성합니다. 제품 테이블에 더미 데이터를 추가하세요; Mockaroo에서 무작위 데이터를 생성할 수 있습니다.
이제 이 애플리케이션을 빌드하고 실행하세요.
출력
고급 상호작용 제어가 있는 매우 인터랙티브한 UI를 볼 수 있습니다.

이제 아래와 같이 서버 측에서 페이지 매김이 구현되었습니다.

출력 UI
데이터는 고객 측에서 풍부한 UI 컨트롤로 렌더링됩니다.

이를 탐색하여 더 많은 내용을 DataTables.NET 문서 탐색에서 알 수 있습니다.
IronXL 소개
IronXL - .NET용 Excel 라이브러리는 .NET 애플리케이션에서 Excel 파일을 작업할 수 있도록 하는 라이브러리입니다. 엑셀 스프레드시트생성, CSV 파일읽기, 엑셀 파일편집, 다양한 형식으로 엑셀로내보내기할 수 있습니다. 마이크로소프트 오피스 또는 Excel Interop을 설치할 필요가 없습니다. .NET 8, 7, 6, 5, Core, Framework 및 Azure를 지원합니다.
종종 데이터를 엑셀 또는 CSV 파일로 내보내야 할 필요가 있습니다. 이 경우 IronXL이 가장 좋은 선택입니다. 이제 데이터를 엑셀 파일로 내보내는 코드를 작성할 것입니다.
IronXL 설치
패키지 관리자 콘솔에 다음 명령어를 입력하여 프로젝트에 IronXL 라이브러리를 설치합니다.
Install-Package IronPdf
이는 프로젝트에 IronXL 및 필요한 종속성들을 설치할 것입니다.
데이터를 엑셀로 내보내기
제품 목록을 엑셀 파일로 변환하는 코드를 작성해 봅시다.
public void ExportToExcel(List<Product> productList)
{
WorkBook wb = WorkBook.Create(ExcelFileFormat.XLSX); // Create a new workbook instance
WorkSheet ws = wb.DefaultWorkSheet; // Access the default worksheet
int rowCount = 1;
// Iterate over the product list and fill the worksheet
foreach (Product product in productList)
{
ws["A" + rowCount].Value = product.Id.ToString();
ws["B" + rowCount].Value = product.ProductName;
ws["C" + rowCount].Value = product.ProductDescription;
ws["D" + rowCount].Value = product.ProductPrice;
ws["E" + rowCount].Value = product.ProductWeight;
ws["F" + rowCount].Value = product.ProductManufacturingDate;
ws["G" + rowCount].Value = product.ProductExpiryDate;
rowCount++;
}
wb.SaveAs("product.xlsx"); // Save the workbook as an Excel file
}
public void ExportToExcel(List<Product> productList)
{
WorkBook wb = WorkBook.Create(ExcelFileFormat.XLSX); // Create a new workbook instance
WorkSheet ws = wb.DefaultWorkSheet; // Access the default worksheet
int rowCount = 1;
// Iterate over the product list and fill the worksheet
foreach (Product product in productList)
{
ws["A" + rowCount].Value = product.Id.ToString();
ws["B" + rowCount].Value = product.ProductName;
ws["C" + rowCount].Value = product.ProductDescription;
ws["D" + rowCount].Value = product.ProductPrice;
ws["E" + rowCount].Value = product.ProductWeight;
ws["F" + rowCount].Value = product.ProductManufacturingDate;
ws["G" + rowCount].Value = product.ProductExpiryDate;
rowCount++;
}
wb.SaveAs("product.xlsx"); // Save the workbook as an Excel file
}
Public Sub ExportToExcel(ByVal productList As List(Of Product))
Dim wb As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) ' Create a new workbook instance
Dim ws As WorkSheet = wb.DefaultWorkSheet ' Access the default worksheet
Dim rowCount As Integer = 1
' Iterate over the product list and fill the worksheet
For Each product As Product In productList
ws("A" & rowCount).Value = product.Id.ToString()
ws("B" & rowCount).Value = product.ProductName
ws("C" & rowCount).Value = product.ProductDescription
ws("D" & rowCount).Value = product.ProductPrice
ws("E" & rowCount).Value = product.ProductWeight
ws("F" & rowCount).Value = product.ProductManufacturingDate
ws("G" & rowCount).Value = product.ProductExpiryDate
rowCount += 1
Next product
wb.SaveAs("product.xlsx") ' Save the workbook as an Excel file
End Sub
우리는 목록에서 간단하고 쉬운 방법으로 엑셀 파일을 만들었습니다.

IronXL은 XLSX 파일을 만드는 포괄적 튜토리얼, 엑셀을 읽기 위한 코드예제, 그리고 포괄적인 API를 최대로 활용할 수 있는 API 문서를 제공합니다.
ASP.NET 성능을 최적화할 때 전적으로 Only Core Software에 의존하여 날렵하고 효율적인 개발 환경을 보장합니다. DataTables.NET을 로컬에 호스팅된 패키지로 사용하여 데이터 처리 및 엑셀 내보내기를 최적화하면서 반응성을 더욱 개선합니다. 또한 이 최적화되고 자체 포함된 생태계 내에서 효율적인 코드 기여가 원활하게 이루어집니다.
IronPDF는 웹페이지, URL 및 HTML을 PDF 문서로 변환하도록 설계된 솔루션입니다. 생성된 PDF는 원본 웹페이지의 형식 및 스타일 요소를 유지합니다. 이 도구는 보고서 및 송장 같은 웹 기반 콘텐츠의 PDF 렌더링을 만드는 데 특히 효과적입니다.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class
결론
요약하면, ASP.NET 분배 저장소 프로젝트에서 서버측 처리를 위한 DataTables.NET을 활용하는 것은 대량의 데이터셋을 효율적으로 처리하는 좋은 전략입니다. 이 접근 방식은 데이터를 관리 가능한 블록으로 전송하여 최적화된 성능을 보장하며, 대역폭 사용을 줄이고 사용자 경험을 향상시킵니다. IronXL의 통합은 애플리케이션의 기능을 확장하여 테이블 데이터를 손쉽게 Excel로 내보내 광범위한 데이터 분석 및 보고를 가능하게 합니다.
이 기술을 채택함으로써 개발자는 풍부한 상호작용성과 자원 효율성 사이의 균형을 맞춘 웹 애플리케이션을 생성할 수 있으며 특히 대량 데이터셋이 포함된 시나리오에서 사용자에게 매끄럽고 즉각적인 경험을 제공합니다. IronXL은 다양한 IronXL 라이선스 옵션을 제공하여 개발자 수, 프로젝트 수 및 재배포 요구에 따라 선택할 수 있습니다. 라이선스는 영구적이며 무료 지원 및 업데이트를 포함합니다.
자주 묻는 질문
DataTables.NET을 ASP.NET 프로젝트에 어떻게 통합합니까?
DataTables.NET을 ASP.NET 프로젝트에 통합하려면 ASP.NET 웹 애플리케이션을 생성하고, DataTables 클라이언트 측 스타일링 패키지를 추가하고, Entity Framework Core 패키지를 설치하고, 모델 클래스, 컨트롤러 및 Razor 페이지를 추가하고, 서버 측 처리용 JavaScript를 구성한 후 프로젝트를 빌드하고 실행해야 합니다.
DataTables.NET에서 서버 측 처리가 무엇입니까?
DataTables.NET에서 서버 측 처리는 데이터를 한 번에 전체 데이터 세트를 로드하는 대신 서버에서 클라이언트로 관리 가능한 청크로 전송하는 것을 포함합니다. 이는 특히 대용량 데이터 세트에서 로드 시간을 줄이고 CPU 및 대역폭 사용을 최소화하여 성능을 향상시킵니다.
DataTables.NET에서 서버 측 처리가 중요한 이유는 무엇입니까?
서버 측 처리는 대용량 데이터 세트를 처리할 때 성능을 최적화하는 데 중요합니다. 서버가 클라이언트에 필요한 데이터만 전송하도록 허용하여 브라우저의 부하를 줄이고 전체 효율성을 향상시킵니다.
ASP.NET 애플리케이션에서 표 형식 데이터를 Excel로 내보내려면 어떻게 해야 합니까?
IronXL 라이브러리를 사용하여 ASP.NET 애플리케이션에서 표 형식 데이터를 Excel로 내보낼 수 있습니다. IronXL은 Microsoft Office나 Excel Interop 없이도 데이터 목록에서 직접 Excel 파일을 생성하고 조작할 수 있게 해줍니다.
ASP.NET에서 DataTables용 클라이언트 측 라이브러리를 설정하려면 어떻게 해야 합니까?
ASP.NET에서 클라이언트 측 라이브러리를 설정하려면 Visual Studio에서 솔루션을 오른쪽 클릭하고 '추가'를 선택한 다음 '클라이언트 측 라이브러리'를 선택합니다. DataTables와 같은 원하는 라이브러리를 검색하여 추가할 수 있으며, 이는 프로젝트의 기능성을 향상시킵니다.
서버 측 처리를 위한 DataTables.NET을 구성하는 단계는 무엇입니까?
서버 측 처리를 위해 DataTables.NET을 구성하려면 모델 클래스, DB 컨텍스트, 컨트롤러 및 HTML 테이블을 설정했는지 확인해야 합니다. 또한 AJAX 호출을 하고 데이터 가져오기 및 조작을 처리하기 위해 JavaScript 파일에서 서버 측 처리 논리를 구성해야 합니다.
DataTables.NET에서 필터링과 페이지 매김은 어떻게 작동합니까?
DataTables.NET에서 필터링과 페이지 매김은 서버 측 처리를 통해 관리됩니다. 서버는 검색 기준에 따라 데이터를 필터링하고 페이지 매김을 관리하여 클라이언트에 데이터 청크를 전송하여 효율적인 데이터 처리를 보장합니다.




