認証ログインを介したHTMLからPDFへの変換方法
ログインを扱う最良の方法は、可能であればログインを避け、ファイルまたは文字列から直接HTMLをレンダリングすることです。
IronPDFを始めましょう
今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。
認証ログインを介したHTMLからPDFへの変換方法
ベストプラクティス
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
次の内容にご注意ください。
System.Uri
クラスのオーバーロードされたコンストラクタを使用して絶対URLに再ベース化することができます。 HTMLドキュメント全体の相対パスをリベースするには ネットワーク認証を使用してログイン
ほとんどの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")
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