認証ログインを介したHTMLからPDFへの変換方法
ログインを扱う最良の方法は、可能であればログインを避け、ファイルまたは文字列から直接HTMLをレンダリングすることです。
IronPDFを始めましょう
今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。
認証ログインを介したHTMLからPDFへの変換方法
ベストプラクティス
IronPDFはTLSネットワーク認証(ユーザー名とパスワード)をサポートしており、非常に安全です。.NETウェブアプリは簡単に対応できます:ChromeHttpLoginCredentials API
ベストプラクティスは、HTMLおよび任意のアセットをダウンロードするためにSystem.Net.WebClient
またはHttpClient
を使用することです。 これは、ヘッダー、ログイン、その他必要なものすべてを完全にサポートしています。メモリやディスクにダウンロードされると、IronPDFはHTMLをPDFに変換します。 スタイルシートや画像などのアセットは、HtmlAgilityPack
を使用して発見し、System.Net.WebClient
を使用してダウンロードすることもできます。
string html;
using (WebClient client = new WebClient()) {
html = client.DownloadString("http://www.google.com");
}
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img")) {
Console.WriteLine(img.GetAttributeValue("src", null));
}
string html;
using (WebClient client = new WebClient()) {
html = client.DownloadString("http://www.google.com");
}
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img")) {
Console.WriteLine(img.GetAttributeValue("src", null));
}
次の内容にご注意ください。
System.Uri
クラスのオーバーロードされたコンストラクタを使用して絶対URLに再ベース化できます。 HTML全体のドキュメントで任意の相対パスを再ベース化するには、HtmlAgilityPackを使用してヘッダーにネットワーク認証を使用してログイン
ほとんどのASP.NETアプリケーションはネットワーク認証をサポートしており、HTMLのフォーム投稿よりも信頼性が高い。
:path=/static-assets/pdf/content-code-examples/how-to/logins-username-password.cs
using IronPdf;
using System;
ChromePdfRenderer renderer = new ChromePdfRenderer
{
// setting login credentials to bypass basic authentication
LoginCredentials = new ChromeHttpLoginCredentials()
{
NetworkUsername = "testUser",
NetworkPassword = "testPassword"
}
};
var uri = new Uri("http://localhost:51169/Invoice");
// Render web URL to PDF
PdfDocument pdf = renderer.RenderUrlAsPdf(uri);
// Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf");
HTMLフォームを使用してログイン
データをHTMLフォームに送信してログインすることも、前の例で示したようにChromeHttpLoginCredentialsクラスを使用して実現できます。 IronPDF の ChromeHttpLoginCredentials API を参照してください。
ご考慮ください:
- ログインデータは、HTMLフォームのACTION属性で指定されたURLに投稿されなければなりません。 これは、HttpLoginCredentials の *LoginFormUrl* 属性として設定する必要があります。 これは、実際にPDFとしてレンダリングしたいURLとは異なる場合があります。
- 送信されるデータは、HTMLフォーム内のすべての入力とテキストエリアを表す必要があります。 名前属性は各変数の名前を定義します(一般的に誤解されているようにidではありません)。
- ウェブサイトによっては、この種の機械ログインを積極的に防止している場合があります。
MVC
以下の回避策は、.NET MVCビューをプログラムで文字列にレンダリングできるようにするもので、MVCのログインを回避しながらビューを忠実にレンダリングするのに非常に便利です。
public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null)
{
try
{
var context = controller.ControllerContext;
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
if (viewResult.View == null)
{
throw new Exception($"Partial view {viewPath} could not be found.");
}
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null)
{
try
{
var context = controller.ControllerContext;
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
if (viewResult.View == null)
{
throw new Exception($"Partial view {viewPath} could not be found.");
}
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}