產品比較

IronPDF 和 GrapeCity PDF Viewer 之間的比較

發佈 2022年9月1日
分享:

PDF 代表可攜式文件格式。 這是一種檔案類型,允許在許多不同設備上常規查看任何文件。 PDF 常被用來分享重要文件,例如向潛在的僱主提交履歷或者向客戶發送發票。

儘管PDF因其流行而被廣泛使用,但作為儲存和共享數據的一種方式,它也有一些缺點。 例如,PDF 檔不能透過電子郵件分享,因為它們需要先在 PDF 閱讀器中打開。即使可以分享,PDF 檔在手機上打開時看起來也不會像 Word 文件那樣清晰。 此外,PDF 無法像 Word 文件一樣進行編輯或更新,除非您在電腦上安裝了能夠識別檔案中的數據並將其轉換回可編輯格式的編輯軟體。 這意味著無論使用何種設備——無論是 PC 還是 Mac——打開 PDF 檔案時,檔案都會保持相同的外觀。 由於它們實施的標準在其他文件格式(例如 JPEG 或 GIF)中找不到,這使得 PDF 文件在所有設備上都可靠。

在本文中,我們將回顧兩個 .NET PDF 庫:

  • IronPDF
  • GrapeCity PDF

IronPDF

IronPDF是一個 .NET 函式庫,通過簡短幾行程式碼即可創建、閱讀和操作 PDF 文件的功能。 以下文章將向您展示如何使用IronPDF創建PDF文件。 本內容基於以下假設:您了解 Visual Studio 或 C# 的基礎知識,並且具備 HTML 的工作知識。

我們需要 Visual Studio 來編寫、編譯和運行我們的應用程序,使用 C# 來編寫邏輯和代碼,並使用 HTML 來格式化 PDF 文件,包括添加標題、標頭、圖像、段落等。IronPDF 函式庫完全支持 .NET Core、.NET 5、Framework 和 Standard。

我們可以只用幾行程式碼在 C# 中創建 PDF 文件。 如果具備基本的C#和HTML知識,這是一項簡單的任務。 了解更多有關 IronPDF 的資訊,請造訪他們的IronPDF 功能的官方網站.

安裝 IronPDF

開發解決方案需要安裝IronPDF 的 NuGet 套件. 直接從功能表列中點擊「專案」。 將出現下拉列表。 選擇「管理NuGet 套件「從下拉選單中選擇它。」 會顯示如下窗口:

Grapecity Pdf Viewer Alternatives 1 related to 安裝 IronPDF

選擇「瀏覽」選項卡,隨後會出現如下窗口:

Grapecity Pdf Viewer Alternatives 2 related to 安裝 IronPDF

在搜索框中輸入「IronPdf」,然後按「Enter」。結果窗口應顯示如下:

Grapecity Pdf Viewer Alternatives 3 related to 安裝 IronPDF

選擇IronPDF:

如何使用 IronPDF 在 C# 中創建 PDF 文件

如何使用 IronPDF 在 C# 中創建 PDF 文件

選擇「安裝」按鈕。 成功安裝後,將出現結果窗口:

Grapecity Pdf Viewer Alternatives 5 related to 安裝 IronPDF

按下「確定」按鈕後,你就可以開始了。

建立 PDF

在檔案的頂部添加 IronPdf 命名空間。

using IronPdf;
using IronPdf;
Imports IronPdf
VB   C#

實際工作從這一點開始。 我們需要提供一個文件路徑來儲存生成的 PDF 文件。 為了達成這個目的,我們使用 SaveFileDialog,這可以提示使用者選擇檔案名稱和檔案路徑。

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

SaveFileDialog 應開啟一個檔案對話框,允許您在想要建立 PDF 文件的位置選擇資料夾和檔案名稱。 初始目錄設置在 D 盤,但您可以選擇設置為其他任何目錄。 由於我們只處理 PDF 檔案,默認擴展已設置為 PDF 檔案。

在「if」條件中,插入將創建 PDF 檔案的實際程式碼。 現在我們可以看到,我們僅用兩行代碼就成功生成了一個 PDF 文件。 PdfText 是一個豐富文本框的名稱,包含將寫入 PDF 文件的文本。 檔案名稱是透過 SaveFileDialog 方法選定的檔案路徑和名稱。

閱讀 PDF 文件

您可能會認為讀取 PDF 文件的程式碼會很複雜且難以撰寫/理解——但別擔心——IronPDF 使其變得更簡單且更容易。 此過程只需兩行代碼即可完成。!

在檔案的頂部添加以下代碼以匯入 IronPdf 函式庫。

using IronPdf;
using System;
using System.Windows.Forms;
using IronPdf;
using System;
using System.Windows.Forms;
Imports IronPdf
Imports System
Imports System.Windows.Forms
VB   C#

在函數內寫入以下代碼。

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
VB   C#

這將從資料來源中提取所有資訊到文件檢視器。 所有報告組件將使用該數據作為數據來源。

GrapeCity PDF 功能

