using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
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");
QuestPDF'ten IronPDF'ye geçiş, PDF oluşturma iş akışınızı geniş PDF manipülasyon yeteneklerine sahip standart HTML/CSS tabanlı bir yaklaşıma ve bir C# akıcı düzen API'sinden taşır. Bu kılavuz, mevcut web becerilerine başvurmanız, HTML şablonlarını yeniden kullanmanız veQuestPDFtemel kütüphanesinin içermediği özellikleri kazanmanız için adım adım bir geçiş yolu sunar.
Neden QuestPDF'den IronPDF'ye Geçilmeli
QuestPDF'yi Anlamak
QuestPDF, C# ile programatik olarak PDF oluşturmak üzere özel olarak tasarlanmış modern bir fluent API'dir. Kapsamlı HTML'den PDF'e dönüştürme sunan kütüphanelerin aksine,QuestPDFtemel kütüphanesi programatik bir düzen API'si ile sınırlıdır. QuestPDF, geliştiricilerin HTML'ye dayanmak zorunda kalmadan C# kodu kullanarak belgeleri sıfırdan oluşturmaları gereken senaryolarda başarılıdır.
Topluluk düzeyi, bireyler, kâr amacı gütmeyenler, FOSS projeleri ve yıllık brüt geliri 1 milyon USD'nin altında olan kuruluşlar için MIT şartlarına göre ücretsizdir. O eşik üzerinde, QuestPDF, $999'dan başlayan profesyonel lisans (ömür boyu, en fazla 10 geliştirmeci) ve $2.999'dan başlayan kurumsal lisans (ömür boyu, kurulum çapında), uzun vadeli planlamaya dahil edilmesi gereken sundur.
Temel Sorun: Çekirdek Kütüphanede HTML Motoru Yok
QuestPDF bazen HTML'den PDF'e dönüştürme önerilir, ancak temel kütüphane HTML render yapmaz. Topluluk tarafından sürdürülen QuestPDF.HTML uzantısı, HTML/CSS'in sınırlı bir alt kümesini kapsar, ancak çekirdek motor yalnızca programlamaya yöneliktir ve gerçek bir tarayıcı motoru çalıştırmaz. Zaten HTML/CSS şablonlarına sahip ekipler genellikle bunları akıcı API'de yeniden inşa etmek zorundadır.
Özellik
QuestPDF
IronPDF
HTML'den PDF'e (çekirdek)
Desteklenmez (sadece akıcı API)
Tam destek
HTML'den PDF'e (uzantı)
Kısmen QuestPDF.HTML (sınırlı alt küme) aracılığıyla
IronPDF,QuestPDFtemelinin içermediği yerel HTML'den PDF'e renderleme sunarak belgeleri C# kodunda elle yeniden oluşturma ihtiyacını ortadan kaldırır. Ayrıca QuestPDF'in Belge İşlemleri API'si (2024.12.0+) birleştirme, sayfa çıkarma, üst/alt kaplama, ekler ve şifreleme içerir, ancak mevcuttaki sayfa içeriğini düzenleme, OCR veya dijital imzalar sunmaz ancak belgede düzenleme gibi PDF manipülasyon özelliklerini de kapsar.
QuestPDFLisanslama Modeli
QuestPDF'nin Community License (MIT koşulları) bireyler, kar amacı gütmeyen kuruluşlar, FOSS projeleri ve yıllık brüt geliri 1 milyon USD'nin altında olan organizasyonlar için ücretsizdir. Bu eşikten sonra, 999 $ (süresiz, 10 geliştiriciye kadar) veya 2.999 $ (süresiz, organizasyon geneli için) Enterprise lisansına ihtiyacınız vardır. Tetikleyici, koltuk sayısından ziyade kuruluşunuzun geliri olduğu için, bu, hem kendi lisanslamanızda hem de müşterilerle olan görüşmelerinizi değiştirebilir.
IronPDF, geliri denetlemeyen, müşteri lisansı gereksinimlerini kaldıran ve öngörülebilir maliyetlerle her geliştirici için ticari lisans sunar.
Modern .NET sürümlerini benimseyen ekipler için,IronPDF her geliştiriciye lisanslama sağlayarak gelir tabanlı tetikleyicilerden uzak durur ve mevcut web geliştirme becerilerini kullanan standart bir HTML/CSS yaklaşımı sunar.
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText $csharpLabel
QuestPDFKullanımını Bul
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
SHELL
Tam API Referansı
Ad Alanı Değişiklikleri
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
Imports IronPdf
$vbLabelText $csharpLabel
Temel API Eşlemeleri
QuestPDF Kavramı
IronPDF Eşdeğeri
Document.Create()
new ChromePdfRenderer()
.Page()
RenderHtmlAsPdf()
.Text()
HTML <p>, <h1>, <span>
.Bold()
CSS font-weight: bold
.FontSize(24)
CSS font-size: 24px
.Image()
HTML <img src="...">
.Table()
HTML
.Column()
CSSdisplay: flex; flex-yön: sütun
.Row()
CSSdisplay: flex; flex-yön: sıra
PageSizes.A4
RenderingOptions.PaperSize
.Margin()
RenderingOptions.Margin*
.GeneratePdf()
pdf.SaveAs()
Yok
PdfDocument.Merge()
Yok
PdfDocument.FromFile()
Yok
pdf.SecuritySettings
Kod Göç Örnekleri
Örnek 1: Temel Belge Oluşturma (HTML'den PDF'ye)
Önceki (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("Hello World").FontSize(20).Bold()
column.Item().Text("This is a paragraph of text.")
End Sub)
End Sub)
End Sub).GeneratePdf("output.pdf")
End Sub
End Module
$vbLabelText $csharpLabel
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
Bu örnek paradigmalardaki farkı gösterir. QuestPDF, akıcı API'sini öğrenmeyi gerektirir: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text() ve .FontSize(20).Bold() gibi metod zincirlemesi ile stil verilerek. Ayrıca QuestPDF.Settings.License = LicenseType.Community ile lisans türünü de ayarlamanız gerekir.
IronPDF, her web geliştiricisinin bildiği standart HTML kullanır: başlıklar için , paragraflar için . Öğrenilecek yeni bir yerleşim DSL yok. IronPDF'nin yaklaşımı daha temiz bir sözdizimi sunar ve modern .NET web yığınının geri kalanıyla entegre olur. Kapsamlı örnekler için HTML'den PDF'e dönüşüm belgelerine bakın.
Örnek 2: Fatura Oluşturma
Önceki (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("INVOICE").FontSize(24).Bold()
column.Item().Text("Invoice #: 12345").FontSize(12)
column.Item().PaddingTop(20)
column.Item().Text("Customer: John Doe")
column.Item().Text("Total: $100.00").Bold()
End Sub)
End Sub)
End Sub).GeneratePdf("invoice.pdf")
End Sub
End Module
$vbLabelText $csharpLabel
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("invoice.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
QuestPDF, yerleşim için .Column() ve .Item(), boşluklar için .PaddingTop(20) kullanır. IronPDF, standart HTML kullanır: başlık için , paragraflar için , boşluklar için ve kalın metin için .
Gerçek avantaj:IronPDF ile tasarımcılar HTML şablonlarını bağımsız olarak oluşturabilir ve değiştirebilir.QuestPDFile her tasarım değişikliği, bir C# geliştiricisinin kodu değiştirmesini gerektirir. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Sayfa Numaraları ile Başlıklar ve Alt Bilgiler
Önceki (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Header().Text("Document Header").FontSize(14).Bold()
page.Content().Text("Main content of the document.")
page.Footer().AlignCenter().Text(Sub(text)
text.Span("Page ")
text.CurrentPageNumber()
End Sub)
End Sub)
End Sub).GeneratePdf("document.pdf")
End Sub
End Module
$vbLabelText $csharpLabel
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<p>Main content of the document.</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.Header = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 14
}
pdf.Footer = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
pdf.SaveAs("document.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
QuestPDF, page.Header() ve page.Footer() kullanarak .AlignCenter() ve .CurrentPageNumber() gibi akıcı yöntemlerle. IronPDF, TextHeaderFooter nesneleri, CenterText ve FontSize gibi özelliklerle kullanır. {page} yer tutucu otomatik olarak geçerli sayfa numarasını ekler.
Kritik Taşıma Notları
Paradigma Değişikliği
Temel değişiklik, özel bir C# akıcı yerleşim API'sinden standart HTML/CSS'ye geçiştir:
// QuestPDF: Fluent C# layout API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Fluent C# layout API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Fluent VB.NET layout API
container.Page(Sub(page)
page.Content().Column(Sub(column)
column.Item().Text("Invoice").Bold().FontSize(24)
column.Item().Row(Sub(row)
row.RelativeItem().Text("Customer:")
row.RelativeItem().Text("Acme Corp")
End Sub)
End Sub)
End Sub)
' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDF'e geçiş yaptıktan sonra QuestPDF'in sağlayamadığı yetenekler kazanırsınız:
PDF Birleştirme
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")
Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
$vbLabelText $csharpLabel
PDF Güvenliği
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
$vbLabelText $csharpLabel
URL'den PDF'e
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
$vbLabelText $csharpLabel
Mevcut PDF'leri Yükleyin ve Düzenleyin
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
page.Header() / page.Footer() yerine TextHeaderFooter kullanın
.CurrentPageNumber() yerine {page} yer tutucusunu kullanın
.GeneratePdf()'i pdf.SaveAs()'a dönüştürün
Uygulama başlangıcında lisans başlatma ekle
Geçiş Sonrası
PDF çıktısının görsel karşılaştırması
Çok sayfalı belgelerde doğru sayfa ekiplerlerini test edin
Gerekli olduğunda yeni özellikler ekleyin (güvenlik, birleştirme, URL-to-PDF)
Lütfen dikkate alınQuestPDF, ilgili sahibinin ticari markasıdır. Bu site, Codeux Software veyaQuestPDFbakımcıları ile ilişkili değildir, desteklenmemektedir veya sponsorluğu yapılmamaktadır. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...