IronPDF ve Textcontrol Arasındaki Karşılaştırma
IronPDF, .NET uygulamaları için Chrome V8 render motoru ile HTML'den PDF üretiminde uzmanlaşmışken, GrapeCity PDF, PDF görüntüleme ve açıklama özelliklerine odaklanır, bu da modern web içeriği desteğiyle tamamlanmış PDF oluşturma yetenekleri arayan geliştiriciler için IronPDF'yi üstün kılar.
PDF, Taşınabilir Belge Formatı anlamına gelir. Bu, belgelerin birçok farklı cihazda geleneksel şekilde görüntülenmesine izin veren bir dosya türüdür. PDF'ler genellikle potansiyel işverenlerle başvuru belgeleri veya müşterilerle faturalar gibi önemli belgeleri paylaşmak için kullanılır.
Popülerliğine rağmen, PDF'lerin bazı sınırlamaları vardır. Örneğin, alıcıların bir PDF okuyucuya ihtiyaç duymaları nedeniyle e-posta aracılığıyla PDF paylaşamazsınız. PDF'ler, Word belgeleri gibi mobil cihazlarda net bir şekilde görüntülenmeyebilir. Ayrıca, PDF'lerin içeriğini değiştirmek veya güncellemek için düzenleme yazılımı gerektirir, Word belgeleri gibi değildir. Ancak, PDF dosyaları tüm cihazlarda tutarlı bir görünüm sağlar - ister PC ister Mac olsun. Bu güvenilirlik, JPEG veya GIF gibi diğer belge türlerinde bulunmayan bir standardı PDF'lere kılar.
Bu makalede, iki .NET PDF kütüphanesini inceleyeceğiz:
- IronPDF
GrapeCityPDF
IronPDF Nedir ve GrapeCity ile Nasıl Karşılaştırılır?
IronPDF, PDF belgeleri oluşturma, okuma ve düzenleme işlemlerini minimum kodla sağlayan bir .NET kütüphanesidir. Bu makale, IronPDF ile PDF dosyalarının nasıl oluşturulacağını gösterir. Visual Studio veya C# temellerini ve HTML'yi çalışma bilgisine sahip olmanız gerekir.
Uygulamalar yazmak, derlemek ve çalıştırmak için Visual Studio'ya, mantık ve kod için C#'a ve başlıklar, görüntüler ve paragraflar dahil olmak üzere PDF dosyalarını biçimlendirmek için HTML'ye ihtiyacınız var. IronPDF, .NET Core, .NET 5, Framework ve Standard'ı tam anlamıyla destekler. ASP.NET uygulamaları için, IronPDF web sayfalarını PDF'e dönüştürmede sorunsuz bir entegrasyon sağlar.
Temel C# ve HTML bilgisi verilirse, C# ile minimum kod ile PDF dosyaları oluşturabilirsiniz. Resmi IronPDF özellikler sayfasını ziyaret ederek daha fazla bilgi edinin. Programlı PDF oluşturma için IronPDF, temel HTML dönüşümün de ötesinde geniş yetenekler sunar.
IronPDF'yi .NET Projeme Nasıl Kurarım?
Çözümler geliştirmek, IronPDF NuGet Paketini yüklemeyi gerektirir. Menü Çubuğundan "Proje"yi seçin. Açılır menüden "NuGet Paketlerini Yönet"i seçin. Ayrıntılı talimatlar için kurulum genel bakışına bakın. Bu pencere görüntülenecektir:
IronPDF ararken boş bir arama sonucu gösteren NuGet Paket Yöneticisi arayüzü, paketin mevcut olmayabileceğini veya bağlantı sorunlarının olabileceğini gösteriyor
"Gezin"i seçin ve bu pencereyi görün:
Entity Framework Core ve Newtonsoft.Json'un sırasıyla veritabanı işlemleri ve JSON işleme için en popüler paketlerden bazıları olduğu temel .NET kütüphanelerine kolay erişim sağlayan NuGet Paket Yöneticisi.
Arama kutusuna 'IronPDF' yazıp 'Enter' tuşuna basın. Platforma özgü yapılandırmalar dahil ileri yükleme seçenekleri için belgeleri kontrol edin. Görmeniz gerekiyor:
Her paket için indirme sayıları ve sürüm numaraları görünür olan çeşitli IronPDF paketleri mevcut olan NuGet Paket Yöneticisi arayüzü.
IronPDF'i seçin:
NuGet Paket Yöneticisi arayüzü, alternatif PDF kütüphaneleri de listelenmiş olan IronPDF (sürüm 2021.3.1) paketini yükleme için seçilmiş olarak göstermektedir, PDFCore ve çeşitli IronPDF render varlıkları dahil.
'Yükle'ye tıklayın. Başarılı yüklemeden sonra:
Visual Studio'da IronPDF kurulumu süreci, NuGet Paket Yöneticisinin IronPDF sürümü 2021.3.1'i ve bağımlılıklarını yüklemesini gösterir
Yüklemeyi tamamlamak için 'OK'ye basın. Windows platformlarını destekleyen IronPDF, Windows 10, 11 ve Sunucu sürümleri dahil. Kütüphane ayrıca Linux ve macOS için çapraz platform geliştirmeyi destekler.
IronPDF ile Nasıl PDF Oluştururum?
Dosyanın üstüne IronPDF ad alanını ekleyin. VB.NET geliştiricileri için benzer işlevsellik mevcuttur:
using IronPdf;
using IronPdf;
Imports IronPdf
Oluşturulan PDF'yi saklamak için bir dosya yoluna ihtiyacınız var. Kullanıcıları dosya adı ve yolu talep etmeye yönlendirmek için SaveFileDialog kullanın. Gelişmiş senaryolar için disk kaydetmeden belleği akışlara PDF dışa aktarımlarını uygulanır:
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
SaveFileDialog klasör ve dosya adını seçmek için bir iletişim kutusu açar. Başlangıç Dizini varsayılan olarak D sürücüsüne ayarlıdır, fakat değiştirebilirsiniz. DefaultExtension PDF olarak ayarlanır. Tüm dönüşüm seçeneklerini görmek için HTML to PDF öğreticisini keşfedin.
"if" koşulu, PDF oluşturma kodunu içerir. Sadece iki satır kod ile PDF'ler oluşturursunuz. PdfText, PDF içeriği içeren Zengin Metin kutusu adıdır. Dosya adı SaveFileDialog'dan seçilen dosya yoludur. Web uygulamaları için IronPDF, URL to PDF dönüşümü ve ASPX to PDF dönüşümü desteği sağlıyor.
IronPDF ile Nasıl PDF Okurum?
IronPDF ile PDF dosyalarını okumak için yalnızca iki satır kod gereklidir. Gelişmiş çıkarım için, metin ve görüntüleri çıkarma kılavuzunu inceleyin.
Bu ithalatları 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 fonksiyonunuz içine yazın. IronPDF PDF çözümleme 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 izleyicilere tüm bilgiyi çıkarır. Raporlama bileşenleri, bu verileri kaynak olarak kullanır. IronPDF, bellek akışlarından PDF okuma ve web gösterimi için PDF'leri HTML'e dönüştürmeyi destekler.
GrapeCity PDF Hangi Özellikleri Sunar?
GrapeCity Belgeleri, yaygın formatlar için çapraz platform belge yönetimi sağlar. .NET Standard 2.0 kütüphanesi, Adobe Acrobat olmadan PDF belgeleri okur, oluşturur, değiştirir ve kaydeder. Yazı tipi desteği, görüntüler, grafikler, barkodlar, yorumlar, anahatlar, damgalar ve filigranlar sunar.
PDF Manipülasyon Yetenekleri Neler?
GrapeCityPDF, .NET Standard uygulamalarında temel veya karmaşık iş ihtiyaçları için PDF oluşturur. Herhangi bir kaynaktan PDF yükleyebilir, değiştirebilir ve kaydedebilirsiniz. IronPDF, tam PDF düzenleme özelliği sunar, PDF birleştirme/bölme, sayfa ekleme/kaldırma ve sayfa döndürme dahil.
PDF'leri Görüntülere Dönüştürebilir Miyim?
GrapeCityPDF, minimum kod kullanarak kalite kaybı olmadan görüntü olarak PDF'leri kaydeder. IronPDF, PNG, JPEG ve TIFF formatlarını destekleyen, PDF'yi görüntülere rasterleştirme özelliği sağlar.
GrapeCityPDF Bir PDF Görüntüleyici Bileşeni İçeriyor mu?
GrapeCity Belgeleri PDF Görüntüleyici, standart PDF özelliklerini destekleyen hafif bir istemci tarafı görüntüleyicidir. .NET MAUI geliştiricileri için IronPDF, gezinme ve arama işlevselliği ile MAUI uygulamalarında PDF görüntüleme sunar.
Hangi Özellik Türleri Destekleniyor?
GrapeCityPDF, metin, grafik, fotoğraf, açıklamalar ve taslaklar içeren karmaşık PDF'ler oluşturur. IronPDF bu fonksiyonları dijital imzalar, form oluşturma/doldurma, filigran ekleme ve meta verileri yönetimi ile genişletir.
GrapeCityPDF Nasıl Yüklenir?
Kurulum için iki yöntem bulunur. Konteynerleştirilmiş dağıtım için, IronPDF Docker desteği ve esnek üretim için uzak konteyner operasyonu sunar:
- Sıkıştırılmış kaynak dosyalarını indirin.
- Dosyaları bir dizine ayıklayın.
- O dizine gidin.
- Örnekleri derlemek,
SupportApihizmetini başlatmak ve http://localhost:3003'ü açmak içinrun.cmdyürütün. - Detaylar için
readme.MDbakın.
WinForms Sürümü Nasıl Yüklenir?
WinForms Sürümü kurulumu için bu adımları izleyin:
GrapeCity'unComponentOne'undan C1ControlPanel'i indirin.ComponentOneC1ControlPanel.exe ileControlPanelaçın (Visual Studio'yu kapatın).- Kayıtlı e-posta/parola ile oturum açın.
- Yeni kullanıcılar için:
- Kayıt yaptırın ve hesap oluşturun.
- E-posta adresinizi doğrulayın.
- Doğrulama bağlantısı ile etkinleştirin.
- İstenirse anonim kullanıcı olarak ilerleyin.
WinFormsSürüm karosunda Yükle'yi seçin. Tüm sürümleri All Editions onay kutusu aracılığıyla yükleyin.
`GrapeCity`'nin `ComponentOne` çeşitli geliştirme platformları ve çerçevelerine uygun, her biri örnek projeler yükleme seçeneği sunan farklı sürüm opsiyonları sunar.
- Lisans Sözleşmesini görmek için Yükle'ye tıklayın. İncelemeye tabi kabul edin.
- Lisans Sözleşmesini kabul edin ve Ayarlar sayfasını görün. Dizin yolunu kontrol edin ve yüklemeyi başlatın.
`ComponentOne` kurulum yapılandırma ekranı, gizlilik ve veri toplama seçeneklerini gösterir
- Denetim kurulumu sırasında yükleyici ilerlemeyi gösterir. Bu işlem sırasında iptal edilemez.
- Tamamlama anında "Kurulum Başarılı" ekranı görünür. Mevcut yüklü olan sürümü gösterir.
`WinForms` Sürümü yükleyici arayüzü, 65'ten fazla akıllı ve etkili UI kontrolünden oluşan bir suite için basit bir indirme ilerleme çubuğu ve kurulum seçeneği sunar, hızlı Windows Forms geliştirme tasarlanmıştır.
`ComponentOne` yükleme arayüzü, 20183.1.338 sürümü için başarılı bir yükleme mesajı görüntüler ve Ürünler, Aktiviteler, Lisans ve Destek için gezinme sekmeleri içerir
GrapeCity ile Nasıl PDF Oluşturulur?
Aşağıdaki kod, temel GrapeCity PDF oluşturmayı gösterir. JavaScript ile HTML-to-PDF, duyarlı CSS veya özel başlıklar/altlıklar gibi gelişmiş özellikler için IronPDF tam çözümler sunar:
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'ye kıyasla sınırlı özellikler sunar. IronPDF, PDF/A uyumluluğu, PDF/UA erişilebilirliği, özelleştirilebilir kağıt boyutları ve gelişmiş render seçeneklerini destekler.
IronPDF'in Lisans Modelleri ve Fiyatlandırması Nedir?
30 Günlük Para İade Garantisi: Lisans satın alındıktan sonra, 30 günlük para iade garantisi alacaksınız. Lisans ihtiyaçlarınıza iyi uymuyorsa, IronPDF 30 gün içinde paranızı geri garanti eder.
Kolay Entegrasyon: Çalışan bir proje ve ortamınıza IronPDF'i entegre etmek, tek satır kodlu bir süreç ile tamamlanır. Bu, NuGet Paketi yöntemi kullanılarak entegre edilirse veya doğrudan çevrimiçi indirildiğinde ve ortamınıza entegre edildiğinde başarılabilir.
Süresiz Lisanslama: Her lisans sadece bir kez satın alınır, yenileme gereksinimi yoktur.
Ücretsiz Destek ve Ürün Güncellemeleri: Her lisans, ürünün arkasındaki ekipten doğrudan destek ve ayrıca bir yıllık ücretsiz ürün güncellemeleri ile gelir. Herhangi bir noktada uzantılar satın almak mümkündür. Satın almadan önce uzantılar görüntülenebilir.
Anında Lisanslar: Ödeme alınır alınmaz, kayıtlı lisans anahtarları gönderilir.
Tüm lisanslar, sahneleme, geliştirme ve üretim için süresizdir.
IronPDF, Bootstrap gibi Modern Web Çerçevelerini Nasıl Destekliyor?
Modern PDF üretimi, görsel süreç temsillerinden faydalanır. Bu Bootstrap 5 örneği, IronPDF'in kartlar, rozetler ve adım göstergeleri ile iş akışı zaman çizelgeleri renderlama yeteneğini gösterir. Tam çerçeve desteği için Bootstrap & Flexbox sorun giderme rehberi'ne 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 fast 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>
</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 fast 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>
</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 As 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 fast 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>
</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")
Çıktı: Bootstrap 5 kartları, rozetleri, ilerleme çubukları ve özel zaman çizelgesi stilizasyonları ile profesyonel bir iş akışı zaman çizelgesi PDF'si. IronPDF, kapsamlı CSS3 desteği ile tüm konumlamayı, flexbox düzenlerini ve yardımcı sınıfları doğru bir şekilde render eder, karmaşık görsel tasarımlar için bir gösterim sunar.
Detaylı Bootstrap uyumluluğu için Bootstrap & Flexbox CSS Kılavuzu'na bakın. IronPDF, zengin tipografi için web yazı tipleri ve simgeleri destekler.
Lite Paket Fiyatlandırması Nedir?
- 1 Geliştirici
- 1 Konum
- 1 Proje
- Süresiz Lisans
Bu paket, bir geliştiricinin, tek bir konumda, tek bir uygulama için Iron Software'i kullanmasına izin verir. Lisanslar, organizasyon dışındaki veya ajans/müşteri ilişkileri dışındaki kişilere devredilemez. Ek bir kapsam olmadan OEM yeniden dağıtımını ve SaaS kullanımı dışlar.
Fiyatlandırma: yılda $999'dan başlar.
Professional Lisans Ne İçeriyor?
- 10 Geliştirici
- 10 Konum
- 10 Proje
- Süresiz Lisans
Bu lisans, on geliştiricinin Iron Software'ı on farklı konumda kullanmasına izin verir. Onu sınırsız web sitelerinde, intranet uygulamalarında veya masaüstü yazılımlarında kullanabilirsiniz. Lisanslar, organizasyonlar dışında devredilemez. Ek bir kapsam olmadan OEM yeniden dağıtımını ve SaaS kullanımı dışlar. 10 projeye kadar entegre olur.
Fiyatlandırma: Yılda $1,499'dan başlar.
Unlimited License'ın Faydaları Nelerdir?
- Sınırsız Geliştirici
- Sınırsız Konumlar
- Sınırsız Projeler
- Süresiz Lisans
Bir organizasyondaki sınırsız sayıda geliştiricinin, sınırsız sayıda lokasyonda Iron Software kullanmasını sağlar. Sınırsız uygulamalarda kullanın. Lisanslar, organizasyonlar dışında devredilemez. Ek bir kapsam olmadan OEM yeniden dağıtımını ve SaaS kullanımı dışlar.
Fiyatlandırma: Yılda $2,999'dan başlar.
Telif Ücretsiz Yeniden Dağıtım: Bu, temel lisans tarafından kapsanan proje sayısına bağlı olarak, farklı paketlenmiş ticari ürünlerin bir parçası olarak Iron Software'i (telif hakkı ödemek zorunda kalmadan) dağıtmanıza olanak tanır. Bu, temel lisans kapsamındaki projelerin sayısına dayalı olarak, Iron Software'ın SaaS yazılım hizmetleri içinde dağıtımını sağlayacak.
IronPDF, bireysel geliştiriciler, ekipler ve kurumsal dağıtımlar için uygun birden fazla lisans kadamaları sunar. Mevcut fiyatlandırma için IronPDF lisanslama sayfasını ziyaret edin.
GrapeCity PDF'nin Lisans Modelleri ve Fiyatlandırması Nelerdir?
PDF Lisansı için Dökümanlar Neleri İçerir?
- 1 Geliştirici Lisansı içerir
- 1 Dağıtım Konumu
Bir geliştirici lisansı ve bir dağıtım konumunu içerir, destek ve bakım olmadan.
Mevcut fiyatlar için fiyatlandırma abonelik bazlı olduğu ve değişime tabi olduğu için MESCIUS (eski adıyla GrapeCity) web sitesini doğrudan ziyaret edin.
PDF Unlimited için Belgeler 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 desteklemiyor.
Mevcut fiyatlar için fiyatlandırma abonelik bazlı olduğu ve değişime tabi olduğu için MESCIUS (eski adıyla GrapeCity) web sitesini doğrudan ziyaret edin.
Documents for PDF Team Unlimited Ne Sunar?
- 5 Geliştirici Lisansı içerir
- Sınırsız Dağıtım Konumları
Beş geliştirici lisansı ve sınırsız dağıtım konumları içerir. Destek ve bakım yok. GrapeCity SaaS ve OEM desteklemiyor.
Mevcut fiyatlar için fiyatlandırma abonelik bazlı olduğu ve değişime tabi olduğu için MESCIUS (eski adıyla GrapeCity) web sitesini doğrudan ziyaret edin.
`GrapeCity`'nin Documents for PDF fiyatlandırma yapısı, farklı geliştirme ekip büyüklüklerine ve dağıtım ihtiyaçlarına uygun üç seviye sunar.
IronPDF Lite Bir Geliştirici paketi, $999 için 1 yıllık destek içerir. MESCIUS (eski adıyla GrapeCity) Belgeleri için PDF fiyatlandırması abonelik bazlıdır — mevcut oranlar için resmi MESCIUS web sitesini inceleyin. IronPDF Profesyonel Paketi, $1,499 için 10 geliştirici ve bir yıllık destek içerir. IronPDF lisanslama seçenekleri hakkında daha fazla bilgi için resmi lisanslama sayfasını ziyaret edin.
IronPDF Lite ve Professional paketleri, SaaS hizmeti, OEM ve 5 yıl destek seçeneklerini içerir. MESCIUS (eski adıyla GrapeCity) lisans koşulları ve SaaS/OEM kapsamı değişiklik gösterir — ayrıntılar için resmi MESCIUS web sitesini inceleyin. Lisans uzantıları ve uzun vadeli destek için güncelleme seçenekleri hakkında bilgi alın.
.NET Projem için Hangi PDF Kütüphanesini Seçmeliyim?
GrapeCity Belgeleri için PDF masaüstü uygulamalarında dışa aktarma/içeri aktarma, AcroForms oluşturma ve PDF yürütme sağlar. Bununla birlikte, form oluşturma, dijital imzalar ve açıklama desteği dahil olmak üzere tam PDF manipülasyonu için IronPDF gelişmiş özellikler sunar.
IronPDF daha büyük bir doğruluk sağlar. Rakipler başarısız resim dönüştürme veya bilinmeyen karakterler gibi sorunlarla karşılaşabilirler. IronPDF doğru sonuçlar sunar. Chrome rendering engine, piksel mükemmelliğinde HTML'den PDF'ye kılavuz kullanılarak doğrulanmış piksel mükemmeliyetinde çıktı sağlar. Optimizasyon için, IronPDF performans yardım kılavuzuna bakınız.
IronPDF, sürekli maliyetler olmadan rekabetçi lisanslama ve destek sunar. IronPDF, tamam özellik paketleriyle $999 ile başlar. MESCIUS (eski adıyla GrapeCity) PDF, abonelik bazlı fiyatlandırmayı kullanır — mevcut oranlar için resmi MESCIUS web sitesini inceleyin. IronPDF, bir fiyata birden fazla platformu destekler. Enterprise dağıtımları için IronPDF, yüksek performanslı oluşturma için asenkron ve çoklu iş parçacığı yetenekleri sağlar.
Tüm özellikleri keşfetmek için ücretsiz denemeye erişebilirsiniz. Tüm Iron Suite'i satın almak, iki ürün fiyatına beş ürün sunar. Detaylar için IronPDF lisanslaması hakkında Iron Software'in Iron Suite ürün sayfasını ziyaret edin.
GrapeCity Belgeleri için PDF, kendi sahibine ait tescilli bir markadır. Bu site, GrapeCity Belgeleri için PDF ile bağlantılı, onaylanmış veya sponsor edilmiş değildir. 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.Sıkça Sorulan Sorular
HTML'i .NET'te PDF'ye nasıl dönüştürebilirim?
IronPDF'nin RenderHtmlAsPdf metodunu kullanarak HTML dizgilerini PDF'ye dönüştürebilirsiniz. Ayrıca, HTML dosyalarını RenderHtmlFileAsPdf metodunu kullanarak PDF'ye dönüştürebilirsiniz.
NuGet kullanarak bir PDF kütüphanesini yükleme adımları nelerdir?
NuGet kullanarak IronPDF'yi yüklemek için Visual Studio'yu açın, 'NuGet Paketlerini Yönet' öğesine gidin, 'IronPdf' arayın ve projenize eklemek için 'Yükle'ye tıklayın.
GrapeCity PDF Viewer için .NET'te bazı alternatifler nelerdir?
IronPDF, kullanıcı dostu bir deneyim sunan ve .NET Core, .NET 5, Framework ve Standard için geniş destek sağlayan GrapeCity PDF Viewer için uygun bir alternatiftir.
.NET kütüphanesi kullanarak PDF dosyalarını nasıl oluşturur ve okursunuz?
IronPDF kullanarak, IronPdf ad alanını dahil edip HtmlToPdf sınıfını kullanarak HTML'i PDF olarak işlem yaparak PDF'ler oluşturabilirsiniz. PDF'leri okumak için PdfDocument sınıfını kullanarak içeriğe erişebilir ve düzenleyebilirsiniz.
Bir PDF kütüphanesi için mevcut lisanslama seçenekleri nelerdir?
IronPDF, tek geliştiriciler için Lite Package, 10 geliştiriciye kadar Professional License ve ekipler için Unlimited License gibi sürekli lisanslama ve destek seçenekleri içeren bir dizi lisanslama seçeneği sunar.
IronPDF'yi diğer PDF çözümlerine tercih etmemin sebebi ne olmalıdır?
IronPDF, doğruluğu, kapsamlı özellikleri, rekabetçi lisanslama ve geniş destek seçenekleri için önerilir. Çeşitli platformlar için rekabetçi bir fiyatla destek sunar.
Bir PDF kütüphanesini satın almadan önce deneyebilir miyim?
Evet, IronPDF, satın alma kararı vermeden önce mevcut tüm özellikleri keşfetmenizi sağlayan ücretsiz bir deneme sunar. Ayrıca, Iron Suite paketi tüm Iron Software ürünlerine indirimli bir fiyatla erişim sağlar.
PDF dosyalarını kullanmanın bazı dezavantajları nelerdir?
PDF'ler, boyutlarından dolayı e-posta yoluyla paylaşılması zor olabilir, Word belgelerine kıyasla mobil cihazlarda net bir şekilde görüntülenmeyebilir ve düzenlemek veya güncellemek için belirli yazılımlar gerektirir.