GrapeCity Documents 是一個跨平台的文件管理系統,為所有常見文件格式提供通用的文件、編輯器和閱讀器解決方案。 無需額外程式如 Adobe Acrobat,.NET Standard 2.0 提供的豐富庫可用於讀取、生成、修改和保存 PDF 文件。 它具有強大的功能集,使開發者能夠構建包含高級字體支持、照片、圖形、條形碼、註釋、綱要、印章、水印等的 PDF 文件。

操作 PDF

在 .NET Standard 應用程式中,您可以使用 GrapeCityPDF 根據基本或複雜的業務需求製作 PDF 文件。 此外,您可以從任何來源載入、修改和儲存PDF。

將 PDF 儲存為圖像

您可以使用 GrapeCityPDF 將 PDF 另存為圖像,而不會犧牲圖片質量。 此外,您可以使用幾行代碼來實現此功能。

PDF 觀看器

GrapeCity Documents PDF Viewer 是一款輕量級的程式設計客戶端檢視器,用於檢視 PDF 檔案。 支持許多常用的 PDF 功能。

大量的功能

GrapeCityPDF 函式庫具有多種功能,使您能夠創建包含文本、圖形、照片、註釋、大綱等信息的複雜 PDF 文件。

安裝

有兩種方法可以安裝GrapeCity。

  1. 選擇下載壓縮的源文件按鈕以下載當前的示例源。

  2. 將下載的壓縮檔案中的文件直接解壓縮到電腦上的目錄中。

  3. 導航至該目錄。

  4. 執行 run.cmd 批次檔。這將構建範例源代碼。 啟動SupportApi服務,然後在您的默認瀏覽器中打開http://localhost:3003 URL。

  5. 欲了解更多資訊,請參閱下載的 zip 中包含的 readme.MD。

安裝 WinForms 版本

下面的主題討論安裝 WinForms 版本的程序。 以下步驟提供 WinForms 版本的安裝指導:

  • 從下載 C1ControlPanel 葡萄城的 ComponentOne 安裝最新版的 WinForms。
  • 使用 ComponentOneC1ControlPanel.exe 開啟 ControlPanel。 任何正在執行的 Visual Studio 實例必須關閉。
  • 現有用戶可以使用已註冊的電子郵件地址和密碼登入。
  • 如果您是新用戶:

    • 註冊 Component One,並透過填寫必要欄位來創建帳戶。

    • 驗證會發送到您的電子郵件地址。

    • 請造訪驗證連結以啟用您的電子郵件地址。
  • 如果您不想登入或註冊,您可以作為匿名用戶繼續操作。
  • 在 WinForms Edition 區塊中,選擇 Install。 若要安裝所有版本,可以勾選 All Editions 選框。 選擇查看更多按鈕以了解更多關於該版本的資訊。
    GrapeCity PDF 安装

  • 當您點擊安裝後,將顯示一個頁面,要求您在點擊接受許可協議按鈕之前查看許可協議。
  • 一旦您接受許可協議,接下來的頁面將出現設置和目錄路徑更改按鈕。 選擇接受設定提示以確認目錄路徑並開始安裝過程。
    GrapeCity PDF 安装

  • 安裝程式會安裝控制項並在此過程中顯示進度。 在顯示此畫面時,您將無法取消安裝過程。
  • 控制項安裝完成後,將會顯示「安裝成功」畫面。 當前安裝的版本將顯示在相應的版本中。
  • 安裝程式會安裝控制項並在此過程中顯示進度。 在顯示此畫面時,您將無法取消安裝過程。

    GrapeCity PDF 安装

  • 控制項安裝完成後,將會顯示「安裝成功」畫面。 當前安裝的版本將顯示在相應的版本中。
    GrapeCity PDF 安装

建立 PDF

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);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

GrapeCityPDF 不是一個進階的 PDF 庫—相比於 IronPDF,它的功能數量有限。

IronPDF 授權模式和定價方案

30天退款保證:購買許可證後,您將享有30天的退款保證。 如果授權不符合您的需求,IronPDF 保證您在 30 天內退還款項。

簡易整合:在與現有專案和環境整合IronPDF時,只需一行程式碼即可完成無縫過程。 這可以通過使用 NuGet 套件方法進行整合,或者直接在網上下載並整合到您的環境中來實現。

永久授權:每個授權僅需購買一次,無需續約。

免費支援和產品更新:每個許可證都包含由產品背後團隊直接提供的一次家庭支援以及一年的免費產品更新。 可以隨時購買擴充套件。 您可以在購買前查看擴展功能。

即時授權:一旦收到付款,註冊的授權金鑰便會發送出去。

所有授權都是永久性的,適用於暫存、開發和生產環境。

Lite 套件

  • 1 開發者
  • 1 位置
  • 1 專案
  • 永久授權

    此套件允許組織中的單一軟體開發人員在一個地點使用 Iron Software。 Iron Software 可以用於單一內部網路應用程式、網路應用程式或桌面軟體程式。 禁止在組織或機構/客戶關係之外共享授權,因為它們是不可轉讓的。 此授權類型與其他所有授權類型一樣,明確排除在協議中未明確授予的所有權利,不包括OEM重新分發,並且在未購買額外保障的情況下將Iron Software用作SaaS。

    定價: 每年起價為 $749。

