IronPDF ve GrapeCity PDF: .NET PDF Kütüphanesi Karşılaştırması
IronPDF, .NET uygulamalari icin Chrome V8 render motoru ile HTML-den PDF'ye dönüşümde uzmanlasirken, GrapeCity PDF, PDF görüntüleme ve not alma özelliklerine odaklanir, bu da IronPDF'yi modern web içerik desteğiyle tüm PDF oluşturma yeteneklerine ihtiyaç duyan geliştiriciler icin ustun bir seçenek yapar.
PDF, Tasınabilir Belge Formatı'nın kisaltmasidir. Farkli cihazlarda belgelerin geleneksel olarak görüntülenmesine olanak taniyan bir dosya türüdür. PDF'ler genellikle ozgecmisler gibi onemli belgeleri potansiyel isverenlere veya faturalari musterilere paylasmak icin kullanilir.
Populerliğine rağmen, PDF'lerin bazi sinirlari vardir. Örnek olarak, alicilarin bir PDF okuyucuya ihtiyaçı olmadan PDF'leri e-posta yoluyla paylaşamazsınız. PDF'ler, Word belgelerinde oldugu gibi mobil cihazlarda net olarak görüntülenmeyebilir. Ayrica, PDF'ler, Word belgeleri gibi icerigi değiştirmek veya güncellemek icin duzenleme yazılımına ihtiyaç duyar. Ancak, PDF dosyaları, ister PC ister Mac olsun, tüm cihazlarda tutarlı gorünümü korunur. Bu guvenilirlik, PDF'leri JPEG veya GIF gibi diğer belge türlerinde bulunmayan bir standart format yapar.
Bu makalede, iki .NET PDF kutuphanesini inceleyecegiz:
- IronPDF
GrapeCityPDF
IronPDF Nedir ve GrapeCity ile Nasıl Kıyaslanir?
IronPDF, minimum kodla PDF belgeleri oluşturma, okuma ve işleme işlevleri sunan bir .NET kütüphanesidir. Bu makale, IronPDF ile PDF dosyaları oluşturmayı gösteriyor. Visual Studio veya C# temelleri ve HTML calısma bilgisine ihtiyaçıniz var.
Uygulamalari yazmak, derlemek ve çalıştırmak icin Visual Studio'ya, mantık ve kod icin C#'a ve baslıklar, başlıklar, resimler ve paragraflar dahil PDF dosyalarının biçimlendirilmesi icin HTML bilgisine ihtiyaçınız var. IronPDF, .NET Core, .NET 5, Framework ve Standard'i tam olarak destekler. ASP.NET uygulamalari icin IronPDF, web sayfalarını PDF'ye dönüştürmek icin sorunsuz entegrasyon sunar.
Temel C# ve HTML bilgisi verilmiş, C#'ta minimal kod ile PDF dosyaları oluşturabilirsiniz. Daha fazla bilgi icin resmi IronPDF özellikleri sayfasını ziyaret edin. Programatik PDF oluşturma icin IronPDF, temel HTML dönüştürmanın ötesinde geniş yetenekler sunar.
IronPDF'i .NET Projemde Nasıl Yuklerim?
Cozumler geliştirmek icin IronPDF NuGet Paketi kurmaniz gereklidir. Menu Cubuğundan "Proje"yi tıklayın. Acılır menüden "NuGet Paketlerini yonet" seçeneğini belirleyin. Detaylı talimatlar icin kurulum ozetine bakin. Bu pencere gösterilecek:
NuGet Paket Yöneticisi arayüzü, IronPdf'i ararken bos bir arama sonucu gösterir, bu da paketin mevcut olmayabileceğini veya baglanabilirlikle ilgili sorunlar olabileceğini isaret eder.
"Tarama" seçeneğini secerek bu pencereyi gorun:
NuGet Paket Yöneticisi, gerekli .NET kitapliklarına kolay erişim sağlar ve Entity Framework Core ile Newtonsoft.Json, veritabanı operasyonları ve JSON işleme icin en popüler paketler arasındadır.
Arama kutusuna 'IronPdf' yazıp "Enter"a basın. Platform ozel yapılandırmalar dahil ileri kurulum seçenekleri icin dokümantasyonu inceleyin. Gormelisiniz:
NuGet Paket Yöneticisi arayuzü, her paket icin indirme sayıları ve sürüm numaraları görünür şekilde kurulum icin çeşitli IronPDF paketlerini gösterir.
IronPDF'yi secin:
NuGet Paket Yonenicisi arayuzu, IronPDF (sürüm 2021.3.1) kurulum icin secili olarak, PDFCore ve çeşitli IronPDF render varlıklarını içeren alternatif PDF kitaplıklarını karşılastırmak icin listeler.
'Kur' düğmesine tıklayın. Basarili kurulumdan sonra, goreceksiniz:
IronPDF kurulum işlemi, Visual Studio'da NuGet paket yöneticisinin IronPDF sürüm 2021.3.1 ve bagimliliklerinin kurulumunu gösterir.
Kurulumu tamamlamak icin 'Tamam' tuplesin. IronPDF, Windows platformları, Windows 10, 11 ve sunucu surumlerini destekler. Kutuphane, capraz platform gelişimi icin Linux ve macOS da desteklenir.
IronPDF ile PDF'leri Nasıl Oluştururum?
Dosya başına IronPdf namespaceni ekleyin. VB.NET geliştiricileri icin benzer işlev mevcut:
using IronPdf;
using IronPdf;
Imports IronPdf
Oluşturulan PDF'yi saklamak icin bir dosya yoluna ihtiyaçınız var. Kullanıcıları dosya adi ve yolu sormak icin SaveFileDialog kullanın. Gelişmiş senoryalars, diske kaydetmeden bellek akışlarına PDF dışa onar:
private void Save_Click(object sender, EventArgs e)
{
// Code to Select the folder and save the file.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = @"D:\";
saveFileDialog1.Title = "Save Pdf File";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.Filter = "Pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = saveFileDialog1.FileName;
// actual code that will create Pdf files
var HtmlLine = new HtmlToPdf();
HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
// MessageBox to display that file save
MessageBox.Show("File Saved Successfully!");
}
}
private void Save_Click(object sender, EventArgs e)
{
// Code to Select the folder and save the file.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = @"D:\";
saveFileDialog1.Title = "Save Pdf File";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.Filter = "Pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = saveFileDialog1.FileName;
// actual code that will create Pdf files
var HtmlLine = new HtmlToPdf();
HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
// MessageBox to display that file save
MessageBox.Show("File Saved Successfully!");
}
}
Private Sub Save_Click(ByVal sender As Object, ByVal e As EventArgs)
' Code to Select the folder and save the file.
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.InitialDirectory = "D:\"
saveFileDialog1.Title = "Save Pdf File"
saveFileDialog1.DefaultExt = "pdf"
saveFileDialog1.Filter = "Pdf files (*.pdf)|*.pdf|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
If saveFileDialog1.ShowDialog() = DialogResult.OK Then
Dim filename As String = saveFileDialog1.FileName
' actual code that will create Pdf files
Dim HtmlLine = New HtmlToPdf()
HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename)
' MessageBox to display that file save
MessageBox.Show("File Saved Successfully!")
End If
End Sub
Klasor ve dosya adı secmek için SaveFileDialog bir diyalog açar. Başlangıç Dizini varsayılan olarak D surucusudur ancak değiştirilebilir. DefaultExtension PDF olarak ayarlanmıştır. Tam dönüştürme seçeneklerini keşfetmek icin HTML-to-PDF tutorialni keşfedin.
"if" koşulu, PDF oluşturma kodunu içerir. Yalnızca iki satır kod ile PDF oluşturursunuz. PdfText, PDF içeriğini içeren Zengin Metin kutusunun adıdır. Dosya adı, SaveFileDialog üzerinden seçilen dosya yoludur. Web uygulamaları için IronPDF, URL'yi PDF'e dönüştürme ve ASPX'i PDF'e dönüştürme destekler.
IronPDF ile PDF'leri Nasıl Oku?r
IronPDF ile PDF dosyalarını okumak yalnızca iki satır kod gerektirir. Gelişmiş çıkartma için metin ve görüntüleri çıkartma kılavuzu'na bakın.
Bu importları ekleyin:
using IronPdf;
using System;
using System.Windows.Forms;
using IronPdf;
using System;
using System.Windows.Forms;
Imports IronPdf
Imports System
Imports System.Windows.Forms
Bu kodu fonksiyonunuza yazın. IronPDF, PDF ayrıştırma yetenekleri ve PDF DOM erişimi sağlar:
private void Read_Click(object sender, EventArgs e)
{
PdfDocument PDF = PdfDocument.FromFile(FilePath.Text);
FileContent.Text = PDF.ExtractAllText();
}
private void Read_Click(object sender, EventArgs e)
{
PdfDocument PDF = PdfDocument.FromFile(FilePath.Text);
FileContent.Text = PDF.ExtractAllText();
}
Private Sub Read_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim PDF As PdfDocument = PdfDocument.FromFile(FilePath.Text)
FileContent.Text = PDF.ExtractAllText()
End Sub
Bu, belgelerden tüm bilgileri izleyicilere çıkarır. Raporlama bileşenleri bu verileri kaynak olarak kullanır. IronPDF, bellek akışlarından PDF okumayı ve web görüntülemesi için PDF'leri HTML'e dönüştürmeyi destekler.
GrapeCity PDF Ne Sunar?
GrapeCity Belgeleri, ortak formatlar için çapraz platform belge yönetimi sağlar. .NET Standard 2.0 kütüphanesi, Adobe Acrobat olmadan PDF'leri okur, oluşturur, değiştirir ve kaydeder. Yazı tipi desteği, resimler, grafikler, barkodlar, yorumlar, çevre çizgileri, damgalar ve filigranlar sunar.
Mevcut PDF Manipülasyon Yetkinlikleri Nelerdir?
GrapeCityPDF, .NET Standard uygulamalarında temel veya karmaşık iş ihtiyaçları için PDF'ler oluşturur. Herhangi bir kaynaktan PDF yükleyebilir, değiştirebilir ve kaydedebilirsiniz. IronPDF, PDF düzenleme dahil olmak üzere PDF birleştirme/bölme, sayfa ekleme/kaldırma ve sayfa döndürme gibi tam çözümler sunar.
PDF'leri Görüntülere Dönüştürebilir miyim?
GrapeCityPDF, minimal kod kullanarak kalite kaybı olmadan PDF'leri görüntü olarak kaydeder. IronPDF, PNG, JPEG ve TIFF formatlarını destekleyen PDF'yi görüntülere tarama özelliği sunar.
GrapeCity PDF Görüntüleyici Bileşenini İçerir mi?
GrapeCity Belgeleri PDF Görüntüleyici, standart PDF özelliklerini destekleyen hafif bir istemci tarafı görüntüleyicisidir. .NET MAUI geliştiricileri için IronPDF, MAUI uygulamalarında PDF görüntüleme sunar ve gezinme ile arama işlevselliği sağlar.
Desteklenen Özellik Türleri Nelerdir?
GrapeCityPDF, metin, grafik, fotoğraflar, açıklamalar ve çevre çizgileri ile karmaşık PDF'ler oluşturur. IronPDF, bunları dijital imzalar, form oluşturma/doldurma, filigranlama ve metadata yönetimi ile genişletir.
GrapeCity PDF Nasıl Yüklenir?
İki kurulum yöntemi vardır. Kapsamlı dağıtım için IronPDF, Docker desteği ve uzaktan konteyner işlemi sunar:
- Sıkıştırılmış kaynak dosyaları indirin.
- Dosyaları bir dizine çıkartın.
- O dizine gidin.
- Örnekleri oluşturmak için
run.cmdçalıştırın,SupportApihizmetini başlatın ve http://localhost:3003 adresini açın. - Ayrıntılar için
readme.MDgörün.
WinForms Sürümü Nasıl Yüklenir?
WinForms Sürümü kurulumu için bu adımları izleyin:
- Download C1ControlPanel from
GrapeCity'sComponentOne. - Visual Studio'yu kapatarak
ControlPanelileComponentOneC1ControlPanel.exe'yi açın. - Kayıtlı e-posta/parolanız ile giriş yapın.
- Yeni kullanıcılar için:
- Kayıt olun ve hesap oluşturun.
- E-posta adresini doğrulayın.
- Doğrulama bağlantısı ile etkinleştirin.
- Tercih ederseniz anonim kullanıcı olarak devam edin.
WinFormsSürüm kutusundaki Yükle'yi seçin. Tüm sürümleri Tüm Sürümler onay kutusu ile yükleyin.
`GrapeCity`'s `ComponentOne` offers multiple edition options tailored to different development platforms and frameworks, each with the option to install sample projects
- Lisans Sözleşmesini görmek için Yükle'ye tıklayın. İncelendikten sonra kabul edin.
- Ayarlar sayfasını görmek için Lisans Sözleşmesini kabul edin. Dizin yolunu doğrulayın ve kurulum başlatın.
`ComponentOne` installation configuration screen with privacy and data collection options
- Kurulum esnasında kontrolün ilerlemesini gösterir. Bu süreç sırasında iptal edilemez.
- "Kurulum Başarılı" ekranı tamamlama sonrasında görünür. Şu anda yüklü olan sürümü gösterir.
The `WinForms` Edition installer interface displays a simple download progress bar and installation option for a suite of 65+ smart and effective UI controls designed for rapid Windows Forms development.
The `ComponentOne` installation interface displays a successful installation message for version 20183.1.338, featuring navigation tabs for Products, Activities, License, and Support
GrapeCity ile PDF'leri Nasıl Oluştururum?
Aşağıdaki kod, temel GrapeCity PDF oluşturmayı gösterir. Gelişmiş özellikler için, IronPDF, JavaScript ile HTML'den PDF'e, duyarlı CSS veya özel başlıklar/altbilgiler gibi eksiksiz çözümler sağlar.
using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Common;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Structure;
using GrapeCity.Documents.Pdf.MarkedContent;
using GrapeCity.Documents.Pdf.Graphics;
using GrapeCity.Documents.Pdf.Annotations;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace GcPdfWeb.Samples.Basics
{
// This sample shows how to create a PDF/A-3u compliant document.
public class PdfA
{
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);
// Mark the document as PDF/A-3u conformant:
doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;
var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
var gap = 36;
// PDF/A-3a requires all content to be tagged so create and populate StructElement when rendering:
StructElement sePart = new StructElement("Part");
doc.StructTreeRoot.Children.Add(sePart);
TextLayout tl = null;
// Add 3 pages with sample content tagged according to PDF/A rules:
for (int pageNo = 1; pageNo <= 3; ++pageNo)
{
// add page
var page = doc.Pages.Add();
var g = page.Graphics;
float y = 72;
if (doc.Pages.Count == 1)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
tl = g.CreateTextLayout();
tl.MarginAll = 72;
tl.MaxWidth = page.Size.Width;
tl.DefaultFormat.Font = fnt;
tl.DefaultFormat.FontBold = true;
tl.DefaultFormat.FontSize = 20;
tl.Append("PDF/A-3A Document");
// PerformLayout is done automatically in a new TextLayout or after a Clear():
//tl.PerformLayout(true);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", 0));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y = tl.ContentRectangle.Bottom + gap;
seParagraph.ContentItems.Add(new McidContentItemLink(0));
}
// Add some sample paragraphs tagged according to PDF/A rules:
for (int i = 1; i <= 3; ++i)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
var sb = new StringBuilder();
sb.Append(string.Format("Paragraph {0} on page {1}: ", i, pageNo));
sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10));
var para = sb.ToString();
tl.Clear();
tl.DefaultFormat.FontSize = 14;
tl.DefaultFormat.FontBold = false;
tl.MarginTop = y;
tl.Append(para);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", i));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y += tl.ContentHeight + gap;
// Add content item to paragraph StructElement:
seParagraph.ContentItems.Add(new McidContentItemLink(i));
// PDF/A-3 allows embedding files into document, but they should be associated with some document element
// add embedded file associated with seParagraph:
var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
// ModificationDate and MimeType should be specified in case of PDF/A:
ef1.ModificationDate = date;
ef1.MimeType = "text/plain";
var fn = string.Format("Page{0}_Paragraph{1}.txt", pageNo, i);
var fs1 = FileSpecification.FromEmbeddedStream(fn, ef1);
// UnicodeFile.FileName should be specified for PDF/A compliance:
fs1.UnicodeFile.FileName = fs1.File.FileName;
// Relationship should be specified in case of PDF/A:
fs1.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add(fn, fs1);
seParagraph.AssociatedFiles.Add(fs1);
}
}
// PDF/A-3 allows transparency drawing in PDF file, add some:
var gpage = doc.Pages [0].Graphics;
gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));
// PDF/A-3 allows using FormXObjects, add one with transparency:
var r = new RectangleF(0, 0, 144, 72);
var fxo = new FormXObject(doc, r);
var gfxo = fxo.Graphics;
gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet));
TextFormat tf = new TextFormat()
{
Font = fnt,
FontSize = 16,
ForeColor = Color.FromArgb(100, Color.Black),
};
gfxo.DrawString("FormXObject", tf, r, TextAlignment.Center, ParagraphAlignment.Center);
gfxo.DrawRectangle(r, Color.Blue, 3);
gpage.DrawForm(fxo, new RectangleF(300, 250, r.Width, r.Height), null, ImageAlign.ScaleImage);
// PDF/A-3 allows using embedded files, but each embedded file must be associated with a document's element:
EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
// ModificationDate and MimeType should be specified for EmbeddedFile in PDF/A:
ef.ModificationDate = date;
ef.MimeType = "application/msword";
var fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs);
// Associate embedded file with the document:
doc.AssociatedFiles.Add(fs);
// Add an attachment associated with an annotation:
var sa = new StampAnnotation()
{
UserName = "Minerva",
Font = fnt,
Rect = new RectangleF(300, 36, 220, 72),
};
sa.Flags |= AnnotationFlags.Print;
// Use a FormXObject to represent the stamp annotation:
var stampFxo = new FormXObject(doc, new RectangleF(PointF.Empty, sa.Rect.Size));
var gstampFxo = stampFxo.Graphics;
gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green));
gstampFxo.DrawString("Stamp Annotation\nassociated with minerva.jpg", tf, stampFxo.Bounds, TextAlignment.Center, ParagraphAlignment.Center);
gstampFxo.DrawRectangle(stampFxo.Bounds, Color.Green, 3);
//
sa.AppearanceStreams.Normal.Default = stampFxo;
doc.Pages [0].Annotations.Add(sa);
ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "Images", "minerva.jpg"));
ef.ModificationDate = date;
ef.MimeType = "image/jpeg";
fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("minerva.jpg", fs);
sa.AssociatedFiles.Add(fs);
// Mark the document as conforming to Tagged PDF conventions (required for PDF/A):
doc.MarkInfo.Marked = true;
// Metadata.CreatorTool and DocumentInfo.Creator should be the same for a PDF/A document:
doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
// A title should be specified for PDF/A document:
doc.Metadata.Title = "GcPdf Document";
doc.ViewerPreferences.DisplayDocTitle = true;
// Done:
doc.Save(stream);
}
}
}
using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Common;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Structure;
using GrapeCity.Documents.Pdf.MarkedContent;
using GrapeCity.Documents.Pdf.Graphics;
using GrapeCity.Documents.Pdf.Annotations;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace GcPdfWeb.Samples.Basics
{
// This sample shows how to create a PDF/A-3u compliant document.
public class PdfA
{
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);
// Mark the document as PDF/A-3u conformant:
doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;
var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
var gap = 36;
// PDF/A-3a requires all content to be tagged so create and populate StructElement when rendering:
StructElement sePart = new StructElement("Part");
doc.StructTreeRoot.Children.Add(sePart);
TextLayout tl = null;
// Add 3 pages with sample content tagged according to PDF/A rules:
for (int pageNo = 1; pageNo <= 3; ++pageNo)
{
// add page
var page = doc.Pages.Add();
var g = page.Graphics;
float y = 72;
if (doc.Pages.Count == 1)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
tl = g.CreateTextLayout();
tl.MarginAll = 72;
tl.MaxWidth = page.Size.Width;
tl.DefaultFormat.Font = fnt;
tl.DefaultFormat.FontBold = true;
tl.DefaultFormat.FontSize = 20;
tl.Append("PDF/A-3A Document");
// PerformLayout is done automatically in a new TextLayout or after a Clear():
//tl.PerformLayout(true);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", 0));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y = tl.ContentRectangle.Bottom + gap;
seParagraph.ContentItems.Add(new McidContentItemLink(0));
}
// Add some sample paragraphs tagged according to PDF/A rules:
for (int i = 1; i <= 3; ++i)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
var sb = new StringBuilder();
sb.Append(string.Format("Paragraph {0} on page {1}: ", i, pageNo));
sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10));
var para = sb.ToString();
tl.Clear();
tl.DefaultFormat.FontSize = 14;
tl.DefaultFormat.FontBold = false;
tl.MarginTop = y;
tl.Append(para);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", i));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y += tl.ContentHeight + gap;
// Add content item to paragraph StructElement:
seParagraph.ContentItems.Add(new McidContentItemLink(i));
// PDF/A-3 allows embedding files into document, but they should be associated with some document element
// add embedded file associated with seParagraph:
var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
// ModificationDate and MimeType should be specified in case of PDF/A:
ef1.ModificationDate = date;
ef1.MimeType = "text/plain";
var fn = string.Format("Page{0}_Paragraph{1}.txt", pageNo, i);
var fs1 = FileSpecification.FromEmbeddedStream(fn, ef1);
// UnicodeFile.FileName should be specified for PDF/A compliance:
fs1.UnicodeFile.FileName = fs1.File.FileName;
// Relationship should be specified in case of PDF/A:
fs1.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add(fn, fs1);
seParagraph.AssociatedFiles.Add(fs1);
}
}
// PDF/A-3 allows transparency drawing in PDF file, add some:
var gpage = doc.Pages [0].Graphics;
gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));
// PDF/A-3 allows using FormXObjects, add one with transparency:
var r = new RectangleF(0, 0, 144, 72);
var fxo = new FormXObject(doc, r);
var gfxo = fxo.Graphics;
gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet));
TextFormat tf = new TextFormat()
{
Font = fnt,
FontSize = 16,
ForeColor = Color.FromArgb(100, Color.Black),
};
gfxo.DrawString("FormXObject", tf, r, TextAlignment.Center, ParagraphAlignment.Center);
gfxo.DrawRectangle(r, Color.Blue, 3);
gpage.DrawForm(fxo, new RectangleF(300, 250, r.Width, r.Height), null, ImageAlign.ScaleImage);
// PDF/A-3 allows using embedded files, but each embedded file must be associated with a document's element:
EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
// ModificationDate and MimeType should be specified for EmbeddedFile in PDF/A:
ef.ModificationDate = date;
ef.MimeType = "application/msword";
var fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs);
// Associate embedded file with the document:
doc.AssociatedFiles.Add(fs);
// Add an attachment associated with an annotation:
var sa = new StampAnnotation()
{
UserName = "Minerva",
Font = fnt,
Rect = new RectangleF(300, 36, 220, 72),
};
sa.Flags |= AnnotationFlags.Print;
// Use a FormXObject to represent the stamp annotation:
var stampFxo = new FormXObject(doc, new RectangleF(PointF.Empty, sa.Rect.Size));
var gstampFxo = stampFxo.Graphics;
gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green));
gstampFxo.DrawString("Stamp Annotation\nassociated with minerva.jpg", tf, stampFxo.Bounds, TextAlignment.Center, ParagraphAlignment.Center);
gstampFxo.DrawRectangle(stampFxo.Bounds, Color.Green, 3);
//
sa.AppearanceStreams.Normal.Default = stampFxo;
doc.Pages [0].Annotations.Add(sa);
ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "Images", "minerva.jpg"));
ef.ModificationDate = date;
ef.MimeType = "image/jpeg";
fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("minerva.jpg", fs);
sa.AssociatedFiles.Add(fs);
// Mark the document as conforming to Tagged PDF conventions (required for PDF/A):
doc.MarkInfo.Marked = true;
// Metadata.CreatorTool and DocumentInfo.Creator should be the same for a PDF/A document:
doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
// A title should be specified for PDF/A document:
doc.Metadata.Title = "GcPdf Document";
doc.ViewerPreferences.DisplayDocTitle = true;
// Done:
doc.Save(stream);
}
}
}
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Text
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Common
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Structure
Imports GrapeCity.Documents.Pdf.MarkedContent
Imports GrapeCity.Documents.Pdf.Graphics
Imports GrapeCity.Documents.Pdf.Annotations
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
Namespace GcPdfWeb.Samples.Basics
' This sample shows how to create a PDF/A-3u compliant document.
Public Class PdfA
Public Sub CreatePDF(ByVal stream As Stream)
Dim doc = New GcPdfDocument()
Dim [date] = New DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc)
' Mark the document as PDF/A-3u conformant:
doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u
Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"))
Dim gap = 36
' PDF/A-3a requires all content to be tagged so create and populate StructElement when rendering:
Dim sePart As New StructElement("Part")
doc.StructTreeRoot.Children.Add(sePart)
Dim tl As TextLayout = Nothing
' Add 3 pages with sample content tagged according to PDF/A rules:
For pageNo As Integer = 1 To 3
' add page
Dim page = doc.Pages.Add()
Dim g = page.Graphics
Dim y As Single = 72
If doc.Pages.Count = 1 Then
' Create paragraph element:
Dim seParagraph = New StructElement("P") With {.DefaultPage = page}
' Add it to Part element:
sePart.Children.Add(seParagraph)
tl = g.CreateTextLayout()
tl.MarginAll = 72
tl.MaxWidth = page.Size.Width
tl.DefaultFormat.Font = fnt
tl.DefaultFormat.FontBold = True
tl.DefaultFormat.FontSize = 20
tl.Append("PDF/A-3A Document")
' PerformLayout is done automatically in a new TextLayout or after a Clear():
'tl.PerformLayout(true);
' Draw TextLayout within tagged content:
g.BeginMarkedContent(New TagMcid("P", 0))
g.DrawTextLayout(tl, PointF.Empty)
g.EndMarkedContent()
y = tl.ContentRectangle.Bottom + gap
seParagraph.ContentItems.Add(New McidContentItemLink(0))
End If
' Add some sample paragraphs tagged according to PDF/A rules:
For i As Integer = 1 To 3
' Create paragraph element:
Dim seParagraph = New StructElement("P") With {.DefaultPage = page}
' Add it to Part element:
sePart.Children.Add(seParagraph)
Dim sb = New StringBuilder()
sb.Append(String.Format("Paragraph {0} on page {1}: ", i, pageNo))
sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10))
Dim para = sb.ToString()
tl.Clear()
tl.DefaultFormat.FontSize = 14
tl.DefaultFormat.FontBold = False
tl.MarginTop = y
tl.Append(para)
' Draw TextLayout within tagged content:
g.BeginMarkedContent(New TagMcid("P", i))
g.DrawTextLayout(tl, PointF.Empty)
g.EndMarkedContent()
y += tl.ContentHeight + gap
' Add content item to paragraph StructElement:
seParagraph.ContentItems.Add(New McidContentItemLink(i))
' PDF/A-3 allows embedding files into document, but they should be associated with some document element
' add embedded file associated with seParagraph:
Dim ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para))
' ModificationDate and MimeType should be specified in case of PDF/A:
ef1.ModificationDate = [date]
ef1.MimeType = "text/plain"
Dim fn = String.Format("Page{0}_Paragraph{1}.txt", pageNo, i)
Dim fs1 = FileSpecification.FromEmbeddedStream(fn, ef1)
' UnicodeFile.FileName should be specified for PDF/A compliance:
fs1.UnicodeFile.FileName = fs1.File.FileName
' Relationship should be specified in case of PDF/A:
fs1.Relationship = AFRelationship.Unspecified
doc.EmbeddedFiles.Add(fn, fs1)
seParagraph.AssociatedFiles.Add(fs1)
Next i
Next pageNo
' PDF/A-3 allows transparency drawing in PDF file, add some:
Dim gpage = doc.Pages (0).Graphics
gpage.FillRectangle(New RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red))
' PDF/A-3 allows using FormXObjects, add one with transparency:
Dim r = New RectangleF(0, 0, 144, 72)
Dim fxo = New FormXObject(doc, r)
Dim gfxo = fxo.Graphics
gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet))
Dim tf As New TextFormat() With {
.Font = fnt,
.FontSize = 16,
.ForeColor = Color.FromArgb(100, Color.Black)
}
gfxo.DrawString("FormXObject", tf, r, TextAlignment.Center, ParagraphAlignment.Center)
gfxo.DrawRectangle(r, Color.Blue, 3)
gpage.DrawForm(fxo, New RectangleF(300, 250, r.Width, r.Height), Nothing, ImageAlign.ScaleImage)
' PDF/A-3 allows using embedded files, but each embedded file must be associated with a document's element:
Dim ef As EmbeddedFileStream = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"))
' ModificationDate and MimeType should be specified for EmbeddedFile in PDF/A:
ef.ModificationDate = [date]
ef.MimeType = "application/msword"
Dim fs = FileSpecification.FromEmbeddedFile(ef)
fs.UnicodeFile.FileName = fs.File.FileName
fs.Relationship = AFRelationship.Unspecified
doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs)
' Associate embedded file with the document:
doc.AssociatedFiles.Add(fs)
' Add an attachment associated with an annotation:
Dim sa = New StampAnnotation() With {
.UserName = "Minerva",
.Font = fnt,
.Rect = New RectangleF(300, 36, 220, 72)
}
sa.Flags = sa.Flags Or AnnotationFlags.Print
' Use a FormXObject to represent the stamp annotation:
Dim stampFxo = New FormXObject(doc, New RectangleF(PointF.Empty, sa.Rect.Size))
Dim gstampFxo = stampFxo.Graphics
gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green))
gstampFxo.DrawString("Stamp Annotation" & vbLf & "associated with minerva.jpg", tf, stampFxo.Bounds, TextAlignment.Center, ParagraphAlignment.Center)
gstampFxo.DrawRectangle(stampFxo.Bounds, Color.Green, 3)
'
sa.AppearanceStreams.Normal.Default = stampFxo
doc.Pages (0).Annotations.Add(sa)
ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "Images", "minerva.jpg"))
ef.ModificationDate = [date]
ef.MimeType = "image/jpeg"
fs = FileSpecification.FromEmbeddedFile(ef)
fs.UnicodeFile.FileName = fs.File.FileName
fs.Relationship = AFRelationship.Unspecified
doc.EmbeddedFiles.Add("minerva.jpg", fs)
sa.AssociatedFiles.Add(fs)
' Mark the document as conforming to Tagged PDF conventions (required for PDF/A):
doc.MarkInfo.Marked = True
' Metadata.CreatorTool and DocumentInfo.Creator should be the same for a PDF/A document:
doc.Metadata.CreatorTool = doc.DocumentInfo.Creator
' A title should be specified for PDF/A document:
doc.Metadata.Title = "GcPdf Document"
doc.ViewerPreferences.DisplayDocTitle = True
' Done:
doc.Save(stream)
End Sub
End Class
End Namespace
GrapeCityPDF, IronPDF'e kıyasla sınırlı özellikler sunar. IronPDF, PDF/A uyumluluğu, PDF/UA erişilebilirliği, özel kağıt boyutları ve gelişmiş görselleştirme seçenekleri destekler.
IronPDF'in Lisans Modelleri ve Fiyatlandırması Neler?
30 Günlük Para İade Garantisi: Lisans satın alındıktan sonra 30 günlük para iade garantisi alırsınız. Lisans ihtiyaçlarınıza uygun değilse, IronPDF 30 gün içinde paranızı iade etmeyi garanti eder.
Kolay Entegrasyon: Çalışan bir projeye ve ortamınıza IronPDF entegrasyonu, yalnızca tek bir satır kod kullanarak sorunsuz bir süreçtir. Bu, NuGet Paket yöntemi ile entegre edilirken veya doğrudan internetten indirilip ortamınıza entegre edildiğinde başarılabilir.
Süresiz Lisanslama: Her lisans yalnızca bir kez satın alınır ve yenileme gerekliliği yoktur.
Ücretsiz Destek ve Ürün Güncellemeleri: Her lisans, ürünün arkasındaki ekipten doğrudan destek ve ayrıca bir yıl boyunca ücretsiz ürün güncellemeleri ile birlikte gelir. Herhangi bir zamanda uzantılar satın almak mümkündür. Satın almadan önce uzantılar görüntülenebilir.
Anında Lisanslar: Ödeme alındığında, kayıtlı lisans anahtarları gönderilir.
Tüm lisanslar, kurulum, geliştirme ve üretim için süresizdir.
IronPDF, Boosie gibi Modern Web Çerçevelerini Nasıl Destekler?
Modern PDF oluşturma, görsel süreç temsilcilerinden faydalanır. Bu Bootstrap 5 örneği, kartlar, rozetler ve adım göstergeleri ile iş akışı zaman çizelgelerini render etme yeteneğini gösteren IronPDF'in yeteneğini gösterir. Tam çerçeve desteği için Bootstrap & Flexbox sorun giderme kılavuzuna bakın:
using IronPdf;
var renderer = new ChromePdfRenderer();
string workflowTimeline = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_66___ rel='stylesheet'>
<style>
.timeline-item { position: relative; padding-left: 40px; margin-bottom: 30px; }
.timeline-item::before { content: ''; position: absolute; left: 0; top: 0; width: 20px; height: 20px;
background: #0d6efd; border-radius: 50%; border: 3px solid white; box-shadow: 0 0 0 2px #0d6efd; }
.timeline-item::after { content: ''; position: absolute; left: 9px; top: 20px; width: 2px; height: calc(100% + 10px);
background: #dee2e6; }
.timeline-item:last-child::after { display: none; }
@media print { .timeline-item { page-break-inside: avoid; } }
</style>
</head>
<body class='bg-light'>
<div class='container py-4'>
<div class='text-center mb-5'>
<h1 class='display-6 fw-bold'>PDF Generation Workflow</h1>
<p class='lead text-muted'>From HTML to Professional PDF Documents</p>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 1: Initialize Renderer</h4>
<span class='badge bg-primary'>Setup</span>
</div>
<p class='card-text'>Create ChromePdfRenderer instance with Chrome V8 engine for accurate HTML rendering.</p>
<div class='bg-light p-2 rounded'>
<code>var renderer = new ChromePdfRenderer();</code>
</div>
<div class='mt-2'>
<small class='text-muted'>✓ Chrome V8 Engine • ✓ Full CSS3 Support • ✓ JavaScript Ready</small>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 2: Prepare HTML Content</h4>
<span class='badge bg-info'>Content</span>
</div>
<p class='card-text'>Design your document using modern HTML5, CSS3 (Flexbox/Grid), and optional JavaScript.</p>
<div class='row g-2'>
<div class='col-4'><span class='badge bg-success w-100'>HTML5</span></div>
<div class='col-4'><span class='badge bg-success w-100'>CSS3</span></div>
<div class='col-4'><span class='badge bg-success w-100'>JavaScript</span></div>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 3: Render to PDF</h4>
<span class='badge bg-warning text-dark'>Processing</span>
</div>
<p class='card-text'>Convert HTML to PDF with pixel-perfect accuracy and sub-second performance.</p>
<div class='bg-light p-2 rounded'>
<code>var pdf = renderer.RenderHtmlAsPdf(htmlContent);</code>
</div>
<div class='progress mt-2' style='height: 8px;'>
<div class='progress-bar bg-warning' style='width: 100%'></div>
</div>
<small class='text-muted d-block mt-1'>Average render time: 0.9 seconds</small>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 4: Save or Stream</h4>
<span class='badge bg-success'>Output</span>
</div>
<p class='card-text'>Export to file, stream, or byte array for flexible deployment options.</p>
<div class='bg-light p-2 rounded'>
<code>pdf.SaveAs("document.pdf");</code>
</div>
<div class='mt-2'>
<span class='badge bg-outline-secondary me-1'>File</span>
<span class='badge bg-outline-secondary me-1'>Stream</span>
<span class='badge bg-outline-secondary'>Byte Array</span>
</div>
</div>
</div>
</div>
<div class='alert alert-info'>
<strong>Comparison Note:</strong> GrapeCity PDF Viewer focuses on document viewing and annotation, not HTML-to-PDF generation. IronPDF specializes in creating PDFs from modern web content with full Bootstrap and framework support.
</div>
<div class='card shadow-sm border-primary'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Key Advantages</h5>
</div>
<div class='card-body'>
<div class='row'>
<div class='col-md-6'>
<h6 class='text-primary'>IronPDF Strengths</h6>
<ul class='small'>
<li>Complete HTML-to-PDF workflow</li>
<li>Bootstrap 5 framework support</li>
<li>Async/await for scalability</li>
<li>Cross-platform deployment</li>
</ul>
</div>
<div class='col-md-6'>
<h6 class='text-muted'>GrapeCity Focus</h6>
<ul class='small'>
<li>PDF viewing and annotation</li>
<li>UI component for display</li>
<li>Limited generation features</li>
<li>Viewer-centric approach</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(workflowTimeline);
pdf.SaveAs("workflow-timeline.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string workflowTimeline = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_66___ rel='stylesheet'>
<style>
.timeline-item { position: relative; padding-left: 40px; margin-bottom: 30px; }
.timeline-item::before { content: ''; position: absolute; left: 0; top: 0; width: 20px; height: 20px;
background: #0d6efd; border-radius: 50%; border: 3px solid white; box-shadow: 0 0 0 2px #0d6efd; }
.timeline-item::after { content: ''; position: absolute; left: 9px; top: 20px; width: 2px; height: calc(100% + 10px);
background: #dee2e6; }
.timeline-item:last-child::after { display: none; }
@media print { .timeline-item { page-break-inside: avoid; } }
</style>
</head>
<body class='bg-light'>
<div class='container py-4'>
<div class='text-center mb-5'>
<h1 class='display-6 fw-bold'>PDF Generation Workflow</h1>
<p class='lead text-muted'>From HTML to Professional PDF Documents</p>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 1: Initialize Renderer</h4>
<span class='badge bg-primary'>Setup</span>
</div>
<p class='card-text'>Create ChromePdfRenderer instance with Chrome V8 engine for accurate HTML rendering.</p>
<div class='bg-light p-2 rounded'>
<code>var renderer = new ChromePdfRenderer();</code>
</div>
<div class='mt-2'>
<small class='text-muted'>✓ Chrome V8 Engine • ✓ Full CSS3 Support • ✓ JavaScript Ready</small>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 2: Prepare HTML Content</h4>
<span class='badge bg-info'>Content</span>
</div>
<p class='card-text'>Design your document using modern HTML5, CSS3 (Flexbox/Grid), and optional JavaScript.</p>
<div class='row g-2'>
<div class='col-4'><span class='badge bg-success w-100'>HTML5</span></div>
<div class='col-4'><span class='badge bg-success w-100'>CSS3</span></div>
<div class='col-4'><span class='badge bg-success w-100'>JavaScript</span></div>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 3: Render to PDF</h4>
<span class='badge bg-warning text-dark'>Processing</span>
</div>
<p class='card-text'>Convert HTML to PDF with pixel-perfect accuracy and sub-second performance.</p>
<div class='bg-light p-2 rounded'>
<code>var pdf = renderer.RenderHtmlAsPdf(htmlContent);</code>
</div>
<div class='progress mt-2' style='height: 8px;'>
<div class='progress-bar bg-warning' style='width: 100%'></div>
</div>
<small class='text-muted d-block mt-1'>Average render time: 0.9 seconds</small>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 4: Save or Stream</h4>
<span class='badge bg-success'>Output</span>
</div>
<p class='card-text'>Export to file, stream, or byte array for flexible deployment options.</p>
<div class='bg-light p-2 rounded'>
<code>pdf.SaveAs("document.pdf");</code>
</div>
<div class='mt-2'>
<span class='badge bg-outline-secondary me-1'>File</span>
<span class='badge bg-outline-secondary me-1'>Stream</span>
<span class='badge bg-outline-secondary'>Byte Array</span>
</div>
</div>
</div>
</div>
<div class='alert alert-info'>
<strong>Comparison Note:</strong> GrapeCity PDF Viewer focuses on document viewing and annotation, not HTML-to-PDF generation. IronPDF specializes in creating PDFs from modern web content with full Bootstrap and framework support.
</div>
<div class='card shadow-sm border-primary'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Key Advantages</h5>
</div>
<div class='card-body'>
<div class='row'>
<div class='col-md-6'>
<h6 class='text-primary'>IronPDF Strengths</h6>
<ul class='small'>
<li>Complete HTML-to-PDF workflow</li>
<li>Bootstrap 5 framework support</li>
<li>Async/await for scalability</li>
<li>Cross-platform deployment</li>
</ul>
</div>
<div class='col-md-6'>
<h6 class='text-muted'>GrapeCity Focus</h6>
<ul class='small'>
<li>PDF viewing and annotation</li>
<li>UI component for display</li>
<li>Limited generation features</li>
<li>Viewer-centric approach</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(workflowTimeline);
pdf.SaveAs("workflow-timeline.pdf");
Imports IronPdf
Dim renderer = New ChromePdfRenderer()
Dim workflowTimeline As String = "
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_66___ rel='stylesheet'>
<style>
.timeline-item { position: relative; padding-left: 40px; margin-bottom: 30px; }
.timeline-item::before { content: ''; position: absolute; left: 0; top: 0; width: 20px; height: 20px;
background: #0d6efd; border-radius: 50%; border: 3px solid white; box-shadow: 0 0 0 2px #0d6efd; }
.timeline-item::after { content: ''; position: absolute; left: 9px; top: 20px; width: 2px; height: calc(100% + 10px);
background: #dee2e6; }
.timeline-item:last-child::after { display: none; }
@media print { .timeline-item { page-break-inside: avoid; } }
</style>
</head>
<body class='bg-light'>
<div class='container py-4'>
<div class='text-center mb-5'>
<h1 class='display-6 fw-bold'>PDF Generation Workflow</h1>
<p class='lead text-muted'>From HTML to Professional PDF Documents</p>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 1: Initialize Renderer</h4>
<span class='badge bg-primary'>Setup</span>
</div>
<p class='card-text'>Create ChromePdfRenderer instance with Chrome V8 engine for accurate HTML rendering.</p>
<div class='bg-light p-2 rounded'>
<code>var renderer = new ChromePdfRenderer();</code>
</div>
<div class='mt-2'>
<small class='text-muted'>✓ Chrome V8 Engine • ✓ Full CSS3 Support • ✓ JavaScript Ready</small>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 2: Prepare HTML Content</h4>
<span class='badge bg-info'>Content</span>
</div>
<p class='card-text'>Design your document using modern HTML5, CSS3 (Flexbox/Grid), and optional JavaScript.</p>
<div class='row g-2'>
<div class='col-4'><span class='badge bg-success w-100'>HTML5</span></div>
<div class='col-4'><span class='badge bg-success w-100'>CSS3</span></div>
<div class='col-4'><span class='badge bg-success w-100'>JavaScript</span></div>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 3: Render to PDF</h4>
<span class='badge bg-warning text-dark'>Processing</span>
</div>
<p class='card-text'>Convert HTML to PDF with pixel-perfect accuracy and sub-second performance.</p>
<div class='bg-light p-2 rounded'>
<code>var pdf = renderer.RenderHtmlAsPdf(htmlContent);</code>
</div>
<div class='progress mt-2' style='height: 8px;'>
<div class='progress-bar bg-warning' style='width: 100%'></div>
</div>
<small class='text-muted d-block mt-1'>Average render time: 0.9 seconds</small>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 4: Save or Stream</h4>
<span class='badge bg-success'>Output</span>
</div>
<p class='card-text'>Export to file, stream, or byte array for flexible deployment options.</p>
<div class='bg-light p-2 rounded'>
<code>pdf.SaveAs(""document.pdf"");</code>
</div>
<div class='mt-2'>
<span class='badge bg-outline-secondary me-1'>File</span>
<span class='badge bg-outline-secondary me-1'>Stream</span>
<span class='badge bg-outline-secondary'>Byte Array</span>
</div>
</div>
</div>
</div>
<div class='alert alert-info'>
<strong>Comparison Note:</strong> GrapeCity PDF Viewer focuses on document viewing and annotation, not HTML-to-PDF generation. IronPDF specializes in creating PDFs from modern web content with full Bootstrap and framework support.
</div>
<div class='card shadow-sm border-primary'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Key Advantages</h5>
</div>
<div class='card-body'>
<div class='row'>
<div class='col-md-6'>
<h6 class='text-primary'>IronPDF Strengths</h6>
<ul class='small'>
<li>Complete HTML-to-PDF workflow</li>
<li>Bootstrap 5 framework support</li>
<li>Async/await for scalability</li>
<li>Cross-platform deployment</li>
</ul>
</div>
<div class='col-md-6'>
<h6 class='text-muted'>GrapeCity Focus</h6>
<ul class='small'>
<li>PDF viewing and annotation</li>
<li>UI component for display</li>
<li>Limited generation features</li>
<li>Viewer-centric approach</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(workflowTimeline)
pdf.SaveAs("workflow-timeline.pdf")
Çıkış: Bootstrap 5 kartları, rozetler, ilerleme çubukları ve özel zaman çizelgesi tarzı ile profesyonel bir iş akışı zaman çizelgesi PDF'si. IronPDF, tüm konumlandırmalar, flex box yerleşimleri ve yardımcı sınıfların doğru render edişini, karmaşık görsel tasarımlar için kapsamlı CSS3 desteği gösterir.
Detaylı Bootstrap uyumluluğu için Bootstrap & Flexbox CSS Kılavuzu'na bakın. IronPDF, zengin tipografi için web fontları ve ikonları destekler.
Lite Paketi Fiyatlandırması Nedir?
- 1 Geliştirici
- 1 Konum
- 1 Proje
- Süresiz Lisans
Bu paket, bir geliştiricinin Iron Software'i tek bir uygulama için bir konumda kullanmasına olanak tanır. Lisanslar, organizasyonlar veya ajans/müşteri ilişkileri dışına aktarılamaz. Ek kapsama olmadan OEM yeniden dağıtımı ve SaaS kullanımı içermez.
Fiyatlandırma: yıl başına $799 ile başlar.
Professional Lisansı Neleri İçerir?
- 10 Geliştirici
- 10 Konum
- 10 Proje
- Süresiz Lisans
Bu lisans, on geliştiricinin Iron Software'i en fazla on konumda kullanmasına olanak sağlar. Bunu sınırsız web sitelerinde, intranet uygulamalarında veya masaüstü yazılımlarında kullanabilirsiniz. Lisanslar, organizasyonlar dışında aktarılabilir değildir. Ek kapsama olmadan OEM yeniden dağıtımı ve SaaS kullanımı içermez. Entegre edilebilir 10 projeye kadar.
Fiyatlandırma: Yılda $1,199 ile başlar.
Sınırsız Lisansın Avantajları Nelerdir?
- Sınırsız Geliştirici
- Sınırsız Konum
- Sınırsız Proje
- Süresiz Lisans
Tek bir organizasyonda sınırsız geliştiricinin sınırsız konumda Iron Software kullanabilmesini sağlar. Sınırsız uygulamada kullanım. Lisanslar, organizasyonlar dışında aktarılabilir değildir. Ek kapsama olmadan OEM yeniden dağıtımı ve SaaS kullanımı içermez.
Fiyatlandırma: Yılda $2999 ile başlar.
Telif Ücretsiz Yeniden Dağıtım: Bu, temel lisans kapsamında belirtilen proje sayısına göre farklı paketlenmiş ticari ürünlerin bir parçası olarak Iron Software'yi dağıtmanıza olanak tanır (telif ücreti ödemek zorunda kalmadan). Bu, Iron Software'nin, temel lisans kapsamında belirtilen proje sayısına dayalı olarak, SaaS yazılım hizmetlerinde kullanılmasını sağlayacaktır.
Fiyatlandırma: Yılda $1599 ile başlar.
IronPDF, Profesyonel lisansı 'En Popüler' olarak vurgulanan üç lisans seviyesi sunar; $999 için 10 geliştirici, 10 konum ve 10 proje.
GrapeCity PDF'nin Lisans Modelleri ve Fiyatlandırması Nedir?
PDF Lisansı İçin Belgeler Neleri İçerir?
- 1 Geliştirici Lisansı içerir
- 1 Dağıtım Konumu
Destek ve bakım olmaksızın bir geliştirici lisansı ve bir dağıtım konumu içerir.
Fiyatlandırma: Yılda $1,199 ile başlar.
PDF Sınırsız Belgeleri Nedir?
- 1 Geliştirici Lisansı içerir
- Sınırsız Dağıtım Konumları
Sınırsız dağıtım konumları ile bir geliştirici lisansı içerir. Destek ve bakım yok. GrapeCity SaaS ve OEM'yi desteklemiyor.
Fiyatlandırma: Yılda $2799 ile başlar.
PDF Belge Takımı Sınırsız Ne Sağlıyor?
- 5 Geliştirici Lisansı içerir
- Sınırsız Dağıtım Konumları
Sınırsız dağıtım konumları ile beş geliştirici lisansı içerir. Destek ve bakım yok. GrapeCity SaaS ve OEM'yi desteklemiyor.
Fiyatlandırma: Yılda $5799 ile başlar.
`GrapeCity`'s Documents for PDF pricing structure offers three tiers to accommodate different development team sizes and distribution needs.
IronPDF Lite Tek-Geliştirici paketi, $799 için 1 yıllık destek içerir. GrapeCity PDF Tek-Geliştirici paketi, destek olmaksızın $1,199 tutarındadır. IronPDF Profesyonel Paketi, $1,199 için on geliştirici ile bir yıllık destek içerir. GrapeCity yalnızca $5799 karşılığında 5 geliştirici paketi sunar. IronPDF lisanslama seçenekleri hakkında daha fazla bilgi için resmi lisans sayfasını ziyaret edin.
IronPDF Lite ve Profesyonel paketleri SaaS hizmeti, OEM ve 5 yıllık destek seçeneklerini içerir. Beş yıllık destek, SaaS ve OEM ile Lite bir geliştirici paketi $2897 tutarındadır. GrapeCity SaaS, OEM veya 5 yıllık destek sunmaz. Beş yıllık destek, SaaS ve OEM ile Iron Profesyonel 10 geliştirici paketi $3397 tutarındadır. GrapeCity 10 geliştirici seçeneği içermez. Lisans uzantıları ve uzun vadeli destek için yükseltme seçenekleri hakkında bilgi edinin.
Bir .NET Projesi İçin Hangi PDF Kütüphanesi Seçilmeli?
GrapeCity PDF için Belgeler, masaüstü uygulamalarında dışa/impor alım, AcroForms oluşturma ve PDF yürütmesi sağlar. Ancak, form oluşturma, dijital imzalar ve ek açıklama desteği dahil tam PDF işleme için IronPDF gelişmiş özellikler sunar.
IronPDF daha yüksek doğruluk sağlar. Rakipler, başarısız resim dönüştürme veya bilinmeyen karakterler gibi sorunlarla karşılaşabilir. IronPDF doğru sonuçlar verir. Chrome render motoru piksel mükemmel render'ı sağlar, piksel mükemmel HTML to PDF kılavuzu kullanılarak doğrulanmıştır. Optimizasyon için IronPDF performans yardımı kılavuzuna bakın.
IronPDF rekabetçi lisanslama ve destek sunar, sürekli maliyetler olmadan. IronPDF, tamamlanmış özellik paketleriyle $799 ile başlar. GrapeCity PDF, yılda $1649 ile başlar. IronPDF, tek bir fiyatla birçok platformu destekler. Kurumsal dağıtımlar için IronPDF, yüksek performanslı üretim için asıng ve çoklithread yetenekleri sağlar.
Tüm özellikleri keşfetmek için ücretsiz deneme sürümüne erişebilirsiniz. Tüm Iron Suite'i satın almak, iki fiyatına beş ürün sunar. IronPDF lisanslama hakkında detaylar için Iron Software'ın Iron Suite ürün sayfasını ziyaret edin ve tam paket bilgileri alın.
GrapeCity PDF için Belgeler, ilgili sahibinin tescilli ticari markasıdır. Bu site, GrapeCity PDF için Belgeler ile ilişkili değil, onaylanmış ya da sponsor olunmamıştır. Tüm ürün adları, logolar ve markalar kendi sahiplerinin mülkiyetindedir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.Sıkça Sorulan Sorular
.NET'te HTML'yi PDF'ye nasıl dönüştürebilirim?
HTML dizelerini PDF'lere dönüştürmek için IronPDF'in RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca, HTML dosyalarını PDF'lere dönüştürmek için RenderHtmlFileAsPdf yöntemini kullanabilirsiniz.
NuGet kullanarak bir PDF kütüphanesinin kurulum adımları nelerdir?
IronPDF'i NuGet kullanarak yüklemek için, Visual Studio'yu açın, 'NuGet Paketlerini Yönet' seçeneğine gidin, 'IronPdf' arayın ve projenize eklemek için 'Install' tıklayın.
.NET için GrapeCity PDF Viewer alternatifleri nelerdir?
IronPDF, .NET Core, .NET 5, Framework ve Standard için kapsamlı destek sunarak kullanıcı dostu bir deneyim sağlayan GrapeCity PDF Viewer için uygun bir alternatiftir.
.NET kütüphanesi ile PDF dosyalarını nasıl oluşturabilir ve okuyabilirim?
IronPDF kullanarak, HTML'yi PDF olarak render etmek için IronPdf ad alanını ekleyerek ve HtmlToPdf sınıfını kullanarak PDF'ler oluşturabilirsiniz. PDF'leri okumak için, PdfDocument sınıfı kullanarak içeriğe erişebilir ve manipüle edebilirsiniz.
Bir PDF kütüphanesi için mevcut lisanslama seçenekleri nelerdir?
IronPDF, tek geliştirici için Lite Package, 10 geliştiriciye kadar Professional License ve ekipler için Unlimited License dahil olmak üzere bir dizi lisanslama seçeneği sunar; tümü süresiz lisanslama ve destek seçenekleri ile birlikte.
Neden IronPDF'i diğer PDF çözümlerine tercih etmeliyim?
IronPDF, doğruluk, kapsamlı özellikler, rekabetçi lisanslama ve kapsamlı destek seçenekleri için önerilir. Birden fazla platform için destek sunar ve rekabetçi bir fiyat sunar.
Bir PDF kütüphanesini satın almadan önce deneyebilir miyim?
Evet, IronPDF, tüm mevcut özellikleri keşfetmenizi sağlayan ücretsiz bir deneme sunar, böylece satın alma kararı verebilirsiniz. Ayrıca, Iron Suite paketi, tüm Iron Software ürünlerine indirimli bir fiyatla erişim sağlar.
PDF dosyalarının kullanımındaki bazı dezavantajlar nelerdir?
PDF'ler boyutları nedeniyle e-posta yoluyla paylaşımda zor olabilir, Word belgelerine kıyasla mobil cihazlarda net görünmeyebilir ve düzenleme veya güncelleme için belirli yazılımlar gerektirebilir.



