ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
C#でPDFファイルを操作するのは、開発者にとって難しいことがあります。 異なる形式からPDFにコンテンツを変換する際には、そのようなファイルのコンテンツを作成する際に考慮すべき要素が多数あります。 オートメーションは、現在ソフトウェア開発プロセスの鍵となっています。 これらの問題は、PDF文書の読み取り、書き込み、作成、修正を支援するために設計されたライブラリの構築により解決されました。また、その属性を編集し、他の形式から変換することも可能です。
このブログ記事では、.NET および .NET Core 用の2つのPDFライブラリを比較します。この2つのライブラリは:
アピトロンPDFキット
IronPDFとApitron PDF Kitは、.NETおよび.NET Core向けのPDF操作機能を提供する2つのライブラリです。 それらの両方は、ドキュメントフィールドの変換および操作タスクに使用できます。 どちらもブックマークを作成することができます。 次の質問は、私たちの.NETプロジェクトに最適なC# PDF .NETライブラリを決めることです。 この比較記事は、これらの2つのPDFライブラリのどちらを選ぶべきかの決定を支援します。
まず、2つのライブラリが提供するものを見てみましょう。それから、比較に移ります。
Apitron PDF Kit は、PDFファイルを任意の方法で操作または変換することができる .NET コンポーネントです。 画像、図面、テキストを追加したり、ドキュメントに署名したり、さらに多くのことが可能です。 既存のコンテンツを編集することもできます。 Apitron PDF Kit .NETコンポーネントは、モバイル、デスクトップ、ウェブ、Windows、およびクラウドアプリケーションを複数のプラットフォームにわたって作成するために使用できます。
このPDF SDKを使用すると、以下のことが可能になります:
開発者、特にC#プログラマーは、IronPDF .NETライブラリを気に入るでしょう。 この素晴らしいツールを使えば、.NET Core PDF処理アプリケーションを簡単に構築できます。
IronPDFは.NET Chromiumエンジンを使用してHTMLページを変換します。(コードまたはURL形式で)PDFファイルへ。 ナビゲーションオブジェクトを配置したり、HTMLからPDFをデザインしたりするために複雑なAPIを使用する必要は全くありません。 IronPDF は、HTML、ASPX、JS、CSS、画像などの標準的なWebドキュメントをサポートしています。
IronPDFは、HTML5、CSS、JS、および画像を使用して作成することができます。 PDFは簡単に編集、スタンプ、ヘッダーとフッターの追加が可能です。 また、PDFテキストの読み取りやグラフィックの抽出も簡単に行えます。
IronPDFの主な特徴は次のとおりです:
Adobe AcrobatソフトウェアなしでPDFファイルを印刷する
IronPDFは、C#と互換性のあるほぼすべてのオペレーティングシステムとフレームワークで利用可能です。以下のものが含まれます:
Azure、AWS、Docker、Linux、Windows
記事の残りは次のとおりです:
IronPDFのインストール
Apitron PDFキットのインストール
PDFドキュメントを作成
PDFにヘッダーとフッターを作成する
デジタル署名 PDF
価格とライセンス
IronPDFライブラリをダウンロードしてインストールする方法は4つあります。 以下の通りです:
NuGet パッケージ マネージャーの使用
開発者コマンドプロンプト
NuGetパッケージを直接ダウンロード
IronPDFをインストールするには、ソリューションエクスプローラーでプロジェクトを右クリックするだけです。 これでNuGetパッケージマネージャーが開きます。
選択したら、以下のスクリーンショットに示されているように、IronPDFパッケージを探してインストールします。
開発者コマンドプロンプトを通じてIronPDFをインストールすることもできます。
Install-Package IronPdf
IronPDFは以下のサイトからもインストールできます。IronPDF NuGetパッケージサイトを直接訪問し、パッケージをダウンロードしてください。 以下の手順は:
Visual Studio プロジェクトを再読み込みして、使用を開始してください。
IronPDFはダウンロードされ、使用する準備が整いました。 ただし、その前にApitron PDFライブラリをインストールする必要があります。
.NET Coreアプリケーションの場合、NuGetパッケージマネージャを使用してApitronをインストールすることができます。アピトロンPDFキットNuGetウェブサイトを直接ご覧ください。
NuGetパッケージ マネージャー コンソールを使用して、Apitronをインストールすることもできます。 IronPDFで言及されている「開発者コマンドプロンプトの使用」ステップに従い、次のコマンドを入力してください。
Install-Package Apitron.PDF.Kit
ENTERキーを押します。 それはApitron.PDF.Kitをダウンロードしてインストールします。
次の名前空間を追加します:
using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
Imports Apitron.PDF.Kit
Imports Apitron.PDF.Kit.FixedLayout.Resources
Imports Apitron.PDF.Kit.FixedLayout.Resources.Fonts
Imports Apitron.PDF.Kit.FlowLayout.Content
Imports Apitron.PDF.Kit.Styles
Imports Apitron.PDF.Kit.Styles.Appearance
Imports Font = Apitron.PDF.Kit.Styles.Text.Font
さて、IronPDFとApitron PDFの比較に進みましょう。
IronPDFには、PDFを作成するための複数の方法があります。 2つの重要なものを見てみましょう。
IronPDFは、任意のURLをPDFに簡単に変換することができます。 以下のコードはURLをPDFに変換するのに役立ちます。
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
以下のコードは、HTML文字列からPDFドキュメントをレンダリングする方法を説明しています。 単にHTMLを使用することもできますし、CSS、画像、およびJavaScriptと組み合わせて使用することもできます。
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new IronPdf.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")
' Load external HTML assets: images, CSS and JavaScript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>Sample Text</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
出力は以下の通りです:
Apitron PDFは、URLまたはHTMLをPDFに変換する機能を提供していません。 PDFをHTMLに変換することができます。 ただし、XMLファイルをPDFに変換することもできます。 使用されるXMLファイルは:
<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="Apitron.PDF.Kit.FlowLayout.v1">
<Resources>
<Image resourceId="logo" fileName="../../images/logo.png" />
</Resources>
<Styles>
<Style selector="flowdocument">
<Color value="Black" />
</Style>
<Style selector="grid">
<InnerBorder thickness="1" />
<InnerBorderColor value="Black" />
</Style>
</Styles>
<Elements>
<Image>
<Properties>
<Class value="logo" />
<ResourceId value="logo" />
</Properties>
</Image>
<TextBlock>
<Properties>
<Class value="header" />
<Text value="Sample Interview Questions for Candidates" />
</Properties>
</TextBlock>
<Br />
<TextBlock>
<Properties>
<Class value="headerNote" />
<Text value="To help facilitate the interview process, the Human Resources Department has compiled a list of questions that might be used during the phone and/or on-campus interviews. Some of the questions deal with the same content, but are phrased differently while other questions may not pertain to a specific discipline; however all of the questions are unbiased and appropriate to ask. We hope you'll find this helpful." />
</Properties>
</TextBlock>
</Elements>
<Properties>
<Margin value="30,20,30,20" />
</Properties>
</FlowDocument>
このXMLテンプレートをPDFに変換するためのコードは次のとおりです:
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
ResourceManager resourceManager = new ResourceManager();
FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);
doc.Write(outputStream, resourceManager);
}
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
ResourceManager resourceManager = new ResourceManager();
FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);
doc.Write(outputStream, resourceManager);
}
Using stream As Stream = File.OpenRead("C:\PLACE YOUR EXACT PATH HERE\template.xml"), outputStream As Stream = File.Create("fromTemplate.pdf")
Dim resourceManager As New ResourceManager()
Dim doc As FlowDocument = FlowDocument.LoadFromXml(stream, resourceManager)
doc.Write(outputStream, resourceManager)
End Using
出力は以下の通りです:
IronPDFとApitronの出力を比較すると、IronPDFはHTMLレンダリングを使用し、画像サイズをスケーリングせずに見事なドキュメントを作成することが明確にわかります。一方で、ApitronもIronPDFと同様の出力を提供しますが、これはXMLファイルにスタイルが登録されている場合に限ります。
IronPDFを使用すると、ヘッダーとフッターの追加は比較的簡単です。 IronPDFを使用すると、ページ番号や改ページを追加し、表紙ページや余白などを設定することができます。
ヘッダーとフッターを追加するコードは以下の通りです:
var Renderer = new ChromePdfRenderer();
// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header
// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new ChromePdfRenderer();
// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header
// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New ChromePdfRenderer()
' Add a header
Renderer.RenderingOptions.FirstPageNumber = 1 ' use 2 if a cover page will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = True
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text"
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica
Renderer.RenderingOptions.TextHeader.FontSize = 12
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for header
' Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = True
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial
Renderer.RenderingOptions.TextFooter.FontSize = 12
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for footer
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
出力は以下の通りです:
アピトロンPDFキットは、XML構造フォーマットのコンテンツをPDFに変換してPDFを作成します。 Apitron PDF Fitでは、PageHeader
およびPageFooter
プロパティを使用してヘッダーとフッターを追加できます。 これを実行するコードは次のとおりです:
// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));
// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});
// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());
// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from ",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});
// add pages
for (int i = 0; i < 2; ++i)
{
doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
doc.Add(new PageBreak());
}
// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
doc.Write(stream, resourceManager);
}
Process.Start("out.pdf");
// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));
// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});
// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());
// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from ",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});
// add pages
for (int i = 0; i < 2; ++i)
{
doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
doc.Add(new PageBreak());
}
// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
doc.Write(stream, resourceManager);
}
Process.Start("out.pdf");
' register doc's resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"))
' create document
Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}
' register styles
doc.StyleManager.RegisterStyle(".pageHeader",New Style() With {.Font = New Font(StandardFonts.TimesBold, 20)})
doc.StyleManager.RegisterStyle(".pageFooter",New Style() With {.Align = Align.Right})
doc.StyleManager.RegisterStyle("hr",New Style() With {
.Height = 2,
.Margin = New Thickness(0,5,0,5)
})
doc.StyleManager.RegisterStyle(".content",New Style() With {
.Align = Align.Left,
.Display = Display.InlineBlock
})
' fill the header section
doc.PageHeader.Class = "pageHeader"
doc.PageHeader.Add(New Image("logo") With {
.Width = 100,
.Height = 50
})
doc.PageHeader.Add(New TextBlock("This document is intended for internal use only") With {.TextIndent = 20})
doc.PageHeader.Add(New Hr())
' fill the footer section
doc.PageFooter.Class = "pageFooter"
doc.PageFooter.Add(New Hr())
doc.PageFooter.Add(New TextBlock(Function(ctx) String.Format("Page {0} from ",ctx.CurrentPage+1)))
doc.PageFooter.Add(New PageCount(3) With {.Display = Display.Inline})
' add pages
For i As Integer = 0 To 1
doc.Add(New TextBlock("This is header and footer generation pdf file.") With {.Class = "content"})
doc.Add(New PageBreak())
Next i
' generate PDF
Using stream As Stream = File.Create("out.pdf")
doc.Write(stream, resourceManager)
End Using
Process.Start("out.pdf")
出力は以下の通りです:
PDF処理機能の中で最も重要な機能の一つは、PDF文書にデジタル署名を行う能力です。 IronPDFはこのために必要なすべてのツールを提供します。
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");
// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");
// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPdf.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");
// 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPdf.Signing.PdfSignature("Iron.pfx", "123456");
// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
// 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
Imports IronPdf
' Cryptographically sign an existing PDF in 1 line of code!
Call (New IronPdf.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")
'''*** Advanced example for more control ****
' 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>")
' 2. Create a Signature.
' You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
Dim signature = New IronPdf.Signing.PdfSignature("Iron.pfx", "123456")
' 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")
' 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)
' 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
Apitron PDF Kitを使用して署名をPDFにスタンプすることは、時間がかかり技術的なプロセスです。
static void Main(string [] args)
{
string fileName = "signedTwice.pdf";
using (Stream stream = File.Create(fileName))
{
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
doc.Write(stream,new ResourceManager());
}
// save
Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}
// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
// open existing document and sign once
using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
{
using (FixedDocument doc = new FixedDocument(inputStream))
{
string imageResourceId = Guid.NewGuid().ToString("N");
string signatureFieldId = Guid.NewGuid().ToString("N");
// register signature image resource
doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));
// create first signature field and initialize it using a stored certificate
SignatureField signatureField = new SignatureField(signatureFieldId);
using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
{
signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
}
// add signature fields to the document
doc.AcroForm.Fields.Add(signatureField);
// create first signature view using the image resource
SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
signatureView.ViewSettings.Graphic = Graphic.Image;
signatureView.ViewSettings.GraphicResourceID = imageResourceId;
signatureView.ViewSettings.Description = Description.None;
// add views to page annotations collection
doc.Pages [0].Annotations.Add(signatureView);
// save as incremental update
doc.Save();
}
}
}
static void Main(string [] args)
{
string fileName = "signedTwice.pdf";
using (Stream stream = File.Create(fileName))
{
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
doc.Write(stream,new ResourceManager());
}
// save
Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}
// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
// open existing document and sign once
using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
{
using (FixedDocument doc = new FixedDocument(inputStream))
{
string imageResourceId = Guid.NewGuid().ToString("N");
string signatureFieldId = Guid.NewGuid().ToString("N");
// register signature image resource
doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));
// create first signature field and initialize it using a stored certificate
SignatureField signatureField = new SignatureField(signatureFieldId);
using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
{
signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
}
// add signature fields to the document
doc.AcroForm.Fields.Add(signatureField);
// create first signature view using the image resource
SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
signatureView.ViewSettings.Graphic = Graphic.Image;
signatureView.ViewSettings.GraphicResourceID = imageResourceId;
signatureView.ViewSettings.Description = Description.None;
// add views to page annotations collection
doc.Pages [0].Annotations.Add(signatureView);
// save as incremental update
doc.Save();
}
}
}
Shared Sub Main(ByVal args() As String)
Dim fileName As String = "signedTwice.pdf"
Using stream As Stream = File.Create(fileName)
Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}
doc.Add(New TextBlock("Signed using Apitron PDF Kit for .NET"))
doc.Write(stream,New ResourceManager())
End Using
' save
Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", New Boundary(10, 750, 110, 800))
End Sub
' Implementation of Sign Method
Private Shared Sub Sign(ByVal pathToDocument As String, ByVal pathToCertificate As String, ByVal password As String, ByVal pathToSignatureImage As String, ByVal signatureViewLocation As Boundary)
' open existing document and sign once
Using inputStream As Stream = New FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite)
Using doc As New FixedDocument(inputStream)
Dim imageResourceId As String = Guid.NewGuid().ToString("N")
Dim signatureFieldId As String = Guid.NewGuid().ToString("N")
' register signature image resource
doc.ResourceManager.RegisterResource(New Image(imageResourceId, pathToSignatureImage))
' create first signature field and initialize it using a stored certificate
Dim signatureField As New SignatureField(signatureFieldId)
Using signatureDataStream As Stream = File.OpenRead(pathToCertificate)
signatureField.Signature = Signature.Create(New Pkcs12Store(signatureDataStream,password))
End Using
' add signature fields to the document
doc.AcroForm.Fields.Add(signatureField)
' create first signature view using the image resource
Dim signatureView As New SignatureFieldView(signatureField, signatureViewLocation)
signatureView.ViewSettings.Graphic = Graphic.Image
signatureView.ViewSettings.GraphicResourceID = imageResourceId
signatureView.ViewSettings.Description = Description.None
' add views to page annotations collection
doc.Pages (0).Annotations.Add(signatureView)
' save as incremental update
doc.Save()
End Using
End Using
End Sub
出力は、ライブラリに関してほとんど同じです。 IronPDFがPDFコンテンツの操作において、より簡単で便利であることがはっきりとわかります。 出力されたPDFは、証明書と署名が印刷された状態で署名されています。
IronPDFは、開発用に無料で使用でき、商用利用のためにいつでもライセンスを取得できるC#ライブラリです。個別の開発者、代理店、多国籍企業、およびSaaSやOEMの再配布のためのプロジェクトライセンスがすべて利用可能です。 すべてのライセンスは、30日間の返金保証、1年間のサポートとアップグレード、開発/ステージング/プロダクション環境での有効性、および永続ライセンスを提供します。(一回限りの購入).
Liteパッケージは、$liteLicenseで利用可能で、継続費用がかかりません。 詳細と最適なライセンスを選択するための支援はIronPDF製品ライセンスページ.
現在使用されているライセンススキームは、モダンとレガシーの2種類です。 既にライセンスをお持ちの場合、ライセンスが有効期限を迎えるまで従来のライセンススキームは引き続き有効です。 その後、移行のためにカスタマーサポートに連絡する必要があります。 最新のライセンススキームは新規顧客のみに適用されます。
現代のスキームでは、3つのライセンシングティアがあります:
Commercial(商業用) - 上記に記載されていないすべての使用ケース。 料金は使用パターンによって異なります。
購入に関する詳細については、以下を参照してください。Apitronの営業担当者に連絡する.
IronPDFライブラリは、HTML、JS、CSS、JPG、PNG、GIF、およびSVGのようなドキュメントタイプからピクセルパーフェクトなPDFを作成します。 Chromiumエンジンは、HTMLファイルやURLをレンダリングして、完璧なPDFを出力するのに役立ちます。
Apitronは、100%PDF仕様に準拠して実装された固定レイアウトAPIを使用してPDFを作成できるようにします。 HTMLやCSSに似たスタイル駆動型のコンテンツ生成方法として、この固定レイアウトAPIは、見事なレポート、請求書、カタログなどを数分で作成する能力を提供します。 XMLテンプレートの作成もサポートしています。
アピトロンPDFのライセンス価格は、アピトロンのウェブサイトでは公開されていません。サポートにお問い合わせの上、使用状況に応じてお見積もりをお取りください。 一方、IronPDFはウェブサイトに非常に明確なライセンスパッケージを表示しています。これはIronPDFを競合他社から際立たせ、ユーザーが自分のニーズに応じて賢く選択することを可能にします。
IronPDFを使用すると、Apitron PDFよりも簡単にPDFファイルを扱うことができます。 IronPDFを使用すると、複雑なPDF作業のためにより少ない行数のコードを記述することができます。 IronPDF は、複数のファイル形式から PDF を生成するための複数の方法を提供しますが、Apitron は XML ドキュメントを PDF ドキュメントに変換することしかできません。 Apitronと比較して、技術的なオプションを追加することなくIronPDFで完璧な出力が達成されます。
すべてのIron Softwareの顧客は、2つ分の価格で同社の5つの製品すべてを購入できるオプションがあります。 を試してみよう。IronPDFの30日間無料トライアル全機能をテストします。 Iron Software製品のフルスイートを購入するIronSoftware.comで.
9つの .NET API製品 オフィス文書用