LiteDB .NET (Jak to dziala dla programistow)
LiteDB to prosta, szybka i lekka wbudowana baza danych dokumentów .NET. LiteDB .NET został zainspirowany bazą danych MongoDB, a jego API jest bardzo podobne do oficjalnego API MongoDB dla .NET. LiteDB to bezserwerowa baza danych, która sprawdza się w małych projektach i aplikacjach mobilnych.
W tym artykule znajdziesz dokładne instrukcje dotyczące wykorzystania możliwości LiteDB w swoich projektach. Przedstawiamy również wykorzystanie IronPDF, biblioteki .NET stworzonej przez Iron Software, do generowania i edycji plików PDF oraz sposoby jej zastosowania w celu wygenerowania zawartości bazy danych LiteDB w formacie PDF w celu przeglądania i udostępniania.
Najważniejsze cechy LiteDB
- Wbudowana baza danych: Nie ma potrzeby stosowania oddzielnego serwera. LiteDB działa w ramach procesu aplikacji.
- Pojedynczy plik danych: Możesz przechowywać wszystkie swoje dane w jednej bazie danych w postaci pliku, co upraszcza wdrażanie i tworzenie kopii zapasowych.
- Format BSON: Wykorzystuje format BSON do przechowywania danych, zapewniając szybkie operacje odczytu i zapisu.
- Obsługa LINQ: W pełni obsługuje LINQ do tworzenia zapytań, dzięki czemu jest intuicyjny dla programistów .NET.
- Transakcje ACID: Zapewnia integralność danych dzięki obsłudze transakcji ACID.
- Wieloplatformowość: Działa na systemach Windows, Linux i macOS.
Konfiguracja LiteDB w projektach .NET
Otwórz projekt w programie Visual Studio. Następnie w Solution Explorer kliknij prawym przyciskiem myszy swój projekt i wybierz "Manage NuGet Packages". Wyszukaj LiteDB i zainstaluj go, aby bez wysiłku włączyć to rozwiązanie bazodanowe do swojego projektu.
Alternatywnie można zainstalować go za pomocą konsoli menedżera pakietów. Aby zainstalować LiteDB w konsoli menedżera pakietów NuGet, użyj następującego polecenia:
Install-Package LiteDB
Pierwsze kroki z LiteDB
Po zainstalowaniu możesz zacząć używać LiteDB w swojej aplikacji. Przejdźmy przez kilka przykładów, aby zilustrować jego użycie.
Przykład 1: Tworzenie i wstawianie danych
Najpierw utwórzmy prostą klasę Product, która będzie reprezentować nasze dane:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Public Class Product
Public Property Id As Integer
Public Property Name As String
Public Property Price As Decimal
End Class
Następnie utworzymy bazę danych i dodamy do niej kilka produktów:
using LiteDB;
using System;
class Program
{
static void Main()
{
// Open the database (or create it if it doesn't exist)
using (var db = new LiteDatabase(@"MyData.db"))
{
// Get a collection (or create, if it doesn't exist)
var products = db.GetCollection<Product>("products");
// Create a list of products to insert into the database
var productList = new[]
{
new Product { Id = 201, Name = "Apple", Price = 0.99m },
new Product { Id = 202, Name = "Banana", Price = 0.59m },
new Product { Id = 203, Name = "Orange", Price = 0.79m },
new Product { Id = 204, Name = "Grape", Price = 2.99m },
new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
};
// Insert each product into the collection
foreach (var product in productList)
{
products.Insert(product);
}
Console.WriteLine("Product inserted successfully.");
}
}
}
using LiteDB;
using System;
class Program
{
static void Main()
{
// Open the database (or create it if it doesn't exist)
using (var db = new LiteDatabase(@"MyData.db"))
{
// Get a collection (or create, if it doesn't exist)
var products = db.GetCollection<Product>("products");
// Create a list of products to insert into the database
var productList = new[]
{
new Product { Id = 201, Name = "Apple", Price = 0.99m },
new Product { Id = 202, Name = "Banana", Price = 0.59m },
new Product { Id = 203, Name = "Orange", Price = 0.79m },
new Product { Id = 204, Name = "Grape", Price = 2.99m },
new Product { Id = 205, Name = "Watermelon", Price = 4.99m }
};
// Insert each product into the collection
foreach (var product in productList)
{
products.Insert(product);
}
Console.WriteLine("Product inserted successfully.");
}
}
}
Imports LiteDB
Imports System
Friend Class Program
Shared Sub Main()
' Open the database (or create it if it doesn't exist)
Using db = New LiteDatabase("MyData.db")
' Get a collection (or create, if it doesn't exist)
Dim products = db.GetCollection(Of Product)("products")
' Create a list of products to insert into the database
Dim productList = {
New Product With {
.Id = 201,
.Name = "Apple",
.Price = 0.99D
},
New Product With {
.Id = 202,
.Name = "Banana",
.Price = 0.59D
},
New Product With {
.Id = 203,
.Name = "Orange",
.Price = 0.79D
},
New Product With {
.Id = 204,
.Name = "Grape",
.Price = 2.99D
},
New Product With {
.Id = 205,
.Name = "Watermelon",
.Price = 4.99D
}
}
' Insert each product into the collection
For Each product In productList
products.Insert(product)
Next product
Console.WriteLine("Product inserted successfully.")
End Using
End Sub
End Class
Opis kodu
Kod inicjuje połączenie z bazą danych LiteDB o nazwie "MyData.db" i pobiera kolekcję o nazwie "products". Następnie tworzy tablicę obiektów Product z różnymi właściwościami, takimi jak ID, Name i Price. Każdy produkt w tablicy jest wstawiany do kolekcji "products" w bazie danych. Po pomyślnym wstawieniu wszystkich produktów wyświetla komunikat potwierdzający na konsoli.
Wynik powinien wyglądać następująco:

