How to Export PDF UA Format Documents in C#
BCL Technologies、easyPDF SDKの元発行者は、2020年3月にApryse(以前のPDFTron)によって買収され、製品は現在Apryse PDF SDKと並んでレガシーSDKとして位置付けられています。 SDK自体は、最新の開発環境でデプロイとメンテナンスの課題を生むいくつかのレガシーテクノロジーに依存しています。
よくあるイージーPDF SDKデプロイメントの問題
開発者は、Easy PDF SDKを使用する際に、このような問題に頻繁に遭遇します:
bcl.easypdf.interop.easypdfprinter.dll error loadingCOM object that has been separated from its underlying RCW cannot be usedTimeout expired waiting for print job to completeThe printer operation failed because the service is not runningError: Access denied(対話型セッションが必要です)Cannot find printer: BCL easyPDF Printer
これらのエラーは通常、Easy PDF SDKのアーキテクチャに起因し、仮想プリンタードライバー、COMインターフェイス、および現代のサーバー環境で再現が難しいインタラクティブなWindowsセッションに依存しています。
Easy PDF SDKとIronPDFの比較:主な違い
| フィーチャー | イージーPDF SDK | IronPDF |
|---|---|---|
| プラットフォーム | Windowsのみ | Windows、Linux、macOS、Docker |
| オフィス依存 | 必須 | None |
| 分布 | MSIインストーラ + 手動DLLリファレンス(NuGetパッケージなし) | NuGet パッケージ (IronPdf) |
| インストール。 | MSI + 仮想プリンタードライバー + COM登録 | NuGetパッケージ |
| サーバーサポート | 通常はインタラクティブなWindowsセッションが必要 | ヘッドレスで動作 |
| HTMLレンダリング。 | 基本(オフィスベース) | フルChromium(CSS3、JS) |
| .NETサポート | .NET Core限定 | .NET Framework 4.6.2以降および.NET 5/6/7/8/9 |
| 非同期パターン | コールバックベース | ネイティブasync/await |
| コンテナサポート | ベンダーによってサポートされていません | 完全なDocker/Kubernetes |
プラットフォームの制限
Easy PDF SDKはWindowsを対象とし、Office文書の変換にMicrosoft Officeのインストールに依存するため、Linux、macOS、Dockerのようなコンテナ化された環境での使用が制限されます。 この依存関係は、サーバーセットアップをより複雑にする傾向があり、Windowsへのデプロイを制限します—マルチプラットフォームのDevOpsを実践しているチームやLinuxコンテナに依存するチームにとって制約です。
移行前の準備
前提条件
あなたの環境がこれらの要件を満たしていることを確認してください:
- .NET Framework 4.6.2+または.NET Core 3.1 / .NET 5-9
- Visual Studio 2019+またはC#拡張機能付きVS Code
- NuGetパッケージマネージャへのアクセス
- IronPDFライセンスキー (ironpdf.com にて無料トライアル可能)
かんたんPDF SDKの使用法
ソリューションディレクトリでこれらのコマンドを実行し、すべてのEasy PDF SDK参照を識別してください:
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .
# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .
# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .
# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .
# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .
# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .
# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
予想される画期的な変更
| Easy PDF SDKパターン | 必要な変更 |
|---|---|
new Printer() |
ChromePdfRenderer を使用してください |
PrintOfficeDocToPDF() |
Officeの変換は別扱い |
RenderHTMLToPDF() |
RenderHtmlAsPdf() |
| COM相互運用リファレンス | 完全に削除 |
| プリンタドライバの設定 | 不要 |
BeginPrintToFile() コールバック |
ネイティブasync/await |
| インタラクティブセッションの要件 | ヘッドレスで動作 |
| 1ベースのページインデックス | 0ベースのインデックス |
| タイムアウト(秒 | タイムアウト(ミリ秒 |
ステップごとの移行プロセス
ステップ1:Easy PDF SDKを削除する
Easy PDF SDKはNuGetパッケージではなくMSIインストーラーとして配布され、プロジェクトは通常、そのアセンブリ(.NET Framework用のBCL.easyPDF.PDFConverter.dllや.NET Core用のBCL.easyPDF.PDFConverter.NetCore.dllなど)を直接参照します。 すべての参照を削除してください:
1.プログラムと機能からBCL EasyPDF SDKをアンインストールする
.csprojからDLL<Reference>エントリーを削除してください 3.COMインターオプ参照を削除 4.GACエントリが存在する場合は、クリーンアップ
ステップ2: IronPDFをインストールする
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
またはパッケージマネージャーコンソールから:
Install-Package IronPdf
ステップ 3: 名前空間参照の更新
Easy PDF SDKの名前空間をIronPDFに置き換えてください:
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.PDFProcessor;
using BCL.easyPDF.Printer;
// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.PDFProcessor;
using BCL.easyPDF.Printer;
// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
完全な API 移行のリファレンス
コア クラス マッピング
| Easy PDF SDKクラス | IronPDF 同等物 |
|---|---|
Printer |
ChromePdfRenderer |
PDFDocument |
PdfDocument |
HTMLConverter |
ChromePdfRenderer |
PrinterConfiguration |
ChromePdfRenderOptions |
PageOrientation |
PdfPaperOrientation |
PageSize |
PdfPaperSize |
SecurityHandler |
PdfDocument.SecuritySettings |
PDF作成方法
| Easy PDF SDKの方法 | IronPDF メソッド |
|---|---|
printer.RenderHTMLToPDF(html, path) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
printer.RenderUrlToPDF(url, path) |
renderer.RenderUrlAsPdf(url).SaveAs(path) |
htmlConverter.ConvertHTML(html, doc) |
renderer.RenderHtmlAsPdf(html) |
htmlConverter.ConvertURL(url, doc) |
renderer.RenderUrlAsPdf(url) |
PDF操作方法
| Easy PDF SDKの方法 | IronPDF メソッド |
|---|---|
doc.Append(doc2) |
PdfDocument.Merge(pdf1, pdf2) |
doc.ExtractPages(start, end) |
pdf.CopyPages(start, end) |
doc.DeletePage(index) |
pdf.RemovePages(index) |
doc.GetPageCount() |
pdf.PageCount |
doc.Save(path) |
pdf.SaveAs(path) |
doc.Close() |
pdf.Dispose() または using |
doc.ExtractText() |
pdf.ExtractAllText() |
設定オプション
| 簡単PDF SDKオプション | IronPDF オプション |
|---|---|
config.TimeOut |
RenderingOptions.Timeout |
config.PageOrientation = Landscape |
RenderingOptions.PaperOrientation = Landscape |
config.PageSize = A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
config.MarginTop/Bottom/Left/Right |
RenderingOptions.MarginTop、など。 |
コード移行の例
HTML文字列をPDFに変換
簡単なPDF SDKの実装:。
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
pdf.Save("output.pdf");
pdf.Close();
}
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
pdf.Save("output.pdf");
pdf.Close();
}
}
Imports BCL.easyPDF
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PDFDocument()
Dim htmlConverter As New HTMLConverter()
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf)
pdf.Save("output.pdf")
pdf.Close()
End Sub
End Class
IronPDFの実装:。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDFはHTMLレンダリングを1つのレンダラーコールにまとめ、Close()パターンを取り除きます。
URLからPDFへの変換
簡単なPDF SDKの実装:。
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertURL("https://example.com", pdf);
pdf.Save("webpage.pdf");
pdf.Close();
}
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertURL("https://example.com", pdf);
pdf.Save("webpage.pdf");
pdf.Close();
}
}
Imports BCL.easyPDF
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PDFDocument()
Dim htmlConverter As New HTMLConverter()
htmlConverter.ConvertURL("https://example.com", pdf)
pdf.Save("webpage.pdf")
pdf.Close()
End Sub
End Class
IronPDFの実装:。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Module Program
Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Module
複数のPDFをマージする
簡単なPDF SDKの実装:。
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf1 = new PDFDocument("document1.pdf");
var pdf2 = new PDFDocument("document2.pdf");
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
// Reference BCL.easyPDF.PDFConverter.dll (or the .NetCore variant)
// installed by the easyPDF SDK MSI — there is no NuGet package.
using BCL.easyPDF;
using System;
class Program
{
static void Main()
{
var pdf1 = new PDFDocument("document1.pdf");
var pdf2 = new PDFDocument("document2.pdf");
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
Imports BCL.easyPDF
Imports System
Module Program
Sub Main()
Dim pdf1 As New PDFDocument("document1.pdf")
Dim pdf2 As New PDFDocument("document2.pdf")
pdf1.Append(pdf2)
pdf1.Save("merged.pdf")
pdf1.Close()
pdf2.Close()
End Sub
End Module
IronPDFの実装:。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim pdfs As New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
}
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
End Sub
End Module
IronPDFの静的なAppendパターンを置き換えます。
パスワード保護
IronPDFの実装:。
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
' Set security
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SaveAs("protected.pdf")
ヘッダーとフッター
Easy PDF SDKは、そのHTML変換パスにおいて、ヘッダー/フッター用の専用APIを公開していません; ヘッダーとフッターは通常、ソースHTMLに直接埋め込まれています。 IronPDFは、専用のヘッダー/フッターオブジェクトを提供します:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
その他のオプションについては、headers and footers documentationを参照してください。
現代のアプリケーションはノンブロッキングオペレーションを必要とします。
Easy PDF SDKは、コールバックベースの非同期パターンを使用します。 IronPDFはネイティブのasync/awaitをサポートしています:
簡単なPDF SDKの実装:。
using BCL.easyPDF;
Printer printer = new Printer();
// BCL uses callback-based async
printer.BeginPrintToFile(
"https://example.com",
"output.pdf",
OnPrintComplete,
OnPrintError
);
Console.ReadLine();
printer.Dispose();
using BCL.easyPDF;
Printer printer = new Printer();
// BCL uses callback-based async
printer.BeginPrintToFile(
"https://example.com",
"output.pdf",
OnPrintComplete,
OnPrintError
);
Console.ReadLine();
printer.Dispose();
Imports BCL.easyPDF
Dim printer As New Printer()
' BCL uses callback-based async
printer.BeginPrintToFile( _
"https://example.com", _
"output.pdf", _
AddressOf OnPrintComplete, _
AddressOf OnPrintError _
)
Console.ReadLine()
printer.Dispose()
IronPDFの実装:。
using IronPdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var renderer = new ChromePdfRenderer();
// Native async/await
var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
await pdf.SaveAsAsync("output.pdf");
Console.WriteLine("PDF created: output.pdf");
}
}
using IronPdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var renderer = new ChromePdfRenderer();
// Native async/await
var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
await pdf.SaveAsAsync("output.pdf");
Console.WriteLine("PDF created: output.pdf");
}
}
Imports IronPdf
Imports System.Threading.Tasks
Class Program
Shared Async Function Main() As Task
Dim renderer = New ChromePdfRenderer()
' Native async/await
Dim pdf = Await renderer.RenderUrlAsPdfAsync("https://example.com")
Await pdf.SaveAsAsync("output.pdf")
Console.WriteLine("PDF created: output.pdf")
End Function
End Class
重要な移行に関する注意事項
ページ索引の変更
Easy PDF SDKは1ベースのインデックスを使用します。 IronPDFは0ベースのインデックスを使用しています:
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);
// IronPDF: 0-based
pdf.CopyPages(0, 4);
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);
// IronPDF: 0-based
pdf.CopyPages(0, 4);
' Easy PDF SDK: 1-based
doc.ExtractPages(1, 5)
' IronPDF: 0-based
pdf.CopyPages(0, 4)
タイムアウト (ミリ秒単位)
Easy PDF SDKはタイムアウト値に秒を使用します。 IronPDFはミリ秒を使用しています:
// Easy PDF SDK: seconds
config.TimeOut = 120;
// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
// Easy PDF SDK: seconds
config.TimeOut = 120;
// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
' Easy PDF SDK: seconds
config.TimeOut = 120
' IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000
.NETコアの統合
Easy PDF SDKは、インタラクティブなセッションが要求されるため、Webコンテキストでは苦労します。
IronPDFパターン:
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
End Class
Dockerの展開
Easy PDF SDKはLinuxコンテナ用に設計されておらず、サポートされる構成はWindowsとMicrosoft Office、仮想プリンタードライバー、および(ほとんどのセットアップにおいて)インタラクティブデスクトップセッションであり、通常のLinuxベースのDockerワークフローには不適当です。
IronPDFのDocker設定:。
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
libc6 libgdiplus libx11-6 libxcomposite1 \
libxdamage1 libxrandr2 libxss1 libxtst6 \
libnss3 libatk-bridge2.0-0 libgtk-3-0 \
libgbm1 libasound2 fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]
よくある移行の問題のトラブルシューティング
問題です:プリンタが見つかりません
症状: Cannot find printer: BCL easyPDF Printer
ソリューション: IronPDFはプリンタドライバを必要としません:
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
課題COM 相互接続エラー
症状: DLL error loading または RCW エラー
解決策: すべてのCOM参照を削除し、IronPDFのマネージドAPIを使用してください。
課題サーバーのタイムアウト
症状: PDF生成がWebサーバー上でハングする。
ソリューション: IronPDFはインタラクティブセッションなしでヘッドレスで動作します:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.Timeout = 60000 ' Reliable timeout
Dim pdf = renderer.RenderHtmlAsPdf(html)
問題背景が印刷されない
症状: CSSの背景が欠けている。
解決策:バックグラウンド印刷を有効にする:
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = True
移行後のチェックリスト
コードの移行が完了したら、以下を確認してください:
- IronPDFのChromiumエンジンでPDF出力の品質を検証
- 複雑な HTML/CSS を含むすべてのエッジケースをテストします
- 対話型セッションなしでサーバーの展開が機能することを検証する
- Docker/コンテナのデプロイメントをテストする
- デプロイメントから BCL EasyPDF インストーラーを削除します
- サーバーから Office のインストールを削除します (不要になりました)
- 新しいNuGetパッケージで CI/CD パイプラインを更新する
その他のリソース
Easy PDF SDKからIronPDFへの移行により、仮想プリンタードライバー、COMインターフェイス、およびPDF生成パスからWindowsのみの制約が除去されます。 Chromiumベースのレンダリングは、最新のCSS3およびJavaScriptのサポートを提供し、同じコードベースがDocker、Kubernetes、およびLinuxベースのクラウド環境で実行されるため、easyPDF SDKのサポートされるデプロイメントモデルをターゲットにするのが難しいものです。

