Porównanie przykładów i samouczków dotyczących konwersji HTML do PDF w PDFSharp
Konwersja HTML do PDF jest kluczowym wymogiem dla wielu aplikacji .NET, od generowania faktur i raportów po tworzenie dokumentacji i e-booków. Przy wyborze między IronPDF a Spire.PDF do konwersji plików HTML na PDF niezbędne jest zrozumienie ich mocnych stron, ograniczeń i rzeczywistej wydajności. To kompleksowe porównanie analizuje możliwości obu bibliotek, pomagając w podjęciu świadomej decyzji dotyczącej wymagań związanych z generowaniem plików PDF.
Jakie są kluczowe różnice między IronPDF a Spire.PDF w zakresie konwersji HTML do PDF?
IronPDF to wszechstronna biblioteka .NET do obsługi plików PDF, zaprojektowana do wykonywania szerokiego zakresu zadań związanych z plikami PDF, w tym konwersji plików PDF, edycji plików PDF, tworzenia plików PDF, odczytu plików PDF i wielu innych. Rozwiązanie to znane jest z łatwości integracji z istniejącymi aplikacjami .NET, wysokiej wydajności oraz obsługi nowoczesnych standardów internetowych, takich jak HTML5, CSS3 i JavaScript. Silnik renderujący IronPDF oparty na przeglądarce Chrome zapewnia generowanie plików PDF o idealnej rozdzielczości na podstawie treści HTML.
Spire.PDF for .NET to kolejna potężna biblioteka .NET do obsługi plików PDF, która zapewnia kompleksowy zestaw funkcji do tworzenia i edycji plików PDF. Obsługuje różne funkcje związane z plikami PDF, takie jak wyodrębnianie tekstu i obrazów, wypełnianie formularzy PDF oraz podpisy cyfrowe. Chociaż narzędzie ma wszechstronne funkcje, jego możliwości konwersji HTML do PDF mają konkretne ograniczenia, które programiści powinni wziąć pod uwagę.
| Kategoria | Funkcja/Aspekt | IronPDF | Spire.PDF | Kluczowa zaleta |
|---|---|---|---|---|
| Podstawowa architektura | Filozofia projektowania | Prostota przede wszystkim, intuicyjne API | Podejście wieloklasowe, konfiguracja ręczna | IronPDF: Szybsze tworzenie |
| Złożoność API | Proste metody jak RenderHtmlAsPdf() |
Wymagane podejście wielowątkowe | IronPDF: prostsze API | |
| Krzywa uczenia się | Niski | Umiarkowane do wysokich | IronPDF: Szybsze przyswajanie | |
| Obsługa platform | Wielopłatformowe | Wbudowana obsługa, bez dodatkowych pakietów | Ograniczona obsługa systemów Linux/macOS | IronPDF: Prawdziwa wielopłatformowość |
| Wersje .NET | .NET 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | .NET Core 2.0+, Framework 2.0+ | Oba: Szerokie wsparcie dla frameworków | |
| Systemy operacyjne | Windows, Linux, macOS, Docker natywnie | Skupia się głównie na systemie Windows | IronPDF: Szersze wsparcie systemu operacyjnego | |
| HTML do PDF | Silnik renderujący | Pełny silnik Chrome V8 | Niestandardowy parser HTML | IronPDF: Wysoka wierność przeglądarki |
| Obsługa CSS3/HTML5 | Pełne wsparcie | Ograniczone (tylko podstawowy CSS) | IronPDF: Nowoczesne standardy internetowe | |
| Wykonanie JavaScript | Pełna obsługa JavaScript | Ograniczona obsługa JavaScript | IronPDF: Gotowość na dynamiczną treść | |
| Czcionki internetowe | Czcionki Google, czcionki systemowe | Ograniczona obsługa czcionek | IronPDF: Elastyczność typograficzna | |
| Szybkość renderowania | Nieco wolniejsze dla prostego HTML z powodu obciążenia Chrome | Szybsze dla prostego/statycznego HTML | Spire: Niższe obciążenie dla podstawowego HTML | |
| Security & Encryption | Poziomy szyfrowania | AES-256, niestandardowe procedury obsługi | Standard AES-256 | Oba: Standard branżowy |
| Prostota API | Pojedyncza klasa SecuritySettings |
Wiele metod zabezpieczeń | IronPDF: Ujednolicone podejście | |
| Manipulacja treścią | Metoda redakcji | Prawdziwe usuwanie treści, jednowierszowe API | Ręczne nakładanie prostokątów | IronPDF: Gotowość do zapewnienia zgodności |
| Znak wodny | Oparty na HTML/CSS, pełna stylizacja | Oparte na tekście z rotacją | IronPDF: Bogate znaki wodne | |
| Konwersja plików | DOCX do PDF | Wbudowany DocxToPdfRenderer |
Wymagana biblioteka Spire.Doc | IronPDF: Bez dodatkowych kosztów |
| Wskaźniki wydajności | Wykorzystanie pamięci | Wyższe (obciążenie silnika Chrome) | Niższe (prostszy silnik renderowania) | Spire: mniejsze zużycie pamięci |
| Obsługa wątków | Zoptymalizowane pod kątem natywnego async/await | Wymagany wątek STA | IronPDF: Nowoczesne wzorce asynchroniczne | |
| Doświadczenie programisty | Przykłady kodu | Ponad 100 gotowych do uruchomienia przykładów | Podstawowe przykłady | IronPDF: Rozległe zasoby |
| Komunikaty błędów | Opisowe, działające | Komunikaty techniczne | IronPDF: Lepsze debugowanie | |
| Licensing & Pricing | Poziom początkowy | Lite: $999 (1 deweloper, 1 projekt) | Deweloper: $999/rok (1 programista) | IronPDF: Licencja wieczysta |
| Licencja Team | Plus: $1,499 (3 programistów, 3 projekty) | Site Enterprise: $4,599/year | IronPDF: Większa wartość dla zespołu | |
| Opcja Suite | Iron Suite: $2,998 (10 products) | Brak opcji suite | IronPDF: Wyjątkowa wartość | |
| Wsparcie | Wsparcie techniczne w cenie | Tak, wsparcie inżynierskie 24/5 | Tylko forum (płatna pomoc techniczna dodatkowo) | IronPDF: Wsparcie w cenie |
| Kanały wsparcia | E-mail, czat, telefon, udostępnianie ekranu | Forum, e-mail (poziomy płatne) | IronPDF: Więcej kanałów | |
| Najlepsze dla | Przykłady zastosowań | Nowoczesne aplikacje webowe, złożony HTML/CSS | Proste dokumenty, podstawowe układy | Zależy od kontekstu |
Aby uzyskać szczegółowe informacje o IronPDF, odwiedź ironpdf.com.
Jak porównuje się zgodność międzyplatformowa bibliotek?
IronPDF
IronPDF wyróżnia się swoją szeroką kompatybilnością między platformami. Wspiera szeroki zakres środowisk w ramach frameworku .NET, zapewniając bezproblemowe działanie na różnych platformach. Poniżej znajduje się podsumowanie kompatybilności platform IronPDF:
- Wersje .NET:
- Całkowicie napisana i wspiera C#, VB.NET i F#
- .NET Core (8, 7, 6, 5 i 3.1+)
- .NET Standard (2.0+)
- .NET Framework (4.6.2+)
- Środowiska aplikacji: IronPDF działa w różnych środowiskach aplikacyjnych, takich jak Windows, Linux, Mac, Docker, Azure i AWS.
- IDE: Działa z IDE, takimi jak Microsoft Visual Studio i JetBrains Rider & ReSharper
- OS i Procesory: Wspiera kilka różnych systemów operacyjnych i procesorów, w tym Windows, Mac, Linux, x64, x86, ARM
Aby uzyskać więcej szczegółów na temat zgodności IronPDF, odwiedź IronPDF Features Page.
Spire.PDF
Spire.PDF ma pełne wsparcie w środowisku .NET, ale chociaż działa w systemie operacyjnym Windows, brakuje mu natywnego wsparcia dla Linuxa i macOS, jakie ma IronPDF. Podczas wdrażania na macOS lub Linux, Spire.PDF wymaga różnych pluginów dla każdej platformy, co może skomplikować scenariusze wdrożeniowe.
- Wsparcie dla .NET:
- .NET Framework 2.0+ - .NET Core 2.0+
-
Napisany w C#, z obsługą VB.NET
- Środowiska aplikacji: Spire.PDF działa w różnych środowiskach aplikacji, takich jak Windows i aplikacje ASP.NET. Może również obsługiwać Windows Forms.
Która biblioteka oferuje lepsze funkcje konwersji HTML na PDF?
Funkcje IronPDF
- Konwersja PDF: IronPDF może konwertować HTML na PDF. Dzięki pełnemu wsparciu dla nowoczesnych standardów internetowych, możesz być pewny, że IronPDF zawsze zwróci perfekcyjnie dopasowane PDF-y z Twojej zawartości HTML. IronPDF może również konwertować pliki PDF z innych formatów, takich jak DOCX, obrazy, RTF i inne.
- Generowanie PDF: Dzięki IronPDF można generować PDF-y z adresów URL, plików ASPX, czy ciągów HTML.
- Funkcje bezpieczeństwa: Dzięki IronPDF, można być pewnym, że wszelkie wrażliwe pliki PDF są bezpieczne dzięki funkcjom bezpieczeństwa. Użyj IronPDF do szyfrowania plików PDF, ustawiania haseł i uprawnień dla plików PDF.
- Funkcje edycji plików PDF: Dzięki IronPDF możesz z łatwością przetwarzać istniejące dokumenty PDF, edytować je i odczytywać pliki PDF. IronPDF oferuje funkcje edycji, takie jak dodawanie nagłówków i stopek, umieszczanie tekstu i obrazów na stronach PDF, dodawanie niestandardowych znaków wodnych do PDF, praca z formularzami PDF oraz dzielenie lub łączenie plików PDF.
- Integracja: Bezproblemowa integracja z aplikacjami ASP.NET i MVC.
- Wsparcie wersji PDF: Może obsługiwać wersje PDF 1.2-1.7
Aby uzyskać pełną listę funkcji IronPDF, odwiedź IronPDF Features.
Funkcje Spire.PDF
- Tworzenie PDF: Tworzenie PDF od podstaw lub z istniejących plików.
- Ekstrakcja tekstów i obrazów: Użyj Spire.PDF do ekstrakcji stron PDF i treści.
- Obsługa formularzy PDF: Wypełnianie i zarządzanie formularzami PDF.
- Konwersja PDF: Konwertowanie PDF do innych formatów, takich jak HTML, RTF, i obrazy.
- Manipulacja stronami: Wstawianie, usuwanie i zmiana kolejności stron w pliku PDF.
- Ograniczone wsparcie HTML: Silnik HTML do PDF ma ograniczone wsparcie dla nowoczesnych CSS i JavaScript. Domyślna ścieżka konwersji ma ograniczenia dotyczące właściwości przerwania stron CSS i rozpoznawania zewnętrznych plików CSS, a wsparcie dla wykonywania JavaScript jest ograniczone. Dostępny jest opcjonalny plugin ChromeHtmlConverter dla lepszego renderowania.
Renderowanie Bootstrap i nowoczesnych frameworków CSS
Współczesne tworzenie aplikacji webowych w dużej mierze opiera się na frameworkach CSS, takich jak Bootstrap, do szybkiego rozwoju interfejsu użytkownika i projektowania responsywnego. Biblioteki generujące PDF muszą dokładnie konwertować te frameworki, aby zachować profesjonalną jakość dokumentów i spójność projektową.
IronPDF: Pełne wsparcie Bootstrap i Tailwind
Silnik Chromium w IronPDF zapewnia pełne wsparcie dla wszystkich nowoczesnych frameworków CSS:
- Bootstrap 5: Pełne wsparcie dla flexbox i CSS Grid z wszystkimi responsywnymi komponentami
- Bootstrap 4: Kompletny układ kart, systemy nawigacji i klasy użyteczności
- Tailwind CSS: Wszystkie klasy first-first i modyfikatory responsywne
- Foundation: Kompletny system siatek i komponentów
- Nowoczesny CSS3: Flexbox, Grid, właściwości niestandardowe, animacje i przekształcenia
Potwierdzone rzeczywistymi przykładami: Strona główna Bootstrap i Szablony Bootstrap konwertują z precyzyjną dokładnością pikselową.
Przykład kodu: Karty członków zespołu z Bootstrap
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapTeam = @"
<!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 my-5'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapTeam = @"
<!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 my-5'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapTeam 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 my-5'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapTeam)
pdf.SaveAs("team-members.pdf")
Wynik: Profesjonalna strona zespołu z kartą Bootstrap, wyrównaniem flexbox, responsywnymi obrazami i komponentami przycisków – wszystko dokładnie renderowane w PDF.
Spire.PDF: Ograniczone wsparcie HTML i nowoczesnych frameworków
Silnik HTML do PDF Spire.PDF ma znaczące ograniczenia w przypadku nowoczesnych frameworków CSS, jak odnotowano w ich własnej dokumentacji:
- Ograniczone wsparcie CSS: Jedynie podstawowe CSS; ograniczone wsparcie dla zaawansowanych funkcji CSS3
- Ograniczone wsparcie dla Flexbox: Bootstrap 4/5 opierają się w dużej mierze na flexbox, który ma ograniczone wsparcie, co wpływa na dokładność układu
- Ograniczone wsparcie dla CSS Grid: Nowoczesne systemy układów używające CSS Grid mogą nie renderować się poprawnie
- Ograniczenia JavaScript: Ograniczone wykonywanie JavaScript w porównaniu do nowoczesnych przeglądarek
- Bootstrap 3 najbardziej niezawodny: Starsze wersje Bootstrap oparte na tabelach działają bardziej niezawodnie niż Bootstrap 4/5
- Złożone układy mogą wymagać obejść: Nowoczesne projekty responsywne mogą wymagać znacznych dostosowań
Zgłoszone przez programistów problemy z konwersją HTML Spire.PDF:
- Paski nawigacyjne Bootstrap renderują się z problemami układu
- Komponenty kart z flexbox nie są prawidłowo wyrównane
- Punkty przerwania siatki responsywnej są ignorowane w wyniku PDF
- Nowoczesne funkcje CSS wymagają ręcznego przepisania CSS lub obejść
Wpływ na rozwój: Aplikacje używające Bootstrap 4+ lub nowoczesnych frameworków CSS napotykają znaczne wyzwania z Spire.PDF. Zespoły programistyczne muszą:
- Utrzymywać oddzielne uproszczone CSS specjalnie dla generowania PDF (podwójne utrzymanie)
- Obniżyć do Bootstrap 3 lub całkowicie zrezygnować z frameworków (ogranicza funkcje nowoczesne)
- Intensywnie testować i ręcznie naprawiać każdy komponent (czasochłonne i kruche)
W przypadku projektów wymagających wsparcia nowoczesnych frameworków CSS, ograniczenia w renderowaniu HTML Spire.PDF sprawiają, że jest on nieodpowiedni bez znacznego dodatkowego wysiłku programistycznego i ciągłego obciążenia związane z utrzymaniem.
Aby uzyskać szczegółowe informacje na temat zgodności z Bootstrap, zobacz Przewodnik po Bootstrap i Flexbox CSS.
Jak porównują się przykłady kodu dla typowych zadań PDF?
Aby zilustrować możliwości IronPDF i Spire.PDF dla .NET, porównamy ich implementację kilku kluczowych funkcji PDF za pomocą przykładów kodu, dając Ci wyobrażenie o tym, jak te funkcje mogą pomóc w Twoich projektach PDF.
Konwersja HTML do PDF
Przykład IronPDF:
using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf
' Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = True
' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()
' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
' Advanced Example with HTML Assets
' Load external HTML assets: images, CSS, and JavaScript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
Klasa ChromePdfRenderer w IronPDF wykorzystuje pelny silnik przegladarki Chrome do renderowania zawartosci HTML. Oznacza to, że animacje CSS3, wykonywanie JavaScript oraz nowoczesne czcionki webowe renderują się dokładnie tak, jak w Chrome. Metoda RenderHtmlAsPdf() akceptuje lancuchy HTML i opcjonalne sciezki bazowe do ladowania zasobow zewnetrznych, ulatwiajac konwersje zarówno prostych, jak i zlozonych dokumentow HTML. Renderer obsługuje zaawansowane opcje renderowania w tym niestandardowe rozmiary papieru, marginesy i ustawienia opóźnienia JavaScript.
Przykład Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;
namespace ConvertHtmlStringToPdfWithoutPlugin
{
class Program
{
static void Main(string[] args)
{
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Create a PdfPageSettings object
PdfPageSettings setting = new PdfPageSettings();
// Set page size and margins through the object
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
// Create a PdfHtmlLayoutFormat object
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
// Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = true;
// Read HTML string from a .html file
string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");
// Load HTML from HTML string using LoadFromHTML method
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
// Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf");
}
}
}
using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;
namespace ConvertHtmlStringToPdfWithoutPlugin
{
class Program
{
static void Main(string[] args)
{
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Create a PdfPageSettings object
PdfPageSettings setting = new PdfPageSettings();
// Set page size and margins through the object
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
// Create a PdfHtmlLayoutFormat object
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
// Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = true;
// Read HTML string from a .html file
string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");
// Load HTML from HTML string using LoadFromHTML method
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
// Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf");
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.HtmlConverter
Imports System.IO
Imports System.Threading
Imports System.Drawing
Namespace ConvertHtmlStringToPdfWithoutPlugin
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create a PdfDocument object
Dim doc As New PdfDocument()
' Create a PdfPageSettings object
Dim setting As New PdfPageSettings()
' Set page size and margins through the object
setting.Size = New SizeF(1000, 1000)
setting.Margins = New Spire.Pdf.Graphics.PdfMargins(20)
' Create a PdfHtmlLayoutFormat object
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
' Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = True
' Read HTML string from a .html file
Dim htmlString As String = File.ReadAllText("C:\Users\Administrator\Desktop\Document\Html\Sample.html")
' Load HTML from HTML string using LoadFromHTML method
Dim thread As New Thread(Sub()
doc.LoadFromHTML(htmlString, True, setting, htmlLayoutFormat)
End Sub)
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
' Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf")
End Sub
End Class
End Namespace
Konwersja HTML na PDF w Spire.PDF wymaga utworzenia wielu obiektow, w tym PdfDocument, PdfPageSettings i PdfHtmlLayoutFormat. Konwersję należy wykonać w wątku STA (Single Thread Apartment), co dodaje złożoności do implementacji. Użytkownicy donoszą, że "Spire generuje plik PDF, który jest po prostu obrazem. Co więcej, niektóre CSS nie są poprawne, na przykład lekceważenie pogrubionych czcionek", co wskazuje na ograniczenia w wierności renderowania CSS.
IronPDF używa silnika renderującego Chrome do wysokowiernościowej konwersji HTML na PDF, zapewniając dokładną reprezentację treści webowej dzięki obsłudze nowoczesnych standardów webowych. Spire.PDF również zapewnia solidną konwersję HTML na PDF, ale może nie dorównać precyzji renderowania IronPDF, i angażuje dłuższe, bardziej manualne podejście.
Jak można zaszyfrować dokumenty PDF?
Przykład IronPDF:
using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;
// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");
// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;
// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System
' Open an Encrypted File, alternatively create a new PDF from HTML
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")
' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now
' Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
Klasa SecuritySettings w IronPDF oferuje kompleksowe API do zarzadzania zabezpieczeniami PDF. Możesz kontrolować poszczególne uprawnienia za pomocą właściwości logicznych, ustawiać różne poziomy praw drukowania i zarządzać hasłami niezależnie od innych ustawień bezpieczeństwa. Projekt API przestrzega konwencji .NET z silnie typowanymi enumeracjami, takimi jak PdfPrintSecurity. Dowiedz się więcej o uprawnieniach i hasłach PDF w dokumentacji.
Przykład Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Security;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");
// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);
// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
using Spire.Pdf;
using Spire.Pdf.Security;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");
// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);
// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
Imports Spire.Pdf
Imports Spire.Pdf.Security
' Create a PdfDocument object
Private pdf As New PdfDocument()
' Load a sample PDF file
pdf.LoadFromFile("E:\Files\sample.pdf")
' Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print Or PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit)
' Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF)
Podejscie do szyfrowania w Spire.PDF wykorzystuje metode Security.Encrypt() z flagami bitowymi dla uprawnien. Chociaż bardziej kompaktowe, to podejście wymaga zrozumienia operacji bitowych i oferuje mniej szczegółową kontrolę w porównaniu do właściwości indywidualnego uprawnienia IronPDF.
Obie biblioteki zapewniają łatwe w użyciu metody szyfrowania PDF i ustawiania możliwości ich czytania. IronPDF oferuje proste podejście, dając jednocześnie pełną kontrolę nad ustawieniami bezpieczeństwa Twojego PDF. Spire.PDF wymaga nieco krótszego procesu, ale nadal obejmuje dodatkowe opcje ustawiania uprawnień.
Jakie są opcje w zakresie anonimizacji treści PDF?
Przykład IronPDF:
using IronPdf;
// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
// Save the redacted document
pdf.SaveAs("redacted.pdf");
using IronPdf;
// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
// Save the redacted document
pdf.SaveAs("redacted.pdf");
Imports IronPdf
' Load the PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")
' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")
' Save the redacted document
pdf.SaveAs("redacted.pdf")
IronPDF zapewnia dedykowane API do anonimizacji wykonujące prawdziwe usuwanie treści, a nie tylko wizualne maskowanie. Metoda RedactTextOnAllPages() wyszukuje i trwale usuwa okreslony tekst, zapewniajac zgodnosc z przepisami o ochronie danych. Dodatkowe metody pozwalają na anonimizację na konkretnych stronach lub obszarach.
Przykład Spire.PDF dla anonimizacji poprzez nakładkę prostokątą:
Choć Spire.PDF nie ma dedykowanego narzędzia do anonimizacji, treść można nadal anonimizować za pomocą ręcznego procesu, jak pokazano poniżej:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";
// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";
// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();
// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);
// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
// Define the area to redact (e.g., coordinates and size of the rectangle)
RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size
// Apply redaction
page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}
// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";
// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";
// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();
// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);
// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
// Define the area to redact (e.g., coordinates and size of the rectangle)
RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size
// Apply redaction
page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}
// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Specify the input PDF file path
Private inputPdfFilePath As String = "path/to/your/input.pdf"
' Specify the output redacted PDF file path
Private outputPdfFilePath As String = "path/to/your/redacted_output.pdf"
' Create a new PdfDocument object
Private pdfDocument As New PdfDocument()
' Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath)
' Redact content on each page
For Each page As PdfPageBase In pdfDocument.Pages
' Define the area to redact (e.g., coordinates and size of the rectangle)
Dim redactArea As New RectangleF(100, 100, 200, 50) ' Example coordinates and size
' Apply redaction
page.Canvas.DrawRectangle(New PdfSolidBrush(Color.Black), redactArea)
Next page
' Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath)
To ręczne podejście wymaga obliczania dokładnych współrzędnych dla każdego obszaru anonimizacji i zapewnia jedynie wizualne maskowanie, a nie prawdziwe usuwanie treści. Podstawowy tekst może nadal być możliwy do wyodrębnienia za pomocą narzędzi edycji PDF.
IronPDF upraszcza anonimizację swoim solidnym, a jednocześnie prostym w obsłudze narzędziem do anonimizacji. Spire.PDF wymaga więcej manualnej obsługi w zakresie anonimizacji z powodu braku wbudowanego narzędzia do anonimizacji, co skutkuje potencjalnie mniej efektywnymi przepływami pracy.
Jak podpisać dokumenty PDF?
Przykład IronPDF:
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature with certificate
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature with certificate
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
' Instantiate the renderer
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")
' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create PdfSignature with certificate
Private sig = New PdfSignature(cert)
' Sign PDF document
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
Wdrożenie podpisu cyfrowego IronPDF podąża za wzorcami obsługi certyfikatów .NET. Klasa PdfSignature akceptuje standardowe obiekty X509Certificate2 i wewnetrznie zarzadza zlozonoscia podpisu PDF. Można również dodać wizualne wyglądy podpisu i konfigurować pola podpisu.
Przykład Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");
// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;
// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;
// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;
// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");
// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));
// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;
// Save to file
doc.SaveToFile("VisiableSignature.pdf");
using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");
// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;
// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;
// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;
// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");
// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));
// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;
// Save to file
doc.SaveToFile("VisiableSignature.pdf");
Imports Spire.Pdf
Imports Spire.Pdf.Security
Imports System.Drawing
' Create a PdfDocument object
Private doc As New PdfDocument()
' Load a sample PDF file
doc.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
' Load the certificate
Dim cert As New PdfCertificate("C:\Users\Administrator\Desktop\MyCertificate.pfx", "e-iceblue")
' Create a PdfSignature object and specify its position and size
Dim signature As New PdfSignature(doc, doc.Pages(doc.Pages.Count - 1), cert, "MySignature")
Dim rectangleF As New RectangleF(doc.Pages(0).ActualSize.Width - 260 - 54, 200, 260, 110)
signature.Bounds = rectangleF
signature.Certificated = True
' Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail
' Set various details about the signature
signature.NameLabel = "Signer:"
signature.Name = "Gary"
signature.ContactInfoLabel = "Phone:"
signature.ContactInfo = "0123456"
signature.DateLabel = "Date:"
signature.Date = DateTime.Now
signature.LocationInfoLabel = "Location:"
signature.LocationInfo = "USA"
signature.ReasonLabel = "Reason:"
signature.Reason = "I am the author"
signature.DistinguishedNameLabel = "DN:"
signature.DistinguishedName = signature.Certificate.IssuerName.Name
' Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\Users\Administrator\Desktop\handwrittingSignature.png")
' Set the signature font
signature.SignDetailsFont = New PdfTrueTypeFont(New Font("Arial Unicode MS", 12F, FontStyle.Regular))
' Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges Or PdfCertificationFlags.AllowFormFill
' Save to file
doc.SaveToFile("VisiableSignature.pdf")
Spire.PDF zapewnia szerokie możliwości kontroli nad wyglądem podpisu, ale wymaga znacznie większej ilości kodu. Każdą etykietę należy ustawić ręcznie, precyzyjnie pozycjonować podpis i osobno konfigurować elementy wizualne.
Cyfrowe podpisywanie plików PDF może być pomocne w różnych sytuacjach, od uwierzytelniania dokumentów PDF po zwykłe zatwierdzanie nowego projektu. IronPDF oferuje proste podejście do dodawania podpisów cyfrowych, umożliwiając łatwą automatyzację procesu podpisywania. Spire.PDF obsługuje również podpisy cyfrowe w plikach PDF; jednak proces ten może być bardziej ręczny i wymagać większego wysiłku przy wdrażaniu.
Jakie metody znakowania wodnego plików PDF są dostępne?
Przykład IronPDF:
using IronPdf;
// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;
// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf
' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
Funkcja znakowania wodnego IronPDF akceptuje treści HTML, co pozwala na użycie CSS do stylizacji. Metoda ApplyWatermark() oferuje parametry dla kata obrotu i wyrównania, ulatwiajac precyzyjne umiejscowienie znakow wodnych. Dowiedz się więcej o niestandardowych znakach wodnych i zaawansowanych opcjach stylizacji.
Przykład Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);
// Set the watermark text
string text = "CONFIDENTIAL";
// Measure the text size
SizeF textSize = font.MeasureString(text);
// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
// Set the page transparency
page.Canvas.SetTransparency(0.8f);
// Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
// Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45);
// Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}
// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);
// Set the watermark text
string text = "CONFIDENTIAL";
// Measure the text size
SizeF textSize = font.MeasureString(text);
// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
// Set the page transparency
page.Canvas.SetTransparency(0.8f);
// Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
// Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45);
// Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}
// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Create a PdfDocument object
Private pdf As New PdfDocument()
' Load a sample PDF document
pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
' Create a PdfTrueTypeFont object
Dim font As New PdfTrueTypeFont(New Font("Arial", 50F), True)
' Set the watermark text
Dim text As String = "CONFIDENTIAL"
' Measure the text size
Dim textSize As SizeF = font.MeasureString(text)
' Calculate the values of two offset variables,
' which will be used to calculate the translation amount of the coordinate system
Dim offset1 As Single = CSng(textSize.Width * Math.Sqrt(2) / 4)
Dim offset2 As Single = CSng(textSize.Height * Math.Sqrt(2) / 4)
' Traverse all the pages in the document
For Each page As PdfPageBase In pdf.Pages
' Set the page transparency
page.Canvas.SetTransparency(0.8F)
' Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width \ 2 - offset1 - offset2, page.Canvas.Size.Height \ 2 + offset1 - offset2)
' Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45)
' Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
Next page
' Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf")
Znak wodny w Spire.PDF wymaga ręcznego obliczenia położenia i obrotu przy użyciu transformacji układu współrzędnych. Chociaż zapewnia to precyzyjną kontrolę, wymaga zrozumienia koncepcji programowania graficznego.
IronPDF zapewnia łatwy sposób dodawania tekstowych znaków wodnych, dając jednocześnie pełną kontrolę nad położeniem i wyglądem znaku wodnego. Wykorzystanie HTML i CSS przez IronPDF ułatwia ten proces, jeśli masz doświadczenie w pracy z tymi językami. Podejście Spire.PDF jest bardziej czasochłonne i wymaga większego nakładu pracy ręcznej, ale nadal zapewnia solidne narzędzie do tworzenia znaków wodnych z pełną kontrolą nad projektem i położeniem.
Jak można umieszczać obrazy i tekst na plikach PDF?
Przykład IronPDF:
using IronPdf;
using IronPdf.Editing;
// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");
// Create text stamper
TextStamper textStamper = new TextStamper()
{
Text = "Text Stamper!",
FontFamily = "Bungee Spice",
UseGoogleFont = true,
FontSize = 30,
IsBold = true,
IsItalic = true,
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");
// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;
// Instantiate Renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");
// Create text stamper
TextStamper textStamper = new TextStamper()
{
Text = "Text Stamper!",
FontFamily = "Bungee Spice",
UseGoogleFont = true,
FontSize = 30,
IsBold = true,
IsItalic = true,
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");
// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
VerticalAlignment = VerticalAlignment.Top,
};
// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing
' Instantiate Renderer
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")
' Create text stamper
Private textStamper As New TextStamper() With {
.Text = "Text Stamper!",
.FontFamily = "Bungee Spice",
.UseGoogleFont = True,
.FontSize = 30,
.IsBold = True,
.IsItalic = True,
.VerticalAlignment = VerticalAlignment.Top
}
' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")
' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}
' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
API stemplowania w IronPDF wykorzystuje dedykowane klasy do roznych typow stempli. TextStamper wspiera czcionki Google bezposrednio poprzez wlasciwosc UseGoogleFont, podczas gdy ImageStamper moze ladowac obrazy z URL lub lokalnych plikow. Oba stemple mają wspólne właściwości wyrównania, co zapewnia spójne pozycjonowanie. Poznaj więcej opcji stemplowania, w tym stemple HTML i integrację BarCode.
Spire.PDF (przykład stemplowania tekstu):
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();
// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);
// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);
// Restore graphics to previous state
page.Canvas.Restore(state);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();
// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);
// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);
// Restore graphics to previous state
page.Canvas.Restore(state);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Assumes a PdfDocument is already loaded as `doc` object
Private page As PdfPageBase = doc.Pages(0)
Private state As PdfGraphicsState = page.Canvas.Save()
' Define font and brushes for different effects
Private font As New PdfFont(PdfFontFamily.Helvetica, 18F)
Private brush1 As New PdfSolidBrush(Color.DeepSkyBlue)
Private brush2 As New PdfSolidBrush(Color.CadetBlue)
' Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200)
page.Canvas.ScaleTransform(1F, 0.6F)
page.Canvas.SkewTransform(-10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0)
page.Canvas.SkewTransform(10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0)
page.Canvas.ScaleTransform(1F, -1F)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18)
' Restore graphics to previous state
page.Canvas.Restore(state)
Spire.PDF wymaga bezpośredniej manipulacji obszarem roboczym z ręcznymi transformacjami dla każdego efektu. Tworzenie złożonych stempli wymaga zrozumienia zarządzania stanem grafiki i transformacji współrzędnych.
Narzędzie do stemplowania tekstu i obrazów IronPDF to potężne, łatwe w użyciu narzędzie do stemplowania, które działa na zasadzie podobnej do HTML i CSS podczas stosowania stemplowanej treści. Chociaż Spire.PDF oferuje również podstawowe narzędzie do stemplowania tekstu, zastosowanie stemplowanego tekstu w plikach PDF wymaga większego wysiłku.
Która biblioteka lepiej radzi sobie z konwersją plików DOCX do PDF?
Przykład IronPDF:
using IronPdf;
// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();
// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");
// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;
// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();
// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");
// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf
' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()
' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")
' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
IronPDF zawiera dedykowana klase DocxToPdfRenderer, ktora obsluguje konwersje DOCX natywnie. API jest spójne z innymi klasami renderowania w IronPDF, wymagając zaledwie dwóch wierszy kodu do podstawowej konwersji. Zaawansowane opcje konfiguracji strony i formatowania są dostępne w oknie właściwości renderera. Dowiedz się więcej o funkcjach konwersji plików DOCX do formatu PDF.
Spire.PDF Korzystanie z Spire.Doc do konwersji plików DOCX na PDF:
Sam program Spire.PDF nie może konwertować plików DOCX do formatu PDF; można jednak użyć biblioteki Spire.Doc do przeprowadzenia tej konwersji, a następnie skorzystać z biblioteki Spire.PDF do pracy z uzyskanym plikiem PDF.
using Spire.Doc;
// Create a Document object
Document doc = new Document();
// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");
// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);
// Dispose of resources
doc.Dispose();
using Spire.Doc;
// Create a Document object
Document doc = new Document();
// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");
// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);
// Dispose of resources
doc.Dispose();
Imports Spire.Doc
' Create a Document object
Private doc As New Document()
' Load a Word document
doc.LoadFromFile("C:\Users\Administrator\Desktop\Sample.docx")
' Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF)
' Dispose of resources
doc.Dispose()
Takie podejście wymaga zakupu i zarządzania dodatkową biblioteką (Spire.Doc), co zwiększa zarówno koszty, jak i złożoność.
IronPDF oferuje wbudowaną obsługę bezpośredniej konwersji plików DOCX do formatu PDF, co oznacza, że oszczędzasz czas, nie potrzebując dodatkowych bibliotek do wykonania tego zadania. Z drugiej strony Spire.PDF nie obsługuje bezpośrednio konwersji plików DOCX do formatu PDF, co wymaga użycia biblioteki Spire.Doc do konwersji plików DOCX do formatu PDF.
Co pokazują wskaźniki wydajności?
Na podstawie testów i opinii użytkowników oto jak biblioteki wypadają w praktyce:
Wydajność renderowania
W przypadku podstawowych układów Spire.PDF jest zoptymalizowany pod kątem prostych treści, takich jak statyczne tabele lub tekst o podstawowym stylowaniu, dzięki czemu działa szybko i wydajnie w tych zastosowaniach. Jednak w przypadku złożonego kodu HTML zawierającego nowoczesne funkcje CSS3, JavaScript lub responsywne układy, silnik IronPDF oparty na przeglądarce Chrome zapewnia dokładniejsze wyniki kosztem nieco dłuższego czasu renderowania.
Wykorzystanie pamięci
Spire.PDF zazwyczaj zużywa mniej pamięci w porównaniu do IronPDF dzięki swojemu prostszemu silnikowi renderującemu. Jednak to odbywa się kosztem wierności renderowania i wsparcia funkcji. W przypadku aplikacji, w których pamięć ma kluczowe znaczenie, a złożoność kodu HTML jest minimalna, korzystnym rozwiązaniem może być Spire.PDF.
Obsługa wątków i asynchroniczności
IronPDF zapewnia natywne wsparcie dla async/await z metodami takimi jak RenderHtmlAsPdfAsync(), sprawiajac, ze jest odpowiedni dla nowoczesnych aplikacji .NET. Spire.PDF wymaga ręcznego zarządzania wątkami za pomocą wątków STA, co zwiększa złożoność aplikacji wielowątkowych.
Jak wypadają modele cenowe i licencyjne w porównaniu?
Ceny i licencje IronPDF
IronPDF oferuje różne poziomy i dodatkowe funkcje w ramach zakupu licencji. Programiści mogą również kupić pakiet Iron Suite, który zapewnia dostęp do wszystkich produktów Iron Software w cenie dwóch. Jeśli nie jesteś gotowy na zakup licencji, IronPDF oferuje darmowy okres próbny trwający 30 dni.
Cennik:
- Licencje wieczyste: Oferuje szeroką gamę licencji wieczystych w zależności od wielkości zespołu, potrzeb projektu i liczby lokalizacji. Każdy typ licencji zawiera wsparcie e-mailowe.
- Lite License: Ta licencja kosztuje $999 i wspiera jednego dewelopera, jedna lokalizacje i jeden projekt.
- Plus License: Wspiera trzech deweloperow, trzy lokalizacje i trzy projekty, to nastepny krok po lite license i kosztuje $1,499. Licencja Plus oferuje wsparcie na czacie i wsparcie telefoniczne oprócz podstawowego wsparcia e-mailowego.
- Professional License: Ta licencja jest odpowiednia dla wiekszych zespolow, wspiera dziesieciu deweloperow, dziesiec lokalizacji i dziesiec projektow za $2,999. Oferuje te same kanały wsparcia, co poprzednie poziomy, ale również oferuje wsparcie przy udostępnianiu ekranu.
- Redystrybucja bez oplat licencyjnych: Licencjonowanie IronPDF oferuje równiez mozliwosc redystrybucji bez oplat licencyjnych za dodatkowe $2,999
- Nieprzerwane wsparcie produktu: IronPDF oferuje dostęp do bieżących aktualizacji produktu, aktualizacji funkcji zabezpieczeń i wsparcia ze strony zespołu inżynieryjnego za $999/rok lub jednorazowy zakup $1,999 za 5-letnie pokrycie.
- Iron Suite: Za $2,998 uzyskasz dostep do wszystkich produktow Iron Software, w tym IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint i IronWebScraper.
IronPDF oferuje elastyczne opcje licencyjne z licencjami wieczystymi i kompleksowym wsparciem technicznym w cenie
Ceny i licencje Spire.PDF
Spire.PDF oferuje szeroki wybór licencji w zależności od potrzeb.
- Wersja bezpłatna: Spire.PDF oferuje bezpłatną wersję ograniczoną do 10 stron PDF; poza tym konieczne będzie zakupienie płatnej licencji.
- Licencja deweloperska: W cenie $999/rok, ta opcja jest dla deweloperow, ktorzy potrzebuja budowac funkcje zwiazane z PDF, ale nie wymagaja praw do dystrybucji OEM.
- Licencja deweloperska OEM: W cenie $2,999/rok, zawiera darmowe aktualizacje, wsparcie premium oraz mozliwosc dystrybucji aplikacji do uzytkownikow koncowych.
- Licencja Site Enterprise: W cenie $4,599/rok, ta warstwa licencyjna wspiera wielu deweloperow w wielu lokalizacjach z aktualizacjami i zasobami technicznymi online.
- Licencja Site OEM: W cenie $13,088/rok, skierowana do wiekszych przedsiebiorstw, ktore musza wdrazyc aplikacje w wielu lokalizacjach.
Która biblioteka zapewnia lepszą dokumentację i wsparcie?
IronPDF
IronPDF doskonale radzi sobie w dostarczaniu obszernej dokumentacji i wsparcia:
- Kompleksowa dokumentacja: Obszerna i przyjazna dla użytkownika dokumentacja obejmująca wszystkie funkcje.
- Wsparcie 24/5: Aktywne wsparcie inżyniera jest dostępne.
- Samouczki wideo: Krok po kroku przewodniki wideo dostępne na YouTube.
- Forum społecznościowe: Zaangażowana społeczność do dodatkowego wsparcia.
- Regularne aktualizacje: Miesięczne aktualizacje produktów zapewniające najnowsze funkcje i poprawki bezpieczeństwa.
- Dokumentacja API PDF: Zawiera informacje o API, dzięki czemu możesz w pełni wykorzystać możliwości naszych narzędzi.
Aby uzyskać więcej informacji, zapoznaj się z obszerną dokumentacją IronPDF i odwiedź kanał Iron Software na YouTube.
Dokumentacja i wsparcie techniczne Spire.PDF dla .NET
- Fora: Spire.PDF posiada forum, na którym użytkownicy mogą nawiązywać kontakty, dzieląc się wskazówkami, sposobami wykorzystania oraz problemami napotkanymi podczas korzystania z Spire.PDF.
- Przykłady kodu: Spire.PDF udostępnia na swojej stronie internetowej przykłady kodu, aby pokazać, jak korzystać z produktu w różnych sytuacjach.
- Biuletyny: Spire.PDF oferuje biuletyn dla programistów zawierający ogłoszenia o aktualizacjach i inne ważne informacje.
- Wsparcie: Wsparcie techniczne jest udzielane głównie za pośrednictwem forów, a płatna pomoc przez e-mail lub telefon jest dostępna za dodatkową opłatą w zależności od wersji licencji.
Jakie są typowe doświadczenia i opinie programistów?
Na podstawie opinii społeczności i rzeczywistego zastosowania:
Opinie over IronPDF
Programiści nieustannie chwalą IronPDF za zapewnienie "bardziej kompleksowego i precyzyjnego odwzorowania oryginalnej strony HTML". Zdolność biblioteki do obsługi złożonych układów CSS3, stron z dużą ilością kodu JavaScript oraz nowoczesnych frameworków internetowych sprawia, że jest ona preferowanym wyborem dla aplikacji wymagających generowania plików PDF o wysokiej jakości.
Typowe pozytywne aspekty to:
- Intuicyjna konstrukcja API, która skraca czas programowania
- Doskonała jakość renderowania zgodna z wyświetlaniem w przeglądarce
- Kompleksowa dokumentacja z praktycznymi przykładami
- Responsywne wsparcie techniczne
Spire.PDF Opinie
Z opinii społeczności wynika, że "Spire generuje plik PDF, który jest po prostu obrazem". Niektóre elementy css są nieprawidłowe, np. ignorowanie pogrubionych czcionek. Dodatkowo, wsparcie JavaScript w domyślnej ścieżce konwersji HTML Spire.PDF jest ograniczone, programiści zgłaszają niekompletne wykonanie dynamicznych treści.
Typowe kwestie wymagające uwagi to:
- Ograniczona obsługa CSS3 i nowoczesnych standardów internetowych
- Brak możliwości wykonywania kodu JavaScript
- Złożone wymagania dotyczące wątków przy konwersji HTML
- Dodatkowe wymagania biblioteki dotyczące niektórych funkcji
Kiedy należy wybrać daną bibliotekę?
Kiedy wybrać IronPDF:
- Twój kod HTML zawiera nowoczesne elementy CSS3, JavaScript lub responsywne projekty
- Potrzebne jest renderowanie z dokładnością co do piksela, zgodne z wyświetlaniem w przeglądarce
- Wymagane jest wdrożenie na wielu platformach (Linux, macOS, Docker)
- Chcesz, aby Twoja licencja obejmowała kompleksowe wsparcie
- Potrzebujesz wbudowanych funkcji, takich jak konwersja plików DOCX bez konieczności korzystania z dodatkowych bibliotek
- Twój zespół ceni sobie szybki rozwój przy minimalnej ilości kodu
Kiedy wybrać Spire.PDF:
- Twoje pliki PDF zawierają wyłącznie podstawowy kod HTML z prostym formatowaniem
- Zużycie pamięci jest kluczowym ograniczeniem
- Głównie pracujesz w środowiskach Windows
- Twój HTML nie wymaga wykonywania JavaScript
- Już używasz innych produktów Spire w swojej stosie
Wnioski
Podsumowując, IronPDF i Spire.PDF dla .NET to zarówno zdolne narzędzia do obsługi dokumentów PDF w aplikacjach .NET. IronPDF wyróżnia się łatwością użycia, zgodnością z wieloma platformami i wsparciem dla nowoczesnych standardów webowych, co czyni go preferowanym wyborem, jeśli chcesz podnieść swoje umiejętności pracy z dokumentami PDF. Spire.PDF oferuje wszechstronny zestaw funkcji, ale może wymagać większego wysiłku przy złożonych zadaniach i brakuje mu precyzji renderowania, którą wymagają współczesne aplikacje webowe.
Dla programistów pracujących z współczesnymi technologiami webowymi, wymagających dokładnej konwersji HTML na PDF lub potrzebujących niezawodnego wsparcia międzyplatformowego, IronPDF prezentuje bardziej kompletne rozwiązanie. Jego silnik renderujący oparty na Chrome, intuicyjne API i szerokie wsparcie sprawiają, że jest on szczególnie odpowiedni dla aplikacji enterprise i złożonych scenariuszy generowania dokumentów.
Możesz wypróbować 30-dniowy bezpłatny okres próbny, aby wypróbować dostępne funkcje.
Często Zadawane Pytania
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. Możesz również konwertować pliki HTML na pliki PDF za pomocą metody RenderHtmlFileAsPdf.
Czy IronPDF obsługuje wykonywanie kodu JavaScript podczas konwersji HTML do PDF?
Tak, IronPDF obsługuje pełne wykonywanie kodu JavaScript, dzięki czemu idealnie nadaje się do konwersji treści dynamicznych lub układów zależnych od JavaScriptu do formatu PDF.
Jakie platformy obsługuje IronPDF do konwersji plików PDF?
IronPDF oferuje natywną obsługę wielu platform, w tym Windows, Linux, macOS, Docker, a także usług chmurowych, takich jak Azure i AWS.
Jak wygląda zużycie pamięci przez IronPDF w porównaniu z Spire.PDF?
IronPDF zużywa nieco więcej pamięci, zazwyczaj między 150 a 200 MB, w porównaniu z 80–120 MB w przypadku Spire.PDF, ale zapewnia lepszą jakość renderowania i obsługuje nowoczesne wzorce async/await.
Czy IronPDF może bezpośrednio konwertować pliki DOCX do formatu PDF?
Tak, IronPDF zawiera wbudowane funkcje konwersji plików DOCX do formatu PDF za pośrednictwem klasy DocxToPdfRenderer, bez konieczności korzystania z dodatkowych bibliotek.
Jakie są opcje licencyjne dla IronPDF?
IronPDF oferuje licencje wieczyste od $749 dla pojedynczych deweloperow, w tym wszystkie funkcje i wsparcie. Oferuje rowniez pakiet Iron Suite z 10 produktami za $1 498.
Jakiego rodzaju wsparcie oferuje IronPDF?
IronPDF zapewnia wsparcie techniczne 24/5 za pośrednictwem poczty elektronicznej, czatu, telefonu oraz udostępniania ekranu dla wszystkich licencji, gwarantując kompleksową pomoc.
Jak mogę zapewnić bezpieczeństwo i szyfrowanie plików PDF za pomocą IronPDF?
IronPDF obsługuje szyfrowanie AES-256 i ochronę hasłem za pośrednictwem klasy SecuritySettings, umożliwiając szczegółową kontrolę nad uprawnieniami do plików PDF.
Czy IronPDF nadaje się do renderowania złożonych stron internetowych z nowoczesnym CSS?
Tak, IronPDF wykorzystuje pełny silnik renderujący Chrome, który obsługuje CSS3, flexbox, układy siatki, czcionki internetowe i JavaScript, dzięki czemu doskonale nadaje się do złożonych stron internetowych.
Jakie są ograniczenia darmowej wersji IronPDF?
IronPDF oferuje w pełni funkcjonalną 30-dniową bezpłatną wersję próbną bez ograniczeń liczby stron, co daje wystarczająco dużo czasu na przetestowanie wszystkich funkcji przed podjęciem decyzji o zakupie.
W jaki sposób IronPDF zapewnia wysoką jakość renderowania HTML?
IronPDF zapewnia renderowanie z dokładnością do piksela, które odpowiada wynikowi przeglądarki Chrome, gwarantując wysoką wierność i dokładne odwzorowanie oryginalnej treści HTML.



