Porównanie IronPDF i PSPDFKit
1. Wprowadzenie
Szukasz idealnych narzędzi do obsługi plików PDF dla platformy .NET Framework?
W tym artykułe przyjrzymy się, jak pracować z plikami PDF w języku C# (jednym z najpopularniejszych języków programowania). Omówimy dwa wiodące w branży narzędzia do obsługi plików PDF dla języka C# w środowisku .NET Framework, wykorzystując przykłady kodu do porównania ich pod kątem wydajności i funkcji. Na koniec przyjrzymy się szczegółom licencji i dowiemy się, jak uzyskać klucze licencyjne.
Dwie biblioteki PDF to:
- PDFNet
- IronPDF
2. IronPDF
IronPDF to biblioteka C# .NET opracowana przez Iron Software w celu rozwiązania wszystkich problemów związanych z plikami PDF dla programistów C# .NET przy użyciu jednej biblioteki. IronPDF jest oparty na silniku Chromium i oferuje szereg przydatnych i zaawansowanych funkcji, takich jak konwersja plików HTML5, JavaScript, CSS i obrazów do formatu PDF, tworzenie niestandardowych nagłówków i stopek oraz wyświetlanie plików PDF dokładnie tak, jak wyglądają w przeglądarce. IronPDF umożliwia odczytywanie danych z plików PDF i automatyczne wstawianie ich do aplikacji .NET oraz systemów przechowywania danych. Możesz importować, przenosić i indeksować treści ze starego magazynu dokumentów PDF do swoich aplikacji do zarządzania dokumentami i aplikacji biznesowych.
2.1. Funkcje IronPDF
2.1.1. Konwersje PDF
Ta funkcja pozwala generować pliki PDF z różnych formatów, takich jak HTML, widoki MVC, formularze internetowe, ciągi znaków HTML i adresy URL.
2.1.2. Pobieranie treści z plików PDF
W wielu przypadkach można łatwo wyodrębnić tekst osadzony w plikach PDF. Jeśli jednak to nie zadziała, najprawdopodobniej tekst jest osadzony w obrazie. Aby skanować dokumenty w poszukiwaniu tekstu wizualnego, a nie zwykłego tekstu, należy użyć biblioteki IronOCR.
2.1.3 Nagłówki i stopki
Nagłówki i stopki można dodawać podczas tworzenia plików PDF lub do istniejących plików PDF. Za pomocą właściwości Opcje drukowania można utworzyć nagłówek i stopkę dla każdej strony dokumentu. Te parametry są dostępne w obiekcie ChromePdfRenderer. Ten przykład działa w aplikacji konsolowej .NET Core.
2.1.4. Przetwarzanie obrazów w formacie PDF
Umożliwia to użytkownikom generowanie obrazów z plików PDF, a także plików PDF ze zdjęć. Obsługuje wyodrębnianie obrazów, różne rozszerzenia obrazów oraz drukowanie plików PDF.
2.1.5. Dokumenty PDF IO
IronPDF oferuje również 128-bitowe szyfrowanie plików PDF, blokowanie plików PDF za pomocą hasła oraz podpisywanie cyfrowym podpisem.
2.1.6. Edycja plików PDF
Narzędzie IronPDF pozwala dodawać do plików PDF znaki wodne, dodawać i usuwać strony, tła, elementy pierwszego planu i wiele więcej.
2.1.7. Kompatybilność
IronPDF obsługuje prawie wszystkie systemy operacyjne i frameworki kompatybilne z C#, takie jak:
- Windows
- .NET Core 2.1, 3.0, 3.1, .NET 6 & 5
- .NET Standard 2.0 zgodność dla uniwersalnej kompatybilności
- Azure
- AWS
- Docker
- Linux
3. PDFNet
PDFNet .NET SDK firmy PDFTron zapewnia precyzyjne przetwarzanie, adnotowanie, edycję i tworzenie plików PDF w dowolnym środowisku lub aplikacji w sieci, na urządzeniach mobilnych, komputerach stacjonarnych lub serwerach. Zarządza całym procesem zarządzania dokumentami i informacjami w ramach Twojej infrastruktury i eliminuje konieczność korzystania z serwerów stron trzecich. Platforma internetowa PDFTron zawiera wersję JS z obsługiwanymi platformami oraz klucz licencyjny do wersji demonstracyjnej wszystkich zestawów SDK do obsługi plików PDF.
Jedną z najważniejszych zalet PDFNet jest to, że jest to rozwiązanie prawdziwie wielopłatformowe, pozwalające naszym użytkownikom w prosty sposób dodać obsługę plików PDF i odpowiednie funkcje biznesowe do swoich procesów i aplikacji w wielu różnych środowiskach mobilnych i stacjonarnych, a wszystko to przy użyciu praktycznie tego samego interfejsu.
3.1. Funkcje PDFNet SDK
3.1.1. Kompatybilność
Pakiet PDFNet SDK jest kompatybilny z wieloma platformami i frameworkami. Aby zapewnić spójność platformy, interfejs API JavaScript jest wykorzystywany w taki sam sposób jak interfejs API PDFNet. Dostępne są również wersje SDK dla Node.js i Electron. Ten pakiet wymaga niezarządzanych plików binarnych dodatków.
3.1.2. Edycja i przeglądanie
Zapewnia użytkownikom korzystającym z platform internetowych, mobilnych i stacjonarnych bezpieczne, skalowalne i wysokiej jakości możliwości czytania i edycji plików PDF.
3.1.3. Podpisywanie
Stwórz spersonalizowane procedury podpisywania. Dokumenty podpisane cyfrowo mogą być certyfikowane, weryfikowane i pieczętowane.
3.1.4. Prawdziwa redakcja
Należy usunąć z dokumentów dane wrażliwe, takie jak dane osobowe lub informacje dotyczące zdrowia, zachowując jednocześnie możliwość przeszukiwania dokumentu.
3.1.5. Manipulowanie stroną
Strony mogą być dodawane, usuwane lub zmieniane. Dokumenty mogą być łączone, scałane lub dzielone na części. Wyświetlaj kilka dokumentów jednocześnie w tym samym czytniku lub obok siebie.
4. Tworzenie nowego projektu w Visual Studio
W tym artykułe wykorzystamy aplikację konsolową do generowania dokumentów PDF.
Otwórz oprogramowanie Visual Studio i przejdź do menu Plik. Wybierz "nowy projekt", a następnie wybierz aplikację konsolową.
Wpisz nazwę projektu i wybierz ścieżkę w odpowiednim polu tekstowym. Następnie kliknij przycisk utwórz. Wybierz wymagany framework .NET, jak na poniższym zrzucie ekranu:
Projekt Visual Studio wygeneruje teraz strukturę aplikacji konsolowej. Po zakończeniu, otworzy plik Program.cs, w którym możesz pisać i wykonywać kod źródłowy.
Teraz możemy dodać bibliotekę i przetestować program.
5. Instalacja biblioteki IronPDF
Biblioteka IronPDF może być pobrana i zainstalowana na cztery różne sposoby. Są to:
- Korzystanie z menedżera pakietów NuGet w Visual Studio
- Korzystanie z wiersza poleceń programu Visual Studio.
- Bezpośrednie pobranie z pakietu IronPDF w galerii NuGet.
- Bezpośrednie pobranie ze strony pobierania IronPDF.
5.1 Korzystanie z Menedżera Pakietów NuGet w Visual Studio
Oprogramowanie Visual Studio udostępnia opcję NuGet Package Manager, która pozwala zainstalować pakiet bezpośrednio w rozwiązaniu. Poniższy zrzut ekranu pokazuje, jak otworzyć menedżera pakietów NuGet.
Po otwarciu interfejsu graficznego menedżera pakietów kliknij kartę Przeglądaj i wyszukaj "IronPDF:".
Na powyższym obrazie możemy zobaczyć listę powiązanych pakietów z wyszukiwania. Wybierz opcję IronPDF i zainstaluj pakiet w naszym rozwiązaniu.
5.2 Korzystanie z wiersza poleceń Visual Studio
- W menu Visual Studio przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów
- Wpisz następującą linię w zakładce konsoli menedżera pakietów:
Install-Package IronPdf
Pakiet IronPDF zostanie teraz zainstalowany w projekcie.
5.3 Bezpośrednie pobranie ze strony NuGet
Trzecim sposobem jest pobranie pakietu NuGet bezpośrednio z galerii NuGet IronPDF Package.
- Wybierz opcję pakietu do pobrania z menu po prawej stronie.
- Kliknij dwukrotnie pobrany pakiet; zostanie zainstalowany automatycznie.
- Następnie przeładuj rozwiązanie i zacznij z niego korzystać w projekcie.
5.4 Bezpośrednie pobranie z strony IronPDF
Pobierz najnowszy pakiet bezpośrednio ze strony pobierania IronPDF. Po pobraniu, postępuj zgodnie z poniższymi krokami, aby dodać pakiet do projektu.
- Kliknij prawym przyciskiem myszy projekt w oknie rozwiązania.
- Następnie wybierz opcję "Odwołania" i przejdź do lokalizacji pobranego odwołania.
- Następnie kliknij OK, aby dodać odwołanie.
6. Zainstaluj pakiet PDFNet SDK
Pakiet PDFNet SDK można pobrać i zainstalować na cztery różne sposoby.
- Korzystanie z menedżera pakietów NuGet w Visual Studio.
- Korzystanie z wiersza poleceń programu Visual Studio.
- Bezpośrednie pobranie z pakietu PDFNet w galerii NuGet.
- Korzystanie z biblioteki PDFNetLoader.dll
6.1. Używając Menedżera Pakietów NuGet Visual Studio
Jak wyjaśniono powyżej, przejdź do narzędzi w Visual Studio i otwórz menedżera pakietów NuGet. Pojawi się lista — kliknij opcję zarządzania pakietem NuGet, aby uzyskać rozwiązania.
Pojawi się okno z paskiem wyszukiwania. Wyszukaj PDFNet i zainstaluj w projekcie.
6.2. Używanie linii poleceń Visual Studio
- W menu Visual Studio przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów
- Wpisz następującą linię w zakładce konsoli menedżera pakietów:
Install-Package PDFNet -Version 9.2.0
6.3. Bezpośrednie pobranie ze strony NuGet
Trzeci sposób to pobranie pakietu NuGet bezpośrednio z Galerii Pakietów PDFNet na NuGet.
- Wybierz opcję pobierania pakietu z menu po prawej stronie.
- Kliknij dwukrotnie pobrany pakiet, aby rozpocząć proces instalacji.
6.4. Korzystanie z PDFNetLoader.dll
Możesz również zainstalować API PDFNet przy użyciu pliku PDFNetLoader.dll. Pobierz go z GitHub Releases dla pliku PDFNetLoader.dll.
Pobierz pakiet, umieść go w pliku bin projektu i uruchom. W swoim projekcie Visual Studio dodaj PDFNetLoader.dll jako referencję.
Renderowanie Bootstrap i CSS Framework
Nowoczesne aplikacje webowe polegają w dużej mierze na frameworkach Bootstrap i CSS dla spójnego, responsywnego designu. Podczas generowania PDF-ów z treści webowych, zdolność do dokładnego renderowania tych frameworków bez modyfikacji jest kluczowa do utrzymania spójności designu i zmniejszenia wysiłku developerskiego.
IronPDF: Kompleksowa obsługa frameworku Bootstrap
- Bootstrap 5: Pełny system układu flexbox, siatka CSS, klasy użytkowe i wszystkie biblioteki komponentów
- Bootstrap 4: Kompleksowe komponenty kart, nawigacja, narzędzia flex i responsywny design
- Tailwind CSS: Wszystkie klasy użytkowe renderują się z dokładnością przeglądarki
- Foundation: Kompletny system siatki i wsparcie dla komponentów
- Nowoczesny CSS3: Flexbox, CSS Grid, zmienne zwyczajowe, animacje, przejścia i transformacje
Weryfikacja w świecie rzeczywistym: IronPDF renderuje stronę główną Bootstrap i wszystkie oficjalne przykłady z idealną wiernością w pikselach.
Przykład kodu: Dashboard systemu zarządzania nauką
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");
using IronPdf;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";
var renderer = new ChromePdfRenderer();
string bootstrapLMS = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapLMS);
pdf.SaveAs("lms-dashboard.pdf");
Imports IronPdf
' Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here"
Dim renderer As New ChromePdfRenderer()
Dim bootstrapLMS As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container-fluid py-4'>
<div class='d-flex justify-content-between align-items-center mb-4'>
<div>
<h1 class='display-6 mb-1'>Student Learning Dashboard</h1>
<p class='text-muted mb-0'>Spring Semester 2025</p>
</div>
<span class='badge bg-success fs-5'>92% Overall Progress</span>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-primary'>
<div class='card-body'>
<div class='text-primary mb-2' style='font-size: 2rem;'>📚</div>
<h3 class='mb-1'>6/8</h3>
<p class='text-muted mb-0'>Courses Completed</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-success'>
<div class='card-body'>
<div class='text-success mb-2' style='font-size: 2rem;'>🎯</div>
<h3 class='mb-1'>24/28</h3>
<p class='text-muted mb-0'>Assignments Submitted</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-warning'>
<div class='card-body'>
<div class='text-warning mb-2' style='font-size: 2rem;'>⏱</div>
<h3 class='mb-1'>48hrs</h3>
<p class='text-muted mb-0'>Study Time This Week</p>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card text-center shadow-sm border-info'>
<div class='card-body'>
<div class='text-info mb-2' style='font-size: 2rem;'>⭐</div>
<h3 class='mb-1'>A- Average</h3>
<p class='text-muted mb-0'>Current GPA: 3.7</p>
</div>
</div>
</div>
</div>
<div class='row g-4'>
<div class='col-md-8'>
<div class='card shadow-sm'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Current Courses</h5>
</div>
<div class='card-body p-0'>
<div class='list-group list-group-flush'>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Advanced Web Development</h6>
<small class='text-muted'>Prof. Johnson | Mondays & Wednesdays, 2:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 95%'></div>
</div>
<small class='text-muted'>95% Complete | Final Project Due: May 15</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Database Systems</h6>
<small class='text-muted'>Prof. Chen | Tuesdays & Thursdays, 10:00 AM</small>
</div>
<span class='badge bg-primary'>Grade: A-</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 88%'></div>
</div>
<small class='text-muted'>88% Complete | Midterm: April 28</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Artificial Intelligence Fundamentals</h6>
<small class='text-muted'>Prof. Martinez | Fridays, 1:00 PM</small>
</div>
<span class='badge bg-warning text-dark'>Grade: B+</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 75%'></div>
</div>
<small class='text-muted'>75% Complete | Research Paper Due: May 5</small>
</div>
<div class='list-group-item'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<div>
<h6 class='mb-1'>Computer Networks</h6>
<small class='text-muted'>Prof. Davis | Mondays & Wednesdays, 4:00 PM</small>
</div>
<span class='badge bg-success'>Grade: A</span>
</div>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 92%'></div>
</div>
<small class='text-muted'>92% Complete | Lab Exam: April 30</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-4'>
<div class='card shadow-sm mb-3'>
<div class='card-header bg-warning text-dark'>
<h5 class='mb-0'>Upcoming Deadlines</h5>
</div>
<div class='card-body p-0'>
<ul class='list-group list-group-flush'>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-danger me-2'>Today</span>
<div class='flex-grow-1'>
<small><strong>AI Assignment 4</strong></small>
<br><small class='text-muted'>Neural Networks Lab</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-warning text-dark me-2'>Apr 28</span>
<div class='flex-grow-1'>
<small><strong>Database Midterm</strong></small>
<br><small class='text-muted'>Chapters 1-8</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-info me-2'>Apr 30</span>
<div class='flex-grow-1'>
<small><strong>Networks Lab Exam</strong></small>
<br><small class='text-muted'>Practical Assessment</small>
</div>
</div>
</li>
<li class='list-group-item'>
<div class='d-flex align-items-start'>
<span class='badge bg-primary me-2'>May 5</span>
<div class='flex-grow-1'>
<small><strong>AI Research Paper</strong></small>
<br><small class='text-muted'>15-20 pages</small>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-header bg-info text-white'>
<h5 class='mb-0'>Study Resources</h5>
</div>
<div class='card-body'>
<div class='d-grid gap-2'>
<button class='btn btn-outline-primary btn-sm'>📖 Course Materials</button>
<button class='btn btn-outline-primary btn-sm'>💬 Discussion Forums</button>
<button class='btn btn-outline-primary btn-sm'>🎥 Recorded Lectures</button>
<button class='btn btn-outline-primary btn-sm'>📝 Practice Quizzes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapLMS)
pdf.SaveAs("lms-dashboard.pdf")
Wynik: Profesjonalny system zarządzania nauką PDF z systemem siatkowym Bootstrap 5, komponentami kart, paskami postępu, odznakami, układami flexbox i grupami list—all rendering with pefect spacing, typography and color accuracy.
PDFNet (Apryse): Częściowe wsparcie dla nowoczesnych CSS
PDFNet używa niestandardowego silnika renderowania HTML z selektywnym wsparciem dla CSS3:
- Ograniczona implementacja flexbox: Układy oparte na flexach w Bootstrap 4/5 mogą renderować się niespójnie
- Częściowe wsparcie siatki CSS: Projektowane na siatce często wymagają alternatyw
- Ograniczenia JavaScript: Minimalne wykonanie w porównaniu do pełnych środowisk przeglądarkowych
- Konieczne testowanie frameworku: Komponenty Bootstrap wymagają weryfikacji przed uruchomieniem
Wpływ na rozwój: Zespoły muszą testować każdy komponent Bootstrap indywidualnie i często tworzyć uproszczone układy lub alternatywne CSS dla PDFNet, dodając złożoność i zmniejszając spójność designu.
Dla kompleksowych wskazówek dotyczących frameworku Bootstrap i możliwości renderowania nowoczesnych CSS, zobacz Przewodnik po Bootstrap & Flexbox CSS.
7. Drukowanie pliku PDF (Przykłady kodu)
Drukowanie pliku PDF jest niezbędną funkcją w nowoczesnych aplikacjach zajmujących się PDF-ami. Tutaj omówimy, jak drukować pliki PDF za pomocą obu narzędzi.
7.1. Drukowanie pliku PDF za pomocą IronPDF
IronPDF drukuje PDF przez wysłanie go do domyślnej drukarki w komputerze. Otworzy się interfejs drukowania Windows—wystarczy kliknąć drukuj, aby to zrobić.
using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}
using IronPdf;
class PrintPDF
{
static void Main(string[] args)
{
// Create a new PDF and print it
var Renderer = new IronPdf.ChromePdfRenderer();
PdfDocument Pdf = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
// Send the PDF to the default printer to print
Pdf.Print(300, false);
}
}
Imports IronPdf
Friend Class PrintPDF
Shared Sub Main(ByVal args() As String)
' Create a new PDF and print it
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim Pdf As PdfDocument = Renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
' Send the PDF to the default printer to print
Pdf.Print(300, False)
End Sub
End Class
7.2. Drukowanie pliku PDF za pomocą PDFNet
PDFTron's PDFNet SDK również udostępnia funkcję drukowania. Poniżej znajduje się fragment kodu źródłowego do drukowania pliku PDF w PDFNet.
using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}
using System;
using pdftron;
using pdftron.PDF;
using pdftron.Common;
using pdftron.Filters;
namespace PDFPrintTestCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Opening the input file...");
using (PDFDoc pdfdoc = new PDFDoc("tiger.pdf"))
{
pdfdoc.InitSecurityHandler();
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...");
PrinterMode printerMode = new PrinterMode();
printerMode.SetAutoCenter(true);
printerMode.SetAutoRotate(true);
printerMode.SetCollation(true);
printerMode.SetCopyCount(1);
printerMode.SetDPI(300); // Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto);
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom);
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait);
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations);
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale);
printerMode.SetOutputPageBorder(false);
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium);
printerMode.SetPaperSize(new Rect(0, 0, 612, 792));
PageSet pagesToPrint = new PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all);
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, null);
}
}
}
}
Imports System
Imports pdftron
Imports pdftron.PDF
Imports pdftron.Common
Imports pdftron.Filters
Namespace PDFPrintTestCS
Friend Class Program
Shared Sub Main(ByVal args() As String)
Console.WriteLine("Opening the input file...")
Using pdfdoc As New PDFDoc("tiger.pdf")
pdfdoc.InitSecurityHandler()
Console.WriteLine("Printing the input file using PDF.Print.StartPrintJob...")
Dim printerMode As New PrinterMode()
printerMode.SetAutoCenter(True)
printerMode.SetAutoRotate(True)
printerMode.SetCollation(True)
printerMode.SetCopyCount(1)
printerMode.SetDPI(300) ' Set print quality to 300 DPI
printerMode.SetDuplexing(PrinterMode.DuplexMode.e_Duplex_Auto)
printerMode.SetNUp(PrinterMode.NUp.e_NUp_1_1, PrinterMode.NUpPageOrder.e_PageOrder_LeftToRightThenTopToBottom)
printerMode.SetOrientation(PrinterMode.Orientation.e_Orientation_Portrait)
printerMode.SetOutputAnnot(PrinterMode.PrintContentTypes.e_PrintContent_DocumentAndAnnotations)
printerMode.SetOutputColor(PrinterMode.OutputColor.e_OutputColor_Grayscale)
printerMode.SetOutputPageBorder(False)
printerMode.SetOutputQuality(PrinterMode.OutputQuality.e_OutputQuality_Medium)
printerMode.SetPaperSize(New Rect(0, 0, 612, 792))
Dim pagesToPrint As New PageSet(1, pdfdoc.GetPageCount(), PageSet.Filter.e_all)
Print.StartPrintJob(pdfdoc, "", pdfdoc.GetFileName(), "", pagesToPrint, printerMode, Nothing)
End Using
End Sub
End Class
End Namespace
8. Tworzenie PDF-ów z HTML
Obie biblioteki posiadają funkcje konwersji HTML na PDF, ale metody są nieco inne.
8.1. Tworzenie PDF-ów z HTML za pomocą IronPDF
IronPDF nie wymaga użycia plików JSON ani mechanizmów szyfrowania. IronPDF obsługuje szeroki zakres metod. Na przykład:
Pliki HTML na PDF
using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}
using IronPdf;
class HtmlToPdf
{
static void Main(string[] args)
{
var Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf");
}
}
Imports IronPdf
Friend Class HtmlToPdf
Shared Sub Main(ByVal args() As String)
Dim Renderer = New IronPdf.ChromePdfRenderer()
Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>").SaveAs("pixel-perfect.pdf")
End Sub
End Class
URL do pliku PDF
using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}
using IronPdf;
class UrlToPdf
{
static void Main(string[] args)
{
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
}
}
Imports IronPdf
Friend Class UrlToPdf
Shared Sub Main(ByVal args() As String)
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
End Sub
End Class
8.2. Tworzenie PDF-ów z HTML za pomocą PDFNet
PDFNet również udostępnia funkcje konwersji HTML na PDF, używając zarówno konwersji stron, jak i konwersji URL. Ze względu na długi kod, damy tutaj tylko jeden przykład.
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
class HTML2PDFSample
{
private static pdftron.PDFNetLoader pdfNetLoader = pdftron.PDFNetLoader.Instance();
static HTML2PDFSample() {}
static void Main(string[] args)
{
string output_path = "../../../../TestFiles/Output/html2pdf_example";
string host = "https://www.pdftron.com";
HTML2PDF.SetModulePath("../../../../../Lib");
if (!HTML2PDF.IsModuleAvailable())
{
Console.WriteLine();
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.");
return;
}
try
{
using (PDFDoc doc = new PDFDoc())
{
if (HTML2PDF.Convert(doc, host + "/"))
doc.Save(output_path + "_01.pdf", SDFDoc.SaveOptions.e_linearized);
else
Console.WriteLine("Conversion failed.");
}
}
catch (PDFNetException e)
{
Console.WriteLine(e.Message);
}
}
}
Friend Class HTML2PDFSample
Private Shared pdfNetLoader As pdftron.PDFNetLoader = pdftron.PDFNetLoader.Instance()
Shared Sub New()
End Sub
Shared Sub Main(ByVal args() As String)
Dim output_path As String = "../../../../TestFiles/Output/html2pdf_example"
Dim host As String = "https://www.pdftron.com"
HTML2PDF.SetModulePath("../../../../../Lib")
If Not HTML2PDF.IsModuleAvailable() Then
Console.WriteLine()
Console.WriteLine("Unable to run HTML2PDFTest: PDFTron SDK HTML2PDF module not available.")
Return
End If
Try
Using doc As New PDFDoc()
If HTML2PDF.Convert(doc, host & "/") Then
doc.Save(output_path & "_01.pdf", SDFDoc.SaveOptions.e_linearized)
Else
Console.WriteLine("Conversion failed.")
End If
End Using
Catch e As PDFNetException
Console.WriteLine(e.Message)
End Try
End Sub
End Class
9. Licencjonowanie
IronPDF to biblioteka, która oferuje darmową licencję developerską. IronPDF oferuje również specjalną strukturę cenową: pakiet light rozpoczyna się od $999 bez ukrytych kosztów. Również możliwe jest redystrybucja produktów SaaS i OEM. Wszystkie licencje obejmują 30-dniową gwarancję zwrotu pieniędzy, rok wsparcia i aktualizacji oprogramowania, ważność na etapy rozwijania/testowania/wdrażania/produkcji oraz licencję wieczystą (jednorazowy zakup). Licencje IronPDF zapewniają maksymalną wydajność dla potrzeb użytkowników. Przejdź na tę Stronę o Licencjach IronPDF aby zobaczyć całą strukturę cenową i licencje IronPDF.
PDFTron PDFNet SDK posiada kilka opcji licencjonowania dostosowanych do Twoich biznesowych potrzeb. Trzy rodzaje licencji z redystrybucją enterprise i OEM. Licencje Enterprise są tylko do użytku organizacyjnego i nie mogą być używane w dystrybucji aplikacji. Dodatkowe API wymagające dostępu do systemu plików są również zawarte w licencjach. Wszystkie licencje mają klucz licencyjny. Trzy rodzaje licencji to:
- Viewer
- Viewer & Annotation
- Core SDK
Więcej informacji o ich strukturze licencji można znaleźć na tej Stronie Informacyjnej o Licencjach PDFTron.
10. Wnioski
IronPDF oferuje wiele funkcji i zdolności do przetwarzania plików PDF i konwersji ich do różnych formatów. Konwersje z HTML do PDF są tworzone w formacie wektorowym, który jest odpowiedni do wysokiej jakości komercyjnego druku. W rezultacie otrzymasz klarowny, wysokiej jakości PDF. Informacje o licencjach i cenach można znaleźć na stronie internetowej.
Podobnie jak IronPDF, PDFNet wspomaga przejście, anotację, podpis, wypełnienie, konwersję i edycję plików PDF. Obsługuje wiele platform, w tym Windows, iOS, Android, WEB i Linux. Do użytku produkcyjnego, SDK PDFNet potrzebuje klucza produktu.
Licencje IronPDF są centryczne na deweloperze, co oznacza, że musisz uzyskać licencję w oparciu na ilość deweloperów, którzy będą używać produktu. Z drugiej strony, licencje PDFNet nie działają w ten sam sposób, działając zamiast tego na licencji opartej na funkcjach. Oznacza to, że musisz uzyskać licencję, która wspiera wymagane funkcje. Licencje IronPDF zawierają wszystkie funkcje out of the box. W przypadku PDFNet, niektóre funkcje, takie jak konwersja dokumentów, muszą być zakupione jako dodatki.
Biblioteka IronPDF oferuje funkcje w uporządkowany sposób, co sprawia, że łatwo jest pisać kod, który wykonuje duże zadania za pomocą kilku linijek. Iron Software obecnie oferuje pakiet pięciu narzędzi za cenę zaledwie dwóch. Narzędzia zawarte w Iron Suite to:
Odwiedź tę Stronę Informacyjną Iron Suite, aby Zbadać Iron Suite.
Często Zadawane Pytania
Jakie są kluczowe biblioteki PDF porównywane w artykułe?
Artykuł porównuje IronPDF, opracowany przez Iron Software, oraz PDFNet firmy PDFTron, skupiając się na ich możliwościach dla programistów C# w ramach .NET Framework.
Jak mogę przekonwertować HTML na PDF w języku C#?
Możesz użyć metody RenderHtmlAsPdf biblioteki IronPDF do konwersji ciągów HTML na pliki PDF. Dodatkowo możesz konwertować pliki HTML i adresy URL na pliki PDF przy użyciu solidnego silnika Chromium biblioteki IronPDF.
Jakie systemy operacyjne są obsługiwane przez IronPDF?
IronPDF obsługuje wiele systemów operacyjnych, w tym Windows, Azure i Docker, co pozwala na płynną integrację z różnorodnymi środowiskami programistycznymi.
W jaki sposób IronPDF radzi sobie z ekstrakcją danych z plików PDF?
IronPDF umożliwia wydajne wyodrębnianie danych z plików PDF, pozwalając programistom na łatwe pobieranie tekstu i obrazów z dokumentów PDF w celu dalszego przetwarzania.
Jakie są opcje instalacji IronPDF?
IronPDF można zainstalować za pomocą menedżera pakietów NuGet w Visual Studio, wiersza poleceń Visual Studio lub bezpośrednio z galerii NuGet, co zapewnia programistom łatwą konfigurację.
Jakie są różnice w licencjonowaniu między IronPDF a PDFNet?
IronPDF oferuje licencje przeznaczone dla programistów, które obejmują wszystkie funkcje, natomiast licencje PDFNet są oparte na funkcjach i mogą wymagać dodatkowych zakupów w celu uzyskania określonych funkcji.
Czy IronPDF nadaje się do dużych zadań związanych z plikami PDF?
Tak, IronPDF jest chwalony za łatwość obsługi i minimalne wymagania dotyczące kodu, dzięki czemu nadaje się do wydajnego wykonywania dużych zadań związanych z plikami PDF.
Jakie dodatkowe narzędzia są zawarte w Suite Iron Software?
Pakiet Iron Software obejmuje IronBarcode, IronXL, IronOCR, IronPDF i IronWebscraper, dostępne w pakiecie, co zwiększa jego atrakcyjność dla programistów.