Przykład: Usprawnienie zarządzania danymi użytkowników
Wyobraź sobie, że tworzysz aplikację mobilną do zarządzania kontami użytkowników. Każdy użytkownik posiada profil zawierający imię i nazwisko, adres e-mail, preferencje (zapisane jako obiekt JSON) oraz listę ulubionych pozycji. Oto, w jaki sposób LiteDb.NET może uprościć przechowywanie danych:
Ten kod definiuje klasę User reprezentującą dane użytkownika oraz klasę UserManager do zarządzania operacjami użytkownika w bazie danych LiteDb.NET
using LiteDB;
using System.Collections.Generic;
public class User
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Dictionary<string, string> Preferences { get; set; }
public List<string> FavoriteItems { get; set; }
}
public class UserManager
{
private readonly LiteDatabase db;
public UserManager(string connectionString)
{
db = new LiteDatabase(connectionString);
}
public void SaveUser(User user)
{
var collection = db.GetCollection<User>("users");
collection.Insert(user);
}
public User GetUser(string userId)
{
var collection = db.GetCollection<User>("users");
return collection.FindById(userId);
}
public void UpdateUser(User user)
{
var collection = db.GetCollection<User>("users");
collection.Update(user);
}
public void DeleteUser(string userId)
{
var collection = db.GetCollection<User>("users");
collection.Delete(userId);
}
}
using LiteDB;
using System.Collections.Generic;
public class User
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Dictionary<string, string> Preferences { get; set; }
public List<string> FavoriteItems { get; set; }
}
public class UserManager
{
private readonly LiteDatabase db;
public UserManager(string connectionString)
{
db = new LiteDatabase(connectionString);
}
public void SaveUser(User user)
{
var collection = db.GetCollection<User>("users");
collection.Insert(user);
}
public User GetUser(string userId)
{
var collection = db.GetCollection<User>("users");
return collection.FindById(userId);
}
public void UpdateUser(User user)
{
var collection = db.GetCollection<User>("users");
collection.Update(user);
}
public void DeleteUser(string userId)
{
var collection = db.GetCollection<User>("users");
collection.Delete(userId);
}
}
Imports LiteDB
Imports System.Collections.Generic
Public Class User
<BsonId>
Public Property Id() As String
Public Property Name() As String
Public Property Email() As String
Public Property Preferences() As Dictionary(Of String, String)
Public Property FavoriteItems() As List(Of String)
End Class
Public Class UserManager
Private ReadOnly db As LiteDatabase
Public Sub New(ByVal connectionString As String)
db = New LiteDatabase(connectionString)
End Sub
Public Sub SaveUser(ByVal user As User)
Dim collection = db.GetCollection(Of User)("users")
collection.Insert(user)
End Sub
Public Function GetUser(ByVal userId As String) As User
Dim collection = db.GetCollection(Of User)("users")
Return collection.FindById(userId)
End Function
Public Sub UpdateUser(ByVal user As User)
Dim collection = db.GetCollection(Of User)("users")
collection.Update(user)
End Sub
Public Sub DeleteUser(ByVal userId As String)
Dim collection = db.GetCollection(Of User)("users")
collection.Delete(userId)
End Sub
End Class
To wdrożenie skutecznie wykorzystuje możliwości LiteDb.NET w zakresie zarządzania danymi użytkowników. Klasa User przechowuje informacje o użytkownikach, natomiast klasa UserManager udostępnia metody służące do zapisywania, pobierania, aktualizowania i usuwania użytkowników w bazie danych.
LiteDB, wbudowana baza danych NoSQL dla .NET
LiteDB idealnie nadaje się do małych i średnich aplikacji, które nie wymagają obsługi wielu użytkowników jednocześnie. Na przykład świetnie nadaje się do osobistej aplikacji konsolowej, w której chcesz przechowywać dane w prosty i szybki sposób. Opracowany wyłącznie w języku C#, jest lekki, zajmuje mniej niż 450 KB i nie opiera się na zewnętrznych zależnościach.
Kilka dodatkowych punktów, które są wymienione na ich stronie GitHub:
- Bezserwerowa baza danych NoSQL
- Proste API, podobne do MongoDB
- Bezpieczne dla wątków
- Napisana w całości w języku C#, biblioteka LiteDB jest kompatybilna z platformami .NET 4.5 oraz NETStandard 1.3/2.0 i spakowana w pojedynczy plik DLL zajmujący mniej niż 450 KB.
- ACID z pełną obsługą transakcji
- Odzyskiwanie danych po awarii zapisu (plik dziennika WAL)
- Szyfrowanie plików danych przy użyciu algorytmu AES
- Możesz łatwo mapować swoje klasy Plain Old CLR Objects (POCO) na BsonDocument, używając atrybutów lub płynnego interfejsu API mapującego dostarczanego przez LiteDB.
- Przechowywanie plików i przesyłanie strumieniowe danych (podobnie jak GridFS w MongoDB)
- Przechowywanie danych w jednym pliku (np. SQLite)
- Indeksowanie pól dokumentu w celu szybkiego wyszukiwania
- Obsługa zapytań LINQ
- Polecenia podobne do SQL służące do uzyskiwania dostępu do danych i ich przekształcania
- LiteDB Studio – przyjemny interfejs użytkownika do dostępu do danych
- Oprogramowanie open source i bezpłatne dla wszystkich – w tym do użytku komercyjnego
Wprowadzenie do IronPDF: biblioteka PDF dla języka C

