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

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

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


PDF 用 C# NuGet ライブラリ

でインストール NuGet

Install-Package IronPdf
または
Java PDF JAR(ジャバPDF JAR)

ダウンロード DLL (ディーエルエル)

DLLをダウンロード

プロジェクトに手動でインストールする

PDF 用 C# NuGet ライブラリ

でインストール NuGet

Install-Package IronPdf
または
Java PDF JAR(ジャバPDF JAR)

ダウンロード DLL (ディーエルエル)

DLLをダウンロード

プロジェクトに手動でインストールする

今日からプロジェクトでIronPDFを使い始めましょう。無料のトライアルをお試しください。

最初のステップ:
green arrow pointer

チェックアウト IronPDF オン Nuget 迅速なインストールと展開のために。8百万以上のダウンロード数により、PDFをC#で変革しています。

PDF 用 C# NuGet ライブラリ nuget.org/packages/IronPdf/
Install-Package IronPdf

インストールを検討してください IronPDF DLL 直接。ダウンロードして、プロジェクトまたはGACの形式で手動でインストールしてください。 IronPdf.zip

プロジェクトに手動でインストールする

DLLをダウンロード

ベストプラクティス

IronPDFはTLSネットワーク認証をサポートしています (ユーザー名とパスワード) 非常に安全であり、.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 クラスを使用することでも達成できます。 アイアンPDFの [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#