Professional授權

  • 10 名開發者
  • 10 個地點
  • 10 個專案
  • 永久授權

    此授權允許一個組織中的預定數量的軟體開發人員在多個地點使用Iron Software,最多可至十個。 Iron Software 可以用於您想要的任意多個網站、內聯網應用程式或桌面軟體應用程式。許可證不可轉讓,因此禁止在組織或代理/客戶關係之外共享。 此授權類型與所有其他授權類型一樣,明確排除所有未在協議中明確授予的權利,包括OEM重分發和在未購買額外保障的情況下將Iron Software用作SaaS。 此許可證可以整合至最多10個單一專案。

    價格: 每年起價 $999。

無限授權

  • 無限制開發者
  • 無限地點
  • 無限專案
  • 永久授權

    這使您在單一組織中擁有無限數量的軟體開發人員,並可在無限數量的位置使用Iron Software。 Iron Software 可以用於任意數量的內聯網應用程式、桌面軟體應用程式或網站。許可是不可轉讓的,並且不能在組織或機構/客戶關係之外分享。這種類型的許可證,如同所有其他類型的許可證明確排除協議下未授予的所有權利,包括 OEM 重發佈以及在未購買額外保障的情況下將 Iron Software 用作 SaaS。

    價格:每年起價 $2999。

    免版税再分发:這允許您作為幾個不同包裝的商業產品的一部分分發 Iron Software。(無需支付版稅)根據基礎授權涵蓋的專案數量。 這將允許在 SaaS 軟體服務中部署 Iron Software,這基於基礎許可涵蓋的專案數量。

    價格:每年起價 $1599。

    GrapeCity PDF 安装

GrapeCity PDF 授權模式與定價

PDF 文件资料

  • 包含 1 開發者授權
  • 1 分發地點

    此套件包含一個開發者授權證書和僅限一個發佈地點,不包含支援和維護。

    定價:每年起價 $999。

無限制 PDF 文件

  • 包含 1 開發者授權
  • 不限分發地點

    此套件包括一個開發者授權,允許無限制的發佈地點。 它不附帶支援和維護。 GrapeCity 不支持 SaaS 和 OEM。

    價格:每年起價 $2799。

PDF 團隊無限制文件

  • 包含 5 個開發人員授權
  • 不限分發地點

    這個套件包含五個開發人員授權,無限量的分發地點且不含支援和維護。 GrapeCity 不支援 SaaS 和 OEM。

    定價:每年起價 $5799。

    GrapeCity PDF 套件比較

    IronPDF Lite 單一開發者方案附帶1年支援服務,費用約為$749。 GrapeCity Documents for PDF 包含單一開發人員套裝,價格為 999 美元,不包含任何支援。 IronPDF 專業套件包括10位開發人員套件,附帶一年的支援服務,價格為999美元。另一方面,GrapeCity沒有10位開發人員套件-只有5位開發人員套件,價格為5799美元。

IronPDF 的 LiteProfessional 套件皆提供 SaaS 服務或 OEM,並且也有 5 年的支援選項。 Lite 單一開發者套裝提供五年的支援、SaaS 及 OEM 服務,費用為 2897 美元。 雖然GrapeCity沒有SaaS、OEM服務或5年支援選項。 Iron Professional 10開發者套件附帶五年支援、Saas和OEM服務,費用為3397美元。 雖然 GrapeCity 並沒有任何 10 開發者套餐。

結論

GrapeCity Documents for PDF 允許開發人員匯出/匯入,創建 AcroForms(PDF 表單),並在眾多桌面應用程式上執行 PDF。 使用GrapeCity Documents for PDF(GcPdf),您正在為客戶提供完整的PDF解決方案。

我們強烈推薦 IronPDF,因為這款產品提供更高的準確性。 類似的競爭對手在執行相似功能時,可能會遇到一些不準確的問題,例如無法轉換某些圖片,導致未知字符。 另一方面,IronPDF 提供準確的結果。

IronPDF 套裝提供具競爭力的授權和支援,無需持續成本。 IronPDF 的起始價格為 $749,套件包含更豐富的功能範圍。 GrapeCity PDF 的價格從每年 $1649 起。 IronPDF 也以單一價格支持多個平台!

如果您尚未成為 IronPDF 的客戶,您可以使用免費試用版來查看所有可用功能。 如果您購買完整的 Iron Suite,您可以用兩款產品的價格獲得全部五款產品。 有關進一步的詳細信息IronPDF 授權,請造訪 Iron Software 的Iron Suite 產品頁面查看完整的套件資訊。

< 上一頁
IronPDF與XFINIUM.PDF的比較
下一個 >
IronPDF 與 Textcontrol 的比較

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,810,873 查看許可證 >