Jak przeprowadzić migrację z GrabzIt do IronPDF w języku C#
Przejście z GrabzIt naIronPDFzmienia proces pracy z plikami PDF w środowisku .NET z opartej na chmurze usługi przechwytywania zrzutów ekranu, wymagającej skomplikowanych wywołań zwrotnych, na bibliotekę działającą w ramach procesu, która generuje prawdziwe wektorowe pliki PDF z tekstem, który można zaznaczać i przeszukiwać. Niniejszy przewodnik zawiera kompleksową, szczegółową ścieżkę migracji, która eliminuje zależności od serwerów zewnętrznych, procedury obsługi wywołań zwrotnych oraz model cenowy oparty na liczbie przechwyceń dla profesjonalnych programistów .NET.
Dlaczego warto przejść z GrabzIt na IronPDF
Problem architektury GrabzIt
GrabzIt to oparta na chmurze usługa tworzenia zrzutów ekranu i przechwytywania plików PDF. Chociaż jest wygodna do szybkiej integracji, ma fundamentalne ograniczenia architektoniczne:
-
Pliki PDF oparte na obrazach: GrabzIt tworzy pliki PDF oparte na zrzutach ekranu, w których tekst nie jest zaznaczalny — są to w zasadzie obrazy zapakowane w format PDF. Jest to podstawowe ograniczenie dla każdego przypadku użycia wymagającego manipulacji tekstem lub dostępności.
-
Przetwarzanie zewnętrzne: Cała treść jest wysyłana do serwerów GrabzIt w celu przetworzenia — co rodzi obawy dotyczące prywatności i zgodności z przepisami w przypadku danych wrażliwych. Twoje treści HTML opuszczają Twoją infrastrukturę.
-
Złożoność wywołań zwrotnych: GrabzIt wykorzystuje asynchroniczny model wywołań zwrotnych, który wymaga infrastruktury do obsługi webhooków. Należy skonfigurować punkty końcowe w celu odbierania wyników, co zwiększa złożoność architektury.
-
Ceny za przechwycenie: Model płatności za rzeczywiste wykorzystanie może stać się kosztowny przy większej skali. Każde wygenerowanie pliku PDF wiąże się z kosztem.
-
Brak wyszukiwania tekstu: Ponieważ pliki PDF są oparte na obrazach, wyszukiwanie i wyodrębnianie tekstu nie działa bez OCR — co stanowi dodatkowy etap i koszt.
-
Większe rozmiary plików: Pliki PDF oparte na obrazach są znacznie większe niż pliki PDF oparte na wektorach, często nawet 5–10 razy.
-
Zależność od sieci: Nie można generować plików PDF bez połączenia z Internetem, co uniemożliwia pracę w trybie offline.
- Opóźnienie: Każde wygenerowanie pliku PDF wymaga komunikacji sieciowej z serwerami zewnętrznymi, co powoduje opóźnienie rzędu 500 ms–5 s.
Porównanie GrabzIt i IronPDF
| Aspekt | GrabzIt | IronPDF |
|---|---|---|
| Typ pliku PDF | Na podstawie obrazu (zrzut ekranu) | Prawdziwy wektorowy plik PDF |
| Zaznaczenie tekstu | Niemożliwe | Zaznaczenie całego tekstu |
| Wyszukiwanie tekstu | Wymagane OCR | Wyszukiwanie w języku ojczystym |
| Miejsce przetwarzania | Serwery zewnętrzne | Lokalne/w trakcie realizacji |
| Prywatność | Dane wysyłane na zewnątrz | Dane pozostają lokalne |
| Opóźnienie | Czas przesyłu w obie strony (500 ms–5 s) | Przetwarzanie lokalne (~100 ms) |
| Model cenowy | Na przechwycenie | Licencja na programistę |
| Funkcja pracy w trybie offline | Nie | Tak |
| Rozmiar pliku | Duży (dane obrazu) | Mały (dane wektorowe) |
| Wymagane oddzwonienie | Tak (asynchronicznie) | Nie (synchroniczne/asynchroniczne) |
| Obsługa CSS/JS | Ograniczone | Pełny silnik Chromium |
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przyszłościową podstawę z lokalnym przetwarzaniem, które natywnie integruje się z nowoczesnymi wzorcami .NET.
Ocena złożoności migracji
Szacowany nakład pracy według funkcji
| Funkcja | Złożoność migracji |
|---|---|
| HTML do PDF | Bardzo niski |
| URL do pliku PDF | Bardzo niski |
| HTML na obraz | Low |
| Rozmiar strony/marginesy | Low |
| Obsługa wywołań zwrotnych | Low |
| Znaki wodne | Low |
| Nagłówki/stopki | Medium |
| Klucze uwierzytelniające | Bardzo niski |
Zmiana paradygmatu
Podstawową zmianą w tej migracji GrabzIt jest przejście z asynchronicznego przetwarzania w chmurze opartego na wywołaniach zwrotnych na synchroniczne generowanie w ramach procesu:
GrabzIt: Wyślij HTML → Poczekaj na wywołanie zwrotne → Pobierz wynik z serwera
IronPDF: Renderuj HTML → Uzyskaj plik PDF natychmiast
Zanim zaczniesz
Wymagania wstępne
- Wersja .NET:IronPDFobsługuje .NET Framework 4.6.2+ oraz .NET Core 3.1+ / .NET 5/6/7/8/9+
- Klucz licencyjny: Uzyskaj klucz licencyjnyIronPDFna stronie ironpdf.com
- Plan usunięcia infrastruktury: Udokumentuj procedury obsługi wywołań zwrotnych i punkty końcowe webhooków na potrzeby wycofania z eksploatacji
Zidentyfikuj wszystkie użycia GrabzIt
# Find GrabzIt client usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .
# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .
# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
# Find GrabzIt client usage
grep -r "GrabzItClient\|GrabzIt\." --include="*.cs" .
# Find callback handlers
grep -r "GrabzIt\|grabzit" --include="*.ashx" --include="*.aspx" --include="*.cs" .
# Find configuration
grep -r "APPLICATION_KEY\|APPLICATION_SECRET\|grabzit" --include="*.config" --include="*.json" .
Zmiany w pakiecie NuGet
# Remove GrabzIt
dotnet remove package GrabzIt
# Install IronPDF
dotnet add package IronPdf
# Remove GrabzIt
dotnet remove package GrabzIt
# Install IronPDF
dotnet add package IronPdf
Szybki start – migracja
Krok 1: Zaktualizuj konfigurację licencji
Przed (GrabzIt):
GrabzIt wymaga klucza aplikacji i tajnego kodu dla każdego uruchomienia klienta:
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Po (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Then create renderer without credentials
var renderer = new ChromePdfRenderer();
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Then create renderer without credentials
Dim renderer As New ChromePdfRenderer()
Krok 2: Zaktualizuj importy przestrzeni nazw
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;
// Before (GrabzIt)
using GrabzIt;
using GrabzIt.Parameters;
// After (IronPDF)
using IronPdf;
Imports IronPdf
Kompletna dokumentacija API
Mapowanie GrabzItClient do IronPDF
| Metoda GrabzIt | OdpowiednikIronPDF |
|---|---|
new GrabzItClient(key, secret) |
new ChromePdfRenderer() |
HTMLToPDF(html) |
renderer.RenderHtmlAsPdf(html) |
URLToPDF(url) |
renderer.RenderUrlAsPdf(url) |
HTMLToImage(html) |
pdf.ToBitmap() |
Save(callbackUrl) |
pdf.SaveAs(path) |
SaveTo(filePath) |
pdf.SaveAs(filePath) |
GetResult(id) |
Nie dotyczy |
GetStatus(id) |
Nie dotyczy |
Mapowanie PDFOptions do RenderingOptions
| GrabzIt PDFOptions | WłaściwościIronPDF |
|---|---|
PageSize (A4, Letter) |
RenderingOptions.PaperSize |
CustomId |
Nie dotyczy |
MarginTop |
RenderingOptions.MarginTop |
MarginBottom |
RenderingOptions.MarginBottom |
Mapowanie opcji obrazu do IronPDF
| GrabzIt ImageOptions | OdpowiednikIronPDF |
|---|---|
Format (png, jpg) |
bitmap.Save(path, ImageFormat.Png) |
Width |
RenderingOptions.ViewPortWidth |
Height |
RenderingOptions.ViewPortHeight |
Przykłady migracji kodu
Przykład 1: Konwersja HTML do PDF
Przed (GrabzIt):
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.CustomId = "my-pdf";
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.pdf");
}
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.CustomId = "my-pdf";
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.pdf");
}
}
Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New PDFOptions()
options.CustomId = "my-pdf"
grabzIt.HTMLToPDF("<html><body><h1>Hello World</h1></body></html>", options)
grabzIt.SaveTo("output.pdf")
End Sub
End Module
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Różnica jest znacząca: GrabzIt wymaga danych uwierzytelniających API (YOUR_APPLICATION_KEY, YOUR_APPLICATION_SECRET), tworzy obiekt PDFOptions z niestandardowym identyfikatorem, a wynikiem jest plik PDF oparty na obrazach, wysyłany przez serwery zewnętrzne. ChromePdfRenderer firmyIronPDFgeneruje lokalnie prawdziwy wektorowy plik PDF z możliwością zaznaczania tekstu — bez danych uwierzytelniających, bez połączeń sieciowych, bez wywołań zwrotnych. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.
Przykład 2: Konwersja adresów URL do formatu PDF
Przed (GrabzIt):
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.PageSize = PageSize.A4;
grabzIt.URLToPDF("https://www.example.com", options);
grabzIt.SaveTo("webpage.pdf");
}
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new PDFOptions();
options.PageSize = PageSize.A4;
grabzIt.URLToPDF("https://www.example.com", options);
grabzIt.SaveTo("webpage.pdf");
}
}
Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New PDFOptions()
options.PageSize = PageSize.A4
grabzIt.URLToPDF("https://www.example.com", options)
grabzIt.SaveTo("webpage.pdf")
End Sub
End Module
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
GrabzIt wymaga skonfigurowania PageSize.A4 za pomocą obiektu opcji oraz uwierzytelnienia na serwerach zewnętrznych. Metoda RenderUrlAsPdf() firmyIronPDFakceptuje adres URL bezpośrednio i renderuje go lokalnie przy użyciu pełnego silnika Chromium z pełną obsługą CSS i JavaScript. Dowiedz się więcej o konwersji adresów URL do formatu PDF.
Przykład 3: Konwersja HTML na obraz
Przed (GrabzIt):
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new ImageOptions();
options.Format = ImageFormat.png;
options.Width = 800;
options.Height = 600;
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.png");
}
}
// NuGet: Install-Package GrabzIt
using GrabzIt;
using GrabzIt.Parameters;
using System;
class Program
{
static void Main()
{
var grabzIt = new GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET");
var options = new ImageOptions();
options.Format = ImageFormat.png;
options.Width = 800;
options.Height = 600;
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options);
grabzIt.SaveTo("output.png");
}
}
Imports GrabzIt
Imports GrabzIt.Parameters
Imports System
Module Program
Sub Main()
Dim grabzIt As New GrabzItClient("YOUR_APPLICATION_KEY", "YOUR_APPLICATION_SECRET")
Dim options As New ImageOptions()
options.Format = ImageFormat.png
options.Width = 800
options.Height = 600
grabzIt.HTMLToImage("<html><body><h1>Hello World</h1></body></html>", options)
grabzIt.SaveTo("output.png")
End Sub
End Module
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Drawing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Drawing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
}
}
Imports IronPdf
Imports System
Imports System.Drawing
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
Dim images = pdf.ToBitmap()
images(0).Save("output.png", System.Drawing.Imaging.ImageFormat.Png)
End Sub
End Class
GrabzIt udostępnia dedykowaną metodę HTMLToImage() z ImageOptions do konfiguracji formatu, szerokości i wysokości.IronPDFosiąga ten sam efekt, najpierw renderując HTML do formatu PDF za pomocą RenderHtmlAsPdf(), a następnie konwertując go na bitmapę za pomocą ToBitmap(). Takie podejście pozwala uzyskać zarówno plik PDF, jak i obraz w wyniku jednej operacji renderowania.
Ważne uwagi dotyczące migracji
Nie są wymagane żadne działania zwrotne
Najważniejszą zmianą architektoniczną jest całkowite wyeliminowanie procedur obsługi wywołań zwrotnych:
// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback"); // Wait for callback...
// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["id"];
GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
GrabzItFile file = grabzIt.GetResult(id);
file.Save("output.pdf");
}
}
// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Done! Nie callback needed.
// GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options);
grabzIt.Save("https://myserver.com/grabzit-callback"); // Wait for callback...
// Callback handler (separate endpoint)
public class GrabzItHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["id"];
GrabzItClient grabzIt = new GrabzItClient("APP_KEY", "APP_SECRET");
GrabzItFile file = grabzIt.GetResult(id);
file.Save("output.pdf");
}
}
// IronPDF: Synchronous - result immediately available
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Done! Nie callback needed.
Imports System.Web
' GrabzIt: Async callback pattern
grabzIt.HTMLToPDF(html, options)
grabzIt.Save("https://myserver.com/grabzit-callback") ' Wait for callback...
' Callback handler (separate endpoint)
Public Class GrabzItHandler
Implements IHttpHandler
Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim id As String = context.Request.QueryString("id")
Dim grabzIt As New GrabzItClient("APP_KEY", "APP_SECRET")
Dim file As GrabzItFile = grabzIt.GetResult(id)
file.Save("output.pdf")
End Sub
Public ReadOnly Property IsReusable As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
' IronPDF: Synchronous - result immediately available
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf") ' Done! No callback needed.
Po migracji usuń wszystkie procedury obsługi wywołań zwrotnych GrabzIt (pliki .ashx, punkty końcowe procedur obsługi, konfiguracja webhooków).
Pliki PDF w formacie True Vector
GrabzIt tworzy pliki PDF oparte na obrazach, w których tekst nie jest zaznaczalny.IronPDFgeneruje prawdziwe pliki PDF wektorowe:
// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText(); // Works without OCR!
// With IronPDF, text extraction works natively
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText(); // Works without OCR!
Imports IronPdf
' With IronPDF, text extraction works natively
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText() ' Works without OCR!
Więcej szczegółów można znaleźć w dokumentacji dotyczącej ekstrakcji tekstu.
Mniejsze rozmiary plików
Pliki PDF oparte na wektorach są zazwyczaj 5–10 razy mniejsze niż pliki PDF oparte na obrazach generowane przez GrabzIt. Poprawia to koszty przechowywania, czas pobierania oraz możliwość wysyłania załączników w wiadomościach e-mail.
Usuń poświadczenia API
GrabzIt wymaga danych uwierzytelniających API dla każdej operacji:
// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
// Remove these from configuration
// YOUR_APPLICATION_KEY
// YOUR_APPLICATION_SECRET
IronPDF wykorzystuje pojedynczy klucz licencyjny ustawiany jednorazowo podczas uruchamiania aplikacji — nie wymaga uwierzytelniania przy każdym żądaniu.
Rozwiązywanie problemów
Problem 1: Nie znaleziono GrabzItClient
Problem: Po usunięciu GrabzIt odniesienia GrabzItClient powodują błędy kompilacji.
Rozwiązanie: Zastąp przez ChromePdfRenderer:
// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");
// Replace with:
var renderer = new ChromePdfRenderer();
// Remove:
// var grabzIt = new GrabzItClient("KEY", "SECRET");
// Replace with:
var renderer = new ChromePdfRenderer();
' Remove:
' Dim grabzIt = New GrabzItClient("KEY", "SECRET")
' Replace with:
Dim renderer = New ChromePdfRenderer()
Problem 2: Nie znaleziono opcji PDFOptions
Problem: Klasa PDFOptions nie istnieje w IronPDF.
Rozwiązanie: Użyj właściwości RenderingOptions:
// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;
// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// GrabzIt
var options = new PDFOptions();
options.PageSize = PageSize.A4;
// IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
' GrabzIt
Dim options As New PDFOptions()
options.PageSize = PageSize.A4
' IronPDF
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Problem 3: Nadal odwołuje się do procedur obsługi wywołań zwrotnych
Problem: Aplikacja oczekuje punktów końcowych wywołania zwrotnego.
Rozwiązanie: Całkowicie usunąć infrastrukturę wywołań zwrotnych.IronPDFzwraca wyniki synchronicznie — nie są potrzebne webhooki.
Problem 4: Nie znaleziono opcji ImageOptions
Problem: Klasa ImageOptions nie istnieje w IronPDF.
Rozwiązanie: Najpierw wygeneruj plik PDF, a następnie dokonaj konwersji:
// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
// GrabzIt
var options = new ImageOptions();
options.Format = ImageFormat.png;
grabzIt.HTMLToImage(html, options);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
var images = pdf.ToBitmap();
images[0].Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
' GrabzIt
Dim options As New ImageOptions()
options.Format = ImageFormat.png
grabzIt.HTMLToImage(html, options)
' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim images = pdf.ToBitmap()
images(0).Save("output.png", System.Drawing.Imaging.ImageFormat.Png)
Lista kontrolna migracji
Przed migracją
- Sporządź spis wszystkich wywołań API GrabzIt w kodzie źródłowym
- Zidentyfikuj procedury obsługi wywołań zwrotnych i punkty końcowe webhooków
- Opis aktualnych opcji i szablonów GrabzIt
- Uzyskaj klucz licencyjny IronPDF
- Plan wycofania obsługi wywołań zwrotnych
Migracja kodu
- Zainstaluj pakietIronPDFNuGet:
dotnet add package IronPdf - Usuń pakiet NuGet GrabzIt:
dotnet remove package GrabzIt - Zastąp
GrabzItClientprzezChromePdfRenderer - Zamień
HTMLToPDF()naRenderHtmlAsPdf() - Zamień
URLToPDF()naRenderUrlAsPdf() - Zastąp
Save(callback)przezSaveAs(path) - Zaktualizuj opcje z
PDFOptionsnaRenderingOptions
Migracja infrastruktury
- Usuń pliki obsługi wywołań zwrotnych (
.ashxitp.) - Usuń klucze API GrabzIt z konfiguracji
- Usuń konfigurację adresu URL webhooka
- Dodaj klucz licencyjnyIronPDFdo konfiguracji
- Usuń kod sprawdzania dostępności/statusu
Testowanie
- Przetestuj konwersję HTML do PDF
- Przetestuj konwersję adresu URL do formatu PDF
- Sprawdź, czy tekst jest zaznaczalny w plikach PDF wynikowych
- Wypróbuj, czy wyciąganie tekstu działa (bez OCR)
- Sprawdź, czy rozmiary plików są mniejsze
- Test wydajności bez opóźnień sieciowych
Po migracji
- Anuluj subskrypcję GrabzIt
- Kod obsługi wywołania zwrotnego archiwum
- Aktualizacja dokumentacji
- Monitoruj wszelkie błędy związane z GrabzIt

