IronPDFを使用してC#でフォームをPDFに印刷する
IronPDFを使用すると、C# で Windows フォームを PDF に印刷するのは簡単です。フォームの HTML 表現を ChromePdfRenderer を使用してレンダリングし、ディスクまたはメモリに保存して、わずか数行のコードでピクセルパーフェクトな PDF を配信します。
Windows フォーム アプリケーションを PDF にエクスポートすることは、基幹業務ソフトウェアでは一般的な要件です。 データ入力画面をアーカイブしたり、フォームの状態から顧客向けレポートを生成したり、プリンターに触れることなく印刷プレビューをキャプチャしたりする必要がある場合でも、C# フォームを PDF に変換すると、日常のワークフローの摩擦が解消されます。 IronPDF は、HTML レンダリングから最終的な PDF 出力までの変換パイプラインを処理する .NET ネイティブ API を提供し、脆弱な GDI+ 印刷ハックを省略できます。
IronPDF はどのようにインストールしますか?
NuGetを通じてIronPDF をプロジェクトに追加します。 パッケージマネージャーコンソールを開いて次を実行します:
Install-Package IronPdf
Install-Package IronPdf
または.NET CLIを使用します:
dotnet add package IronPdf
dotnet add package IronPdf
インストール後、API を呼び出すファイルの先頭に using IronPdf; を追加します。 パッケージはNuGet.org/packages/ IronPDFから直接入手することもできます。 評価期間中に透かしなしの出力のロックを解除するための無料試用ライセンス キーはIronPDF.com/licensing/で入手できます。
HTML を使用して Windows フォームを PDF に変換するにはどうすればよいでしょうか?
C# フォームを PDF に変換する最も信頼性の高い方法は、フォームのデータの HTML スナップショットを作成し、そのスナップショットを ChromePdfRenderer を使用してレンダリングすることです。 このアプローチは、WinForms の GDI+ サーフェスからビジュアル レンダリングを切り離し、すべての PDF ビューアーで同一に見える鮮明で移植可能な出力を実現します。
using IronPdf;
// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";
// Compose an HTML representation of your form data
string formHtml = $"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class="box">
<div class="row"><label>Full Name:</label> Jane Smith</div>
<div class="row"><label>Email:</label> jane@example.com</div>
<div class="row"><label>Phone:</label> +1 555-0100</div>
<div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
""";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
using IronPdf;
// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";
// Compose an HTML representation of your form data
string formHtml = $"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class="box">
<div class="row"><label>Full Name:</label> Jane Smith</div>
<div class="row"><label>Email:</label> jane@example.com</div>
<div class="row"><label>Phone:</label> +1 555-0100</div>
<div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
""";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
Imports IronPdf
' Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY"
' Compose an HTML representation of your form data
Dim formHtml As String = $"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class='box'>
<div class='row'><label>Full Name:</label> Jane Smith</div>
<div class='row'><label>Email:</label> jane@example.com</div>
<div class='row'><label>Phone:</label> +1 555-0100</div>
<div class='row'><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
"
' Render HTML to PDF
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 25
renderer.RenderingOptions.MarginRight = 25
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
pdf.SaveAs("CustomerForm.pdf")
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).")
ChromePdfRenderer はヘッドレス Chromium エンジンを駆動するため、CSS レイアウト、埋め込みフォント、さらには印刷メディア クエリも忠実にレンダリングされます。 完全に動的なアプローチを実現するために、実行時にフォームのコントロールからバインドされたデータとハードコードされたフィールド値を交換します。 HTML から PDF への変換ガイドでは、利用可能なすべてのレンダリング オプションについて詳しく説明します。
フォーム コントロールからライブ データを取得するにはどうすればよいでしょうか?
HTML を手動でコーディングする代わりに、WinForms コントロールから直接値を読み取り、テンプレートに挿入します。
using IronPdf;
// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
// Read control values at the moment of export
string name = txtName.Text;
string email = txtEmail.Text;
string phone = txtPhone.Text;
string notes = rtbNotes.Text.Replace("\n", "<br>");
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// Prompt the user for a save location
using var dialog = new SaveFileDialog();
dialog.Filter = "PDF Files|*.pdf";
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
if (dialog.ShowDialog() == DialogResult.OK)
{
pdf.SaveAs(dialog.FileName);
MessageBox.Show("PDF exported successfully.", "Export Complete");
}
}
using IronPdf;
// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
// Read control values at the moment of export
string name = txtName.Text;
string email = txtEmail.Text;
string phone = txtPhone.Text;
string notes = rtbNotes.Text.Replace("\n", "<br>");
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// Prompt the user for a save location
using var dialog = new SaveFileDialog();
dialog.Filter = "PDF Files|*.pdf";
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
if (dialog.ShowDialog() == DialogResult.OK)
{
pdf.SaveAs(dialog.FileName);
MessageBox.Show("PDF exported successfully.", "Export Complete");
}
}
Imports IronPdf
' Called from a button click handler in your WinForms application
Sub ExportFormToPdf()
' Read control values at the moment of export
Dim name As String = txtName.Text
Dim email As String = txtEmail.Text
Dim phone As String = txtPhone.Text
Dim notes As String = rtbNotes.Text.Replace(vbLf, "<br>")
Dim html As String = $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
' Prompt the user for a save location
Using dialog As New SaveFileDialog()
dialog.Filter = "PDF Files|*.pdf"
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf"
If dialog.ShowDialog() = DialogResult.OK Then
pdf.SaveAs(dialog.FileName)
MessageBox.Show("PDF exported successfully.", "Export Complete")
End If
End Using
End Sub
このスニペットは、フォームのエクスポートをミニレポートジョブのように扱います。つまり、フィールド値を収集し、それを HTML テンプレートに埋め込み、レンダリングして、ユーザーが選択した場所に保存します。 フォームに含まれるフィールドの数だけ HTML テーブルを拡張できます。 複数タブのフォームの場合は、タブごとに個別の <section> ブロックを構築し、 IronPDF が自然にページ分割できるようにします。
ヘッダーとフッターを追加するにはどうすればよいですか?
ヘッダーとフッターにより、専門的な使用のためにフォームのエクスポートが洗練されます。 IronPDF の TextHeaderFooter クラスは、本文の HTML を変更せずに、各ページの上部と下部にテキストをスタンプします。
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
CenterText = "Confidential -- Internal Use Only",
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
FontSize = 9,
DrawDividerLine = true
});
pdf.AddTextFooters(new TextHeaderFooter
{
CenterText = "Generated by MyApp v2.0",
FontSize = 8
});
pdf.SaveAs("FormWithHeader.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
CenterText = "Confidential -- Internal Use Only",
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
FontSize = 9,
DrawDividerLine = true
});
pdf.AddTextFooters(new TextHeaderFooter
{
CenterText = "Generated by MyApp v2.0",
FontSize = 8
});
pdf.SaveAs("FormWithHeader.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Stamp header and footer on every page
pdf.AddTextHeaders(New TextHeaderFooter With {
.CenterText = "Confidential -- Internal Use Only",
.LeftText = "{date}",
.RightText = "Page {page} of {total-pages}",
.FontSize = 9,
.DrawDividerLine = True
})
pdf.AddTextFooters(New TextHeaderFooter With {
.CenterText = "Generated by MyApp v2.0",
.FontSize = 8
})
pdf.SaveAs("FormWithHeader.pdf")
{date} などの動的トークンは、レンダリング時に自動的に解決されます。ブランド化された出力の場合は、TextHeaderFooter を HtmlHeaderFooter に置き換え、企業ロゴを含む完全な HTML マークアップを指定してください。 ヘッダーとフッターの使い方ガイドには、使用可能なすべてのトークンとレイアウト オプションが表示されます。
フォームをファイルではなくバイト配列に変換するにはどうすればよいですか?
ディスクに直接保存するのは便利ですが、多くのアプリケーションではPDFをHTTP経由で送信したり、データベースに保存したり、下流のサービスに渡したりする必要があります。そのような場合は、ファイルをスキップして生のバイト列で作業します。
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;
// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");
// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;
// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");
// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");
Imports IronPdf
Imports System.IO
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Get raw bytes -- no file required
Dim pdfBytes As Byte() = pdf.BinaryData
' Alternatively, get a MemoryStream for APIs that accept streams
Using stream As MemoryStream = pdf.Stream
Dim fromStream As Byte() = stream.ToArray()
End Using
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes")
' Example: return as HTTP response in ASP.NET Core
' Return File(pdfBytes, "application/pdf", "form-export.pdf")
BinaryData プロパティは、事前に計算されたバイト配列の O(1) コピーを実行します。 Stream プロパティは、ストリーム入力を期待するライブラリのシーク可能なアクセスをサポートする新しい MemoryStream を返します。これは、最終バイトを配信する前に圧縮または暗号化を連鎖させる場合に便利です。 メモリ内 PDF 処理の詳細については、 PDF メモリ ストリーム ガイドを参照してください。
保存する前にセキュリティ設定を適用するにはどうすればよいですか?
フォームのエクスポートには機密データが含まれることがよくあります。 IronPDF のセキュリティ API は PDF を暗号化し、受信者が PDF に対して実行できる操作を制限します。
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey";
pdf.SecuritySettings.UserPassword = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting = true; // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey";
pdf.SecuritySettings.UserPassword = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting = true; // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey"
pdf.SecuritySettings.UserPassword = "viewerPass"
pdf.SecuritySettings.AllowUserPrinting = True ' allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = False ' block copy
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SaveAs("SecureForm.pdf")
Console.WriteLine("Password-protected PDF created.")
所有者パスワードを設定すると、管理者は権限フラグを制御できますが、ユーザー パスワードはドキュメントへのアクセスを完全に制御します。 AllowUserPrinting フラグはここで特に関係があります。受信者に編集権限を与えずに、エクスポートされたフォームを再印刷できるようにすることができます。 詳細は、PDF の権限とパスワード ガイドに記載されています。
C# フォームの印刷方法をどのように比較しますか?
WinForms のネイティブ PrintDocument、GDI+ ビットマップ キャプチャ、および IronPDF の HTML レンダリングのいずれかを選択するかどうかは、忠実度、複雑さ、および移植性のトレードオフによって決まります。
| アプローチ | 出力忠実度 | コードの複雑さ | クロスプラットフォーム | CSSサポート | 最適な用途 |
|---|---|---|---|---|---|
| PrintDocument + PDF プリンタードライバー | 中くらい | 中くらい | Windowsのみ | 該当なし | 既存の印刷ロジックを備えたレガシー WinForms |
| GDI+ ビットマップキャプチャ (Control.DrawToBitmap) | 高(ラスター) | 低い | Windowsのみ | 該当なし | スクリーンショット風のクイックキャプチャ |
| IronPDFのHTMLレンダリング | 高(ベクトル) | 低い | Windows、Linux、macOS、Docker | 完全なCSS3 | プロフェッショナルでポータブル、データ駆動型のエクスポート |
| レポートビューアー (RDLC) | 高い | 高い | Windowsのみ | 制限あり | グループ化された複雑なページ分割レポート |
IronPDFのHTMLベースのアプローチは、あらゆるズームレベルできれいに拡大縮小され、あらゆるデバイスで鮮明に印刷できるベクターPDF出力を生成します。レンダリングエンジンはChromiumであるため、CSSメディアクエリ、フレックスボックスレイアウト、Google Fontsはすべて期待通りに動作します。これはGDI+ビットマップキャプチャでは再現できません。 このライブラリはLinux 環境やDocker コンテナー内でも実行されるため、この表の中で Windows 以外で動作する唯一のオプションとなります。
フォームに複数のタブがある場合はどうなりますか?
マルチタブ WinForms はビジネス アプリケーションでよく使用されます。 PDF はライブ GDI+ サーフェスからではなく HTML から生成されるため、表示されるタブ コンテンツを正確に制御できます。 タブごとに 1 つの HTML セクションを作成し、レンダリングする前にそれらを連結します。 パイプラインは、タブの HTML 文字列から ChromePdfRenderer を経由して、タブごとに 1 つの論理セクションがある単一の連続した複数ページの PDF に流れます。 あるいは、各タブを個別にレンダリングし、結果の PdfDocument オブジェクトをIronPDF のマージ APIを使用してマージします。
エクスポート前にフォーム検証をどのように処理しますか?
有効なフォーム データのみをエクスポートします。 シンプルなガード パターンにより、不完全な送信からの PDF 生成を防止します。まずフィールドを検証し、すべての必須フィールドが合格した場合にのみ HTML 生成とレンダリングに進みます。 いずれかのフィールドが失敗した場合は、UI でエラーを強調表示し、エクスポートを中止します。 これにより、エクスポートされた PDF の一貫性が保たれ、部分的なデータによる下流での混乱が回避されます。 Windows フォーム検証に関する Microsoft のドキュメントによると、ErrorProvider は、あらゆるアクションを実行する前のフィールド レベルの検証フィードバックの標準メカニズムです。
ASP.NET Coreから PDF エクスポートをどのように提供しますか?
ASP.NET Coreで構築された Web フォームは、同じ ChromePdfRenderer API を使用して PDF にエクスポートできます。 レンダリングされたバイトはファイルの結果として直接返されます。
using IronPdf;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
[HttpPost("export")]
public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
{
// Build HTML from submitted form data
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
}
public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
using IronPdf;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
[HttpPost("export")]
public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
{
// Build HTML from submitted form data
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
}
public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/forms")>
Public Class FormExportController
Inherits ControllerBase
<HttpPost("export")>
Public Function ExportFormAsPdf(<FromBody> formData As FormDataModel) As IActionResult
' Build HTML from submitted form data
Dim html As String = $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
Dim pdfBytes As Byte() = pdf.BinaryData
Dim fileName As String = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf"
Return File(pdfBytes, "application/pdf", fileName)
End Function
End Class
Public Class FormDataModel
Public Property FormTitle As String
Public Property ApplicantName As String
Public Property ReferenceId As String
Public Sub New(formTitle As String, applicantName As String, referenceId As String)
Me.FormTitle = formTitle
Me.ApplicantName = applicantName
Me.ReferenceId = referenceId
End Sub
End Class
このコントローラーは、フォーム データを JSON として受信し、メモリ内に PDF を生成し、ファイルのダウンロードとしてストリーム返します。 サーバー上に一時ファイルは作成されません。 Blazorアプリケーションの場合もアプローチは同様で、サービスから同じレンダリング コードを呼び出し、IJSRuntime を介してバイトをブラウザーにプッシュします。 完全なASP.NET統合パターンについては、 ASP.NETから PDF へのガイドに記載されています。
どのような MIME タイプとコンテンツ配置を使用すべきでしょうか?
コンテンツ タイプとして常に application/pdf を返します。 PDF をブラウザに表示するには Content-Disposition: inline を使用し、ダウンロードを強制するには Content-Disposition: attachment を使用します。 attachment を使用すると、ファイル名がブラウザの保存ダイアログに表示されるので、参照 ID または日付を含む意味のある名前を選択してください。
生成された PDF をどのようにキャッシュしますか?
同じフォームのエクスポートが繰り返し要求された場合は、再レンダリングを回避するためにバイト配列をキャッシュします。 IMemoryCache は単一サーバーの展開で機能します。 マルチインスタンス設定には、Redis などの分散キャッシュを使用します。 基礎となるフォーム データの変更頻度に合わせて有効期限を設定します。
フォームから PDF へのエクスポートのベスト プラクティスは何ですか?
一貫性のある高品質のフォームのエクスポートは、いくつかの繰り返し可能なパターンから生まれます。
- HTMLはシンプルに保ちましょう。JavaScriptを多用するテンプレートは避けましょう。純粋なHTMLとCSSを使用するとレンダリングが高速になり、PDFのサイズも小さくなります。 フォームの計算がこれに依存する場合にのみ、
RenderingOptions.EnableJavaScriptを有効にします。 -印刷CSSを使用します。スタイルシートで@media printルールを定義します。 これにより、エクスポートされた PDF から、ナビゲーション バーやサイドバーなどの画面のみのChromeが削除されます。 -ユーザー入力をサニタイズします。テンプレートに挿入するフィールド値内のHTMLエンティティをエスケープすることで、マークアップの破損や、場合によってはPDFへのスクリプト挿入を防止します。 - PdfDocument オブジェクトを破棄します。アンマネージリソースは破棄されるまで保持されます。 保存後に、
using宣言を使用するか、Dispose()を明示的に呼び出します。 -本番環境のデータでテストしてください。長いテキスト、特殊文字、埋め込み画像を含むフォームでは、予期しないレイアウトが生成される場合があります。 開発中に実際のデータ サンプルに対してエクスポートを実行します。
レンダリング オプション参照には、カスタム用紙サイズからカスタム余白やページの向きまで、使用可能なすべての設定が記載されています。
大きなフォームや複数ページのフォームをどのように処理しますか?
IronPDF は、コンテンツの高さと選択した用紙サイズに基づいて自動的にページ番号を付けます。新しいフォームセクションを常に新しいページで開始する必要がある場合は、CSS のセクションコンテナに page-break-before: always を挿入してください。 数百のフィールドを持つフォームの場合、推定容量を持つ MemoryStream を事前に割り当てると、バイト配列のコピー中の GC 負荷が軽減されます。
デジタル署名を追加するにはどうすればいいですか?
署名されたフォームのエクスポートは、多くの管轄区域で法的効力を持ちます。 IronPDF は、PFX ファイルまたは Windows 証明書ストアに保存されているデジタル証明書をサポートします。
// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");
// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");
Imports IronPdf.Signing
' Load the certificate and sign in one step
Dim signature As New PdfSignature("certificate.pfx", "certPassword")
pdf.Sign(signature)
pdf.SaveAs("SignedForm.pdf")
Adobe PDF デジタル署名の概要によると、デジタル署名は文書の出所を証明し、署名後に行われた変更を検出します。 PDF デジタル署名ガイドでは、証明書の構成と可視署名フィールドについて詳しく説明します。
どのような重要なポイントを覚えておくべきでしょうか?
IronPDFを使用して C# Windows フォームを PDF に変換する手順は、フォーム データの HTML 表現を作成し、それを ChromePdfRenderer に渡し、結果を保存または送信するという 3 つの手順に簡略化されます。 このアプローチでは、鮮明に印刷され、プラットフォーム間で動作し、完全な CSS3 レイアウト モデルをサポートするベクター PDF が生成されます。これは、GDI+ ビットマップ キャプチャや従来の印刷ドライバ方式では得られない利点です。
このガイドで説明する主な機能:
- WinForms およびASP.NET Core用の
ChromePdfRendererを使用した HTML から PDF へのレンダリング - WinForms コントロールから HTML テンプレートへのライブ データ バインディング
- ヘッダー、フッター、ページ番号付け (
TextHeaderFooter) - HTTPレスポンスとデータベースストレージ用の
BinaryData経由のメモリ内バイト配列出力 - PDFセキュリティ設定: 所有者/ユーザーのパスワードと権限フラグ
- 法的拘束力のある輸出のためのデジタル署名の添付
IronPDF の機能セットを調べて、注釈ツール、フォーム フィールドの編集、PDF/A 準拠などを確認します。 30 日間の試用ライセンスでIronPDF を無料でお試しになり、今すぐ独自のフォーム エクスポート ワークフローに適用してください。
よくある質問
IronPDF を使用して C# フォームを PDF に変換するにはどうすればよいですか?
IronPDF の直感的な API を利用することで、複雑なコードを必要とせずに効率的に PDF 変換を処理し、C# フォームを PDF に変換できます。
.NET アプリケーションにおいて PDF ドキュメントをバイト配列に変換することがなぜ重要ですか?
PDF ドキュメントをバイト配列に変換することは、PDF をデータベースに保存したり、API 経由での送信、メモリ内での文書内容の処理を可能にするため重要です。これは現代の .NET アプリケーションにおける重要な操作です。
バイト配列変換に IronPDF を使用する利点は何ですか?
IronPDF は使いやすい API を提供することで、プロセスを簡略化し、複雑なコードの必要性を減らし、開発効率を向上させます。
IronPDF はメモリ内で PDF 変換を処理できますか?
はい、IronPDF はメモリ内で PDF 変換を処理できるため、開発者はファイルをディスクに保存することなく文書内容を管理できます。
IronPDF を使用して、PDF をデータベースに保存することは可能ですか?
はい、IronPDF を使用して PDF をバイト配列に変換することで、データベースシステムとシームレスに統合することができます。
IronPDF は API 経由での PDF ファイル伝送をどのように支援しますか?
IronPDF は PDF をバイト配列に変換することで API を通じて PDF ファイルを伝送することを支援し、ネットワークプロトコルを通じて文書データを送受信しやすくします。
IronPDF の API が開発者にとって直感的である理由は何ですか?
IronPDF の API は開発者が複雑な PDF 操作を簡略化する、明確でわかりやすいメソッドを提供することで設計されており、生産性を向上させ、学習曲線を軽減します。


