認証ログインを介したHTMLからPDFへの変換方法

チャクニット・ビン
チャクニット・ビン
2023年1月25日
更新済み 2024年12月10日
共有:
This article was translated from English: Does it need improvement?
Translated
View the article in English

ログインを扱う最良の方法は、可能であればログインを避け、ファイルまたは文字列から直接HTMLをレンダリングすることです。

IronPDFを始めましょう

今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。

最初のステップ:
green arrow pointer



ベストプラクティス

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));
}

次の内容にご注意ください。
任意の相対URLは、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;
    }
}
チャクニット・ビン
ソフトウェアエンジニア
ChaknithはIronXLとIronBarcodeで作業しています。彼はC#と.NETに深い専門知識を持ち、ソフトウェアの改善と顧客サポートを支援しています。ユーザーとの対話から得た彼の洞察は、より良い製品、文書、および全体的な体験に貢献しています。