IronPDF, czołowa biblioteka C# do obsługi plików PDF, ułatwia płynne tworzenie, edycję i manipulowanie plikami PDF w projektach .NET. Oferuje kompleksowy interfejs API do zadań takich jak konwersja HTML do PDF, dynamiczne generowanie plików PDF oraz ekstrakcja danych. Wykorzystanie silnika .NET Chromium zapewnia dokładne renderowanie HTML do plików PDF, zaspokajając różnorodne potrzeby projektów w ramach .NET Core, .NET Standard i .NET Framework. IronPDF gwarantuje precyzję, prostotę i wydajność w generowaniu plików PDF z treści HTML, obsługując aplikacje internetowe, desktopowe i konsolowe.
Instalacja biblioteki IronPDF
Aby uruchomić IronPDF w swoim projekcie, zainstaluj bibliotekę za pomocą menedżera pakietów NuGet w programie Visual Studio. Następnie wystarczy wykonać te proste kroki:
- Otwórz Visual Studio i przejdź do Eksploratora rozwiązań.
- Kliknij prawym przyciskiem myszy na "Dependencies" i wybierz opcję "Manage NuGet Packages".
- Wybierz zakładkę "Przeglądaj" i wyszukaj "IronPdf".
- Wybierz IronPDF i kliknij "Zainstaluj".
Alternatywnie, w programie Visual Studio można skorzystać z konsoli menedżera pakietów, aby zainstalować bibliotekę, wykonując następujące polecenie:
Install-Package IronPdf
Przykładowe zastosowanie IronPDF z LiteDB
Oto prosty przykład kodu ilustrujący wykorzystanie IronPDF do generowania pliku PDF z treści HTML, z użyciem instrukcji "using" w celu zapewnienia prawidłowego zwolnienia zasobów. W tym miejscu łączymy funkcjonalność LiteDB i IronPDF, pokazując, jak można wygenerować dane z LiteDB w formacie PDF w celu ich przeglądania:
using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;
class Program
{
static void Main()
{
using (var db = new LiteDatabase(@"MyData.db"))
{
// Retrieve the 'products' collection or create it
var products = db.GetCollection<Product>("products");
// Add some initial products to the collection
var productList = new[]
{
new Product { Id = 101, Name = "Apple", Price = 0.99m },
new Product { Id = 102, Name = "Banana", Price = 0.59m },
new Product { Id = 103, Name = "Orange", Price = 0.79m },
new Product { Id = 104, Name = "Grape", Price = 2.99m },
new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
};
// Insert products into the LiteDB collection
foreach (var product in productList)
{
products.Insert(product);
}
Console.WriteLine("Product inserted successfully.");
// Fetch all products from the database
var allProducts = GetAllProducts(db);
// Generate HTML content from the product list
string htmlContent = GenerateHtml(allProducts);
// Generate the PDF from the HTML content
GeneratePDF(htmlContent);
Console.WriteLine("PDF generated successfully.");
}
}
public static List<Product> GetAllProducts(LiteDatabase db)
{
var products = db.GetCollection<Product>("products");
return products.FindAll().ToList();
}
public static void GeneratePDF(string data)
{
// Set your IronPDF license key here
IronPdf.License.LicenseKey = "Your-License-Key";
Console.WriteLine("PDF Generating Started...");
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
Console.WriteLine("PDF Processing ....");
// Render the HTML as a PDF
var pdf = renderer.RenderHtmlAsPdf(data);
// Save the PDF to a file
string filePath = "Data.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
}
public static string GenerateHtml(List<Product> products)
{
// Build HTML table from product list
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
htmlBuilder.Append("<h1>Product List</h1>");
htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");
// Add each product row to the HTML table
foreach (var product in products)
{
htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
}
htmlBuilder.Append("</table></body></html>");
return htmlBuilder.ToString();
}
}
using LiteDB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPdf;
class Program
{
static void Main()
{
using (var db = new LiteDatabase(@"MyData.db"))
{
// Retrieve the 'products' collection or create it
var products = db.GetCollection<Product>("products");
// Add some initial products to the collection
var productList = new[]
{
new Product { Id = 101, Name = "Apple", Price = 0.99m },
new Product { Id = 102, Name = "Banana", Price = 0.59m },
new Product { Id = 103, Name = "Orange", Price = 0.79m },
new Product { Id = 104, Name = "Grape", Price = 2.99m },
new Product { Id = 105, Name = "Watermelon", Price = 4.99m }
};
// Insert products into the LiteDB collection
foreach (var product in productList)
{
products.Insert(product);
}
Console.WriteLine("Product inserted successfully.");
// Fetch all products from the database
var allProducts = GetAllProducts(db);
// Generate HTML content from the product list
string htmlContent = GenerateHtml(allProducts);
// Generate the PDF from the HTML content
GeneratePDF(htmlContent);
Console.WriteLine("PDF generated successfully.");
}
}
public static List<Product> GetAllProducts(LiteDatabase db)
{
var products = db.GetCollection<Product>("products");
return products.FindAll().ToList();
}
public static void GeneratePDF(string data)
{
// Set your IronPDF license key here
IronPdf.License.LicenseKey = "Your-License-Key";
Console.WriteLine("PDF Generating Started...");
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
Console.WriteLine("PDF Processing ....");
// Render the HTML as a PDF
var pdf = renderer.RenderHtmlAsPdf(data);
// Save the PDF to a file
string filePath = "Data.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}");
}
public static string GenerateHtml(List<Product> products)
{
// Build HTML table from product list
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>");
htmlBuilder.Append("<h1>Product List</h1>");
htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>");
// Add each product row to the HTML table
foreach (var product in products)
{
htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>");
}
htmlBuilder.Append("</table></body></html>");
return htmlBuilder.ToString();
}
}
Imports LiteDB
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports IronPdf
Friend Class Program
Shared Sub Main()
Using db = New LiteDatabase("MyData.db")
' Retrieve the 'products' collection or create it
Dim products = db.GetCollection(Of Product)("products")
' Add some initial products to the collection
Dim productList = {
New Product With {
.Id = 101,
.Name = "Apple",
.Price = 0.99D
},
New Product With {
.Id = 102,
.Name = "Banana",
.Price = 0.59D
},
New Product With {
.Id = 103,
.Name = "Orange",
.Price = 0.79D
},
New Product With {
.Id = 104,
.Name = "Grape",
.Price = 2.99D
},
New Product With {
.Id = 105,
.Name = "Watermelon",
.Price = 4.99D
}
}
' Insert products into the LiteDB collection
For Each product In productList
products.Insert(product)
Next product
Console.WriteLine("Product inserted successfully.")
' Fetch all products from the database
Dim allProducts = GetAllProducts(db)
' Generate HTML content from the product list
Dim htmlContent As String = GenerateHtml(allProducts)
' Generate the PDF from the HTML content
GeneratePDF(htmlContent)
Console.WriteLine("PDF generated successfully.")
End Using
End Sub
Public Shared Function GetAllProducts(ByVal db As LiteDatabase) As List(Of Product)
Dim products = db.GetCollection(Of Product)("products")
Return products.FindAll().ToList()
End Function
Public Shared Sub GeneratePDF(ByVal data As String)
' Set your IronPDF license key here
IronPdf.License.LicenseKey = "Your-License-Key"
Console.WriteLine("PDF Generating Started...")
' Create a PDF renderer
Dim renderer = New ChromePdfRenderer()
Console.WriteLine("PDF Processing ....")
' Render the HTML as a PDF
Dim pdf = renderer.RenderHtmlAsPdf(data)
' Save the PDF to a file
Dim filePath As String = "Data.pdf"
pdf.SaveAs(filePath)
Console.WriteLine($"PDF Generation Completed, File Saved as {filePath}")
End Sub
Public Shared Function GenerateHtml(ByVal products As List(Of Product)) As String
' Build HTML table from product list
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<html><head><style>table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; text-align: left; }</style></head><body>")
htmlBuilder.Append("<h1>Product List</h1>")
htmlBuilder.Append("<table><tr><th>ID</th><th>Name</th><th>Price</th></tr>")
' Add each product row to the HTML table
For Each product In products
htmlBuilder.Append($"<tr><td>{product.Id}</td><td>{product.Name}</td><td>{product.Price:C}</td></tr>")
Next product
htmlBuilder.Append("</table></body></html>")
Return htmlBuilder.ToString()
End Function
End Class
Kod łączy się z bazą danych LiteDB, dodaje listę produktów, pobiera wszystkie produkty i generuje reprezentację listy produktów w formacie HTML. Ta zawartość HTML jest następnie wykorzystywana do utworzenia pliku PDF przy użyciu biblioteki IronPDF. Proces obejmuje metody dodawania produktów, pobierania ich, konwersji listy produktów do formatu HTML oraz generowania pliku PDF.
Wynik

