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

This article was translated from English: Does it need improvement?
Translated
View the article in English

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

IronPDFを始めましょう

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

最初のステップ:
green arrow pointer



ベストプラクティス

IronPDFはTLSネットワーク認証をサポートしています(ユーザー名とパスワード)Node.jsは非常に安全であり、.NETウェブアプリケーションは簡単にサポートできます:[ChromeHttpLoginCredentials API

クロームHTTPログインクレデンシャルAPI](/object-reference/api/IronPdf.ChromeHttpLoginCredentials.html)

最良の方法は、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));
}
Dim html As String
Using client As New WebClient()
	html = client.DownloadString("http://www.google.com")
End Using
Dim doc As New HtmlDocument()
doc.LoadHtml(html)
For Each img As HtmlNode In doc.DocumentNode.SelectNodes("//img")
	Console.WriteLine(img.GetAttributeValue("src", Nothing))
Next img
VB   C#

次の内容にご注意ください。
任意の相対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");
Imports IronPdf
Imports System

Private renderer As New ChromePdfRenderer With {
	.LoginCredentials = New ChromeHttpLoginCredentials() With {
		.NetworkUsername = "testUser",
		.NetworkPassword = "testPassword"
	}
}

Private uri = New Uri("http://localhost:51169/Invoice")

' Render web URL to PDF
Private pdf As PdfDocument = renderer.RenderUrlAsPdf(uri)

' Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf")
VB   C#

HTMLフォームを使用してログイン

HTMLフォームにデータを送信してログインするには、前の例のように、ChromeHttpLoginCredentialsクラスを使用して実現することもできます。 IronPDFの[ChromeHttpLoginCredentials API

クロームHTTPログインクレデンシャルAPI](/object-reference/api/IronPdf.ChromeHttpLoginCredentials.html).*

ご検討ください:

  • ログインデータは、HTMLフォームのACTION属性で指定されたURLに投稿されなければなりません。 以下の内容を日本語に翻訳してください:

これは * として設定する必要がありますLoginFormUrl ログインフォームURLHttpLoginCredentials の属性 これは、実際にPDFとしてレンダリングしたいURLとは異なる場合があります。

  • 送信されるデータは、HTMLフォーム内のすべての入力とテキストエリアを表す必要があります。 名前属性は各変数の名前を定義します。(一般的に誤解されているように、idではありません。).
  • ウェブサイトによっては、この種の機械ログインを積極的に防止している場合があります。

    MVC

The MVC Pattern

MVC (Model-View-Controller) は、ソフトウェアアーキテクチャのデザインパターンの一つで、アプリケーションのビジネスロジック(Model)、ユーザーインターフェース(View)、およびそれらの相互作用を制御する(Controller)の3つの部分に分離します。この分離により、視認性の向上や、コードの再利用性、保守性の向上を図ることができます。


Frameworks such as ASP.NET MVC and Ruby on Rails use the MVC pattern to help developers create structured and maintainable code.

ASP.NET MVCやRuby on Railsのようなフレームワークは、開発者が構造化され、保守しやすいコードを作成するのを支援するために、MVCパターンを使用しています。


Benefits of using MVC

  • Separation of concerns: MVCの最大の利点は、コントローラ、ビュー、およびモデルのそれぞれに責任を分割することです。これにより、開発チーム内でタスクを効率的に分担でき、開発の迅速化や柔軟性の向上が期待できます。
  • Reusability: 各コンポーネントが独立しているため、再利用が簡単になります。たとえば、異なるプロジェクトでビューを使い回すことができます。
  • Maintainability: コードが分離され、モジュール化されているため、バグの修正や機能追加が容易になります。

MVC Components

  • Model: ビジネスロジックやデータへのアクセス方法を定義します。例えば、データベース操作やエンティティの作成がModelで行われます。
  • View: ユーザーに見える部分、主にユーザーインターフェースを担当します。データの視覚的な表示およびユーザーからの入力を取り扱います。
  • Controller: ModelとViewをつなぎ、中間の役割を果たします。ユーザーからの入力を処理し、必要なModelの操作を行い、その結果をViewに渡します。

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;
    }
}
<System.Runtime.CompilerServices.Extension> _
Public Function RenderPartialViewToString(ByVal controller As Controller, ByVal viewPath As String, Optional ByVal model As Object = Nothing) As String
	Try
		Dim context = controller.ControllerContext

		controller.ViewData.Model = model

		Using sw = New StringWriter()
			Dim viewResult = ViewEngines.Engines.FindPartialView(context, viewPath)

			If viewResult.View Is Nothing Then
				Throw New Exception($"Partial view {viewPath} could not be found.")
			End If

			Dim viewContext As 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()
		End Using
	Catch ex As Exception
		Return ex.Message
	End Try
End Function
VB   C#