Wynik w formacie PDF

Wnioski
LiteDB oferuje programistom C# lekkie, bezserwerowe rozwiązanie w postaci wbudowanej bazy danych dokumentów, idealne do małych projektów i aplikacji mobilnych, wyposażone w takie funkcje, jak API inspirowane MongoDB, wbudowane bazy danych oraz kompatybilność międzyplatformowa.
Jednocześnie IronPDF staje się wiodącą biblioteką PDF dla języka C#, upraszczającą generowanie i edycję plików PDF w projektach .NET dzięki konwersji HTML na PDF oraz integracji z NuGet. Zarówno LiteDB, jak i IronPDF oferują cenne narzędzia dla programistów, przy czym LiteDB wyróżnia się w zarządzaniu bazami danych, a IronPDF w obsłudze plików PDF.
IronPDF oferuje bezpłatną wersję próbną, która pozwala w pełni wykorzystać jego potencjał w zakresie generowania i edycji plików PDF.
Często Zadawane Pytania
Jak mogę przekonwertować zawartość HTML do formatu PDF w języku C#?
Mozesz przeksztalcac zawartosc HTML do PDF w C# uzywajac IronPDF. Biblioteka oferuje metody takie jak RenderHtmlAsPdf, ktore umozliwiaja konwersje ciagow HTML w dokumenty PDF.
Jaki jest najlepszy sposob na integracje LiteDB z projektem .NET?
Aby zintegrowac LiteDB z projektem .NET, mozesz uzyc Menedzera Pakietow NuGet w Visual Studio do zainstalowania LiteDB. Pozwala to na zarzadzanie baza danych bezposrednio w twojej aplikacji za pomoca C#.
Jak mogę generować pliki PDF na podstawie danych z LiteDB?
Aby wygenerować pliki PDF z danych LiteDB, można użyć IronPDF. Wyodrębniając dane z LiteDB i renderując je przy użyciu funkcji IronPDF, można tworzyć dokumenty PDF do celów raportowania lub udostępniania.
Czy mogę używać IronPDF do edycji istniejących plików PDF w języku C#?
Tak, IronPDF może służyć do manipulowania istniejącymi plikami PDF. Zapewnia funkcje edycji, scalania i wyodrębniania treści z plików PDF w aplikacjach napisanych w języku C#.
Czy można używać LiteDB w aplikacjach mobilnych?
Tak, LiteDB nadaje się szczególnie do aplikacji mobilnych ze względu na swoją lekkość, bezserwerowy charakter oraz możliwość przechowywania danych w jednym pliku.
Jakie są typowe kroki rozwiązywania problemów związanych z integracją LiteDB?
Typowe kroki rozwiązywania problemów związanych z integracją LiteDB obejmują sprawdzenie poprawności instalacji za pomocą NuGet, upewnienie się, że ścieżka do pliku bazy danych jest dostępna, oraz potwierdzenie, że Wersja .NET projektu jest zgodna z LiteDB.
Jak mogę zapewnić integralność danych przy użyciu LiteDB?
LiteDB obsługuje transakcje ACID, które zapewniają integralność i niezawodność danych. Transakcje można wykorzystać do utrzymania spójności i obsługi równoczesnych modyfikacji danych.
Jakie są zalety korzystania z IronPDF for .NET do generowania plików PDF?
IronPDF oferuje takie korzyści, jak łatwa konwersja HTML do PDF, wysoka dokładność renderowania oraz kompleksowe funkcje manipulacji plikami PDF, co czyni go idealnym rozwiązaniem do generowania i obsługi plików PDF w aplikacjach .NET.




