跳過到頁腳內容
使用IRONPDF

如何在C#開發人員中使用ChatGPT與IronPDF

1.0 什麼是 ChatGPT?

ChatGPT是由OpenAI開發的人工智慧(AI)聊天機器人。 "ChatGPT"一詞由"Chat"(指系統的聊天機器人功能)和"GPT"(代表生成式預訓練轉換器,是一種大型語言模型)組合而成。 OpenAI 的基本 GPT 模型,即 GPT-3.5 和 GPT-4,是 ChatGPT 的基礎,ChatGPT 經過改進(一種遷移學習方法),利用監督學習和強化學習技術的組合,用於對話應用,其中包括機器學習、自然語言處理和人工智慧。 ChatGPT能夠理解並產生類似人類的文本。

本文將示範如何開發一個 MAUI 應用程序,該應用程式利用 OpenAI ChatGPT API 接收訊息,根據使用者查詢提供結果,然後將這些結果匯出為 PDF 檔案以便稍後使用 IronPDF 進行使用。

1.1 設定 OpenAI 帳戶

若要註冊 OpenAI 帳戶,請執行以下操作:

  • 造訪 OpenAI 官方網站。
  • 在網站首頁上,找到並點選"註冊"按鈕。 這將帶您進入帳戶建立表單。
  • 請填寫報名表中的所有必填欄位。
  • 點擊發送到您註冊郵箱的驗證鏈接,以確認您的郵箱地址。
  • 如果您的註冊成功,您應該能夠透過輸入註冊時提供的登入資訊來存取您的 OpenAI 帳戶。

1.2 取得 OpenAI API 金鑰

2.0 .NET MAUI 應用程式入門

要建立用 C# 編寫的 .NET MAUI 應用程序,您需要安裝 Visual Studio 2022 和 .NET 7 Framework。 然後,請按照以下步驟建立並編寫 .NET MAUI 應用程式。

2.1 開啟 Visual Studio

開啟 Visual Studio,然後從選單中選擇"建立新專案",並在搜尋欄位中輸入".NET MAUI"。

2.2 選擇 .NET MAUI 應用程式

在 Visual Studio 中,從搜尋結果清單中選擇 .NET MAUI 應用程式範本。 選定項目後,給它一個好名字,然後選擇項目地點。 配置完成後,點選"下一步"。

如何在 IronPDF 中使用 ChatGPT(面向 C# 開發人員),圖 3:在 Visual Studio 中建立一個新的 .NET MAUI 應用程式 在 Visual Studio 中建立一個新的 .NET MAUI 應用程式

2.3 選擇框架

選擇必要的框架; 不過,例如,建議選擇最新的 .NET Framework。 在 Visual Studio 中選擇框架版本後,按下"建立"按鈕。

如何在 IronPDF 中使用 ChatGPT(面向 C# 開發人員),圖 4:配置新項目 配置新項目

在 Visual Studio 2022 中,將會建立一個新的 .NET MAUI 專案。 預設情況下,.NET MAUI 會開發一個簡單的計數器應用程式。

如何在 IronPDF 中使用 ChatGPT(針對 C# 開發人員),圖 5:.NET Framework 選擇 .NET Framework 選擇

透過修改 .NET MAUI 應用程序,可以將 ChatGPT OpenAI 整合到此平台版本中,並使用 IronPDF C# PDF 庫將結果匯出為 PDF 檔案。

2.4 安裝 OpenAI 軟體包

在 NuGet 套件管理器控制台中輸入以下命令。

Install-Package OpenAI

此命令將安裝 OpenAI 軟體包,該軟體包提供存取使用 C# 與 ChatGPT 互動所需的 API 的權限。

2.5 安裝 IronPDF

輸入以下指令安裝 IronPDF 軟體包:

Install-Package IronPdf

上述指令將 IronPDF 安裝到 MAUI 專案中。 IronPDF 用於將 HTML 內容渲染成 PDF 文件,是應用程式資料匯出到 PDF 文件的關鍵部分。

3.0 IronPDF是什麼?

透過 IronPDF(一個強大的 PDF SDK 基礎,用於 PDF 處理),開發人員可以快速建立、讀取和編輯 PDF 文件。 IronPDF 庫使用 Chrome 引擎將 HTML 轉換為 PDF。 該程式庫支援的幾種 Web 元件包括 MAUI、Xamarin、Blazor、Unity、HoloLens 應用程式、Windows Forms、HTML、ASPX、Razor HTML、.NET Core、ASP.NET 和 WPF。 Microsoft.NET 和 .NET Core 程式設計既可用於傳統的 Windows 應用程序,也可用於 ASP.NET Web 應用程式。

IronPDF 使用 HTML5、JavaScript、CSS 和圖像,讓您能夠建立具有標題和頁腳的精美 PDF。 API 庫包含一個強大的 HTML 到 PDF 轉換器,可以處理 PDF 文件,以及一個獨立於任何外部來源的 PDF 轉換工具和引擎。

要了解有關 IronPDF 的更多信息,請參閱HTML 轉 PDF 轉換教學頁面

4.0 使用 IronPDF 匯出 ChatGPT API 結果

在"MauiProgram.cs"檔案中加入以下程式碼:

builder.Services.AddChatGpt(options =>
{
    options.UseOpenAI("API key here"); // Replace with your actual OpenAI API key
    options.DefaultModel = OpenAIChatGptModels.Gpt35Turbo; // Set the default model
    options.MessageLimit = 10; // Limit number of messages per session
    options.MessageExpiration = TimeSpan.FromMinutes(5); // Set message expiration time
});
builder.Services.AddChatGpt(options =>
{
    options.UseOpenAI("API key here"); // Replace with your actual OpenAI API key
    options.DefaultModel = OpenAIChatGptModels.Gpt35Turbo; // Set the default model
    options.MessageLimit = 10; // Limit number of messages per session
    options.MessageExpiration = TimeSpan.FromMinutes(5); // Set message expiration time
});
builder.Services.AddChatGpt(Sub(options)
	options.UseOpenAI("API key here") ' Replace with your actual OpenAI API key
	options.DefaultModel = OpenAIChatGptModels.Gpt35Turbo ' Set the default model
	options.MessageLimit = 10 ' Limit number of messages per session
	options.MessageExpiration = TimeSpan.FromMinutes(5) ' Set message expiration time
End Sub)
$vbLabelText   $csharpLabel

這段程式碼片段註冊了一個 ChatGPT API 服務,然後應用程式中的其他類別或頁面就可以使用該服務。

在應用程式主頁的頁面載入方法中新增以下程式碼。 這有助於取得 ChatGPT 服務實例並將其儲存到本機物件中。

_chatGptClient = Handler.MauiContext.Services.GetService<IChatGptClient>();
_chatGptClient = Handler.MauiContext.Services.GetService<IChatGptClient>();
_chatGptClient = Handler.MauiContext.Services.GetService(Of IChatGptClient)()
$vbLabelText   $csharpLabel

此程式碼從服務提供者檢索 ChatGPT 用戶端實例,允許主頁與 ChatGPT API 進行互動。

接下來,建立一個類似於以下 XAML 程式碼中所示的使用者介面:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ChatGPT_MauiApp.MainPage"
             BackgroundColor="black">
    <StackLayout>
        <StackLayout Orientation="Horizontal" Spacing="25" Padding="30,0">
            <ScrollView WidthRequest="700" HeightRequest="200" x:Name="scrollView">
                <TableView Intent="Data" WidthRequest="700" x:Name="Table_View" BackgroundColor="DarkSlateGrey">
                    <TableRoot>
                        <!-- TableSection can be populated with dynamic data -->
                    </TableRoot>
                </TableView>
            </ScrollView>
        </StackLayout>
        <StackLayout Padding="30,0">
            <Editor
                x:Name="Userquest"
                Text=""
                HorizontalOptions="Start"
                FontSize="12"
                Placeholder=" Enter your Queries"
                HeightRequest="25" WidthRequest="700" />
        </StackLayout>
        <StackLayout Padding="30,10,10,0">
            <FlexLayout>
                <Button
                    x:Name="Sendquery"
                    Text="Send Query"
                    SemanticProperties.Hint="Click to send query to BOT"
                    Clicked="SendqueryClicked"
                    HorizontalOptions="Center" 
                    BackgroundColor="Green"
                    TextColor="WhiteSmoke" />
                <Button
                    x:Name="Export"
                    Text="Export"
                    SemanticProperties.Hint="Click to export data"
                    Clicked="OnExportClicked"
                    HorizontalOptions="Center" 
                    BackgroundColor="DodgerBlue"
                    TextColor="WhiteSmoke" />
            </FlexLayout>
        </StackLayout>
    </StackLayout>
</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ChatGPT_MauiApp.MainPage"
             BackgroundColor="black">
    <StackLayout>
        <StackLayout Orientation="Horizontal" Spacing="25" Padding="30,0">
            <ScrollView WidthRequest="700" HeightRequest="200" x:Name="scrollView">
                <TableView Intent="Data" WidthRequest="700" x:Name="Table_View" BackgroundColor="DarkSlateGrey">
                    <TableRoot>
                        <!-- TableSection can be populated with dynamic data -->
                    </TableRoot>
                </TableView>
            </ScrollView>
        </StackLayout>
        <StackLayout Padding="30,0">
            <Editor
                x:Name="Userquest"
                Text=""
                HorizontalOptions="Start"
                FontSize="12"
                Placeholder=" Enter your Queries"
                HeightRequest="25" WidthRequest="700" />
        </StackLayout>
        <StackLayout Padding="30,10,10,0">
            <FlexLayout>
                <Button
                    x:Name="Sendquery"
                    Text="Send Query"
                    SemanticProperties.Hint="Click to send query to BOT"
                    Clicked="SendqueryClicked"
                    HorizontalOptions="Center" 
                    BackgroundColor="Green"
                    TextColor="WhiteSmoke" />
                <Button
                    x:Name="Export"
                    Text="Export"
                    SemanticProperties.Hint="Click to export data"
                    Clicked="OnExportClicked"
                    HorizontalOptions="Center" 
                    BackgroundColor="DodgerBlue"
                    TextColor="WhiteSmoke" />
            </FlexLayout>
        </StackLayout>
    </StackLayout>
</ContentPage>
XML

上面的ContentPage定義了應用程式的 UI 佈局。 使用者可以輸入查詢,透過"發送查詢"按鈕與 ChatGPT API 進行交互,並使用"匯出"按鈕將結果匯出為 PDF。 結果顯示在TableView中。

接下來是處理按鈕點擊事件和匯出資料的程式碼邏輯:

private void OnExportClicked(object sender, EventArgs e)
{
    StringBuilder db = new();

    foreach (var tableSection in Table_View.Root.ToList())
    {
        foreach (var cell in tableSection)
        {
            if (cell is TextCell textCell)
            {
                db.Append("<p style='color:red;text-align:left;'>" + textCell.Text + "</p>");
                db.Append("<p style='color:black;text-align:justify;'>" + textCell.Detail + "</p>");
            }
        }
    }

    // Create and save the PDF
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(db.ToString());
    pdf.SaveAs("F:\\Download\\Demo.pdf");
}

private async void SendqueryClicked(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(Userquest.Text))
    {
        var query = Userquest.Text;
        Userquest.Text = "";
        var tableSection = AddQueryToTable(query);
        ChatGptResponse response = await _chatGptClient.AskAsync(_sessionGuid, query);
        var resp = response.GetMessage();
        AddResponseToTable(tableSection, resp);
    }
}

private TableSection AddQueryToTable(string query)
{
    var textCell = new TextCell
    {
        Text = query,
        TextColor = Colors.Red,
        DetailColor = Colors.WhiteSmoke,
        Detail = ""
    };

    var tableSection = new TableSection { textCell };
    Table_View.Root.Add(tableSection);
    return tableSection;
}

private void AddResponseToTable(TableSection section, string response)
{
    if (section.FirstOrDefault() is TextCell textCell)
    {
        textCell.Detail = response;
    }
}
private void OnExportClicked(object sender, EventArgs e)
{
    StringBuilder db = new();

    foreach (var tableSection in Table_View.Root.ToList())
    {
        foreach (var cell in tableSection)
        {
            if (cell is TextCell textCell)
            {
                db.Append("<p style='color:red;text-align:left;'>" + textCell.Text + "</p>");
                db.Append("<p style='color:black;text-align:justify;'>" + textCell.Detail + "</p>");
            }
        }
    }

    // Create and save the PDF
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(db.ToString());
    pdf.SaveAs("F:\\Download\\Demo.pdf");
}

private async void SendqueryClicked(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(Userquest.Text))
    {
        var query = Userquest.Text;
        Userquest.Text = "";
        var tableSection = AddQueryToTable(query);
        ChatGptResponse response = await _chatGptClient.AskAsync(_sessionGuid, query);
        var resp = response.GetMessage();
        AddResponseToTable(tableSection, resp);
    }
}

private TableSection AddQueryToTable(string query)
{
    var textCell = new TextCell
    {
        Text = query,
        TextColor = Colors.Red,
        DetailColor = Colors.WhiteSmoke,
        Detail = ""
    };

    var tableSection = new TableSection { textCell };
    Table_View.Root.Add(tableSection);
    return tableSection;
}

private void AddResponseToTable(TableSection section, string response)
{
    if (section.FirstOrDefault() is TextCell textCell)
    {
        textCell.Detail = response;
    }
}
Private Sub OnExportClicked(ByVal sender As Object, ByVal e As EventArgs)
	Dim db As New StringBuilder()

	For Each tableSection In Table_View.Root.ToList()
		For Each cell In tableSection
			Dim tempVar As Boolean = TypeOf cell Is TextCell
			Dim textCell As TextCell = If(tempVar, CType(cell, TextCell), Nothing)
			If tempVar Then
				db.Append("<p style='color:red;text-align:left;'>" & textCell.Text & "</p>")
				db.Append("<p style='color:black;text-align:justify;'>" & textCell.Detail & "</p>")
			End If
		Next cell
	Next tableSection

	' Create and save the PDF
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf(db.ToString())
	pdf.SaveAs("F:\Download\Demo.pdf")
End Sub

Private Async Sub SendqueryClicked(ByVal sender As Object, ByVal e As EventArgs)
	If Not String.IsNullOrEmpty(Userquest.Text) Then
		Dim query = Userquest.Text
		Userquest.Text = ""
		Dim tableSection = AddQueryToTable(query)
		Dim response As ChatGptResponse = Await _chatGptClient.AskAsync(_sessionGuid, query)
		Dim resp = response.GetMessage()
		AddResponseToTable(tableSection, resp)
	End If
End Sub

Private Function AddQueryToTable(ByVal query As String) As TableSection
	Dim textCell As New TextCell With {
		.Text = query,
		.TextColor = Colors.Red,
		.DetailColor = Colors.WhiteSmoke,
		.Detail = ""
	}

	Dim tableSection As New TableSection From {textCell}
	Table_View.Root.Add(tableSection)
	Return tableSection
End Function

Private Sub AddResponseToTable(ByVal section As TableSection, ByVal response As String)
	Dim tempVar As Boolean = TypeOf section.FirstOrDefault() Is TextCell
	Dim textCell As TextCell = If(tempVar, CType(section.FirstOrDefault(), TextCell), Nothing)
	If tempVar Then
		textCell.Detail = response
	End If
End Sub
$vbLabelText   $csharpLabel

解釋:

  • OnExportClicked方法使用 IronPDF 從 UI 收集的 HTML 內容建立 PDF。 產生的PDF檔案將儲存到指定位置。

  • SendqueryClicked方法接收使用者的查詢,使用_chatGptClient將其傳送到 OpenAI API,並顯示回應。 它還將查詢和回應添加到TableView中。

  • 輔助方法AddQueryToTableAddResponseToTable有助於使用使用者查詢和聊天機器人回應更新 UI 元件。

添加上述程式碼後,請嘗試運行您的解決方案。 輸入查詢語句,然後點選"傳送查詢"按鈕以取得結果。 它會將使用者的查詢傳送到 ChatGPT API,檢索結果,並將訊息顯示在螢幕上。

如何在 IronPDF 中使用 ChatGPT(面向 C# 開發人員),圖 7:在應用程式中新增文字查詢 在應用程式中新增文字查詢

點擊"匯出"按鈕,將結果匯出為PDF文件。

如何在 IronPDF 中使用 ChatGPT(面向 C# 開發人員),圖 8:匯出的 PDF 文件 匯出的PDF文件

現在,我們已經能夠使用 ChatGPT 建立聊天機器人,並使用 MAUI 應用程式上的 IronPDF 匯出聊天記錄。利用上述方法,我們可以從 ChatGPT API 中提取圖像、音頻和視頻,從而獲得更精確的結果。

5.0 結論

本文旨在開發一個基於 MAUI 的應用程序,該應用程式利用 OpenAI ChatGPT API 接收訊息、根據使用者查詢提供結果,並將結果匯出為 PDF 檔案。為了提高建議的質量,您可以嘗試修改問題。 為了查看各種模型是否能產生更好的結果,您也可以嘗試修改"MauiProgram.cs"中AddChatGpt方法內的ChatGptModels枚舉值。

ChatGPT API 是一款功能強大的 AI 程序,它可以根據用戶查詢提供結果。 ChatGPT API 的費用是根據發送的請求數量計算的。 IronPDF 用於發出 API 請求並將結果匯出為 PDF 以供將來使用,避免重複查詢相同的 API 請求。

使用 IronPDF,我們只需幾行程式碼即可建立 PDF 檔案。 本應用程式適合初學者使用,只需掌握基本知識即可。 其他任何軟體包均不以任何方式依賴 IronPDF。 例如,它是一個打包在單一軟體包中的庫。 IronPDF 開發人員可以根據自身需求選擇各種許可證。 此外,還提供免費試用。 有關 IronPDF 的完整定價和許可信息,請參閱IronPDF 許可頁面

常見問題解答

如何將 ChatGPT 整合到 .NET MAUI 應用程式中?

要將 ChatGPT 與 .NET MAUI 應用程式整合,首先要建立 OpenAI 帳戶,並取得 API 金鑰。然後透過 NuGet 在專案中安裝 OpenAI 套件,並在應用程式中設定 API 以處理使用者查詢。

如何在 MAUI 應用程式中將 API 結果轉換為 PDF?

您可以使用 IronPDF 在 MAUI 應用程式中將 API 結果轉換為 PDF。從 ChatGPT API 擷取回應後,使用 IronPDF 的方法將 HTML 內容渲染為 PDF。

建立一個由 ChatGPT 驅動的 MAUI 應用程式需要哪些步驟?

要建立一個由 ChatGPT 驅動的 MAUI 應用程式,請在 Visual Studio 中建立一個新的 .NET MAUI 專案,安裝 OpenAI 和 IronPDF 套件,在程式碼中設定 API 設定,並撰寫處理查詢和輸出至 PDF 的邏輯。

IronPDF 能否在創建 PDF 時處理 HTML、JavaScript 和 CSS 內容?

是的,IronPDF 可以在創建 PDF 時處理 HTML、JavaScript 和 CSS 內容。它使用 Chrome 渲染引擎將 HTML 內容轉換為 PDF 文件。

是否可以在我的應用程式中自訂 ChatGPT API 設定?

是的,您可以在您的應用程式中自訂 ChatGPT API 設定,方法是在 MauiProgram.cs 檔案中調整模型類型、訊息限制和到期時間等參數。

在 MAUI 應用程式中使用 IronPdf 有什麼好處?

IronPDF 提供了一個強大的 SDK,用於建立、閱讀和編輯 PDF。它能將 HTML 內容轉換為 PDF,支援文字萃取,並提供各種功能以增強 MAUI 應用程式中的 PDF 處理能力。

IronPDF 是否提供免費試用?

是的,IronPDF 提供免費試用版,讓開發人員在承諾使用授權計劃之前,可以探索其特色與功能。

如何在 MAUI 中為 ChatGPT PDF 專案安裝必要的套件?

使用 Visual Studio 中的 NuGet Package Manager Console 安裝 OpenAI 和 IronPDF 套件。執行 Install-Package OpenAIInstall-Package IronPDF 以將它們新增至您的專案。

IronPDF 在處理 PDF 文件時扮演什麼角色?

IronPDF 用於建立、編輯和轉換 PDF 文件。它允許開發人員將網頁內容轉換為 PDF、執行文字搜尋以及擷取影像,因此非常適合需要 PDF 功能的應用程式。

IronPDF 是否與 .NET 10 完全相容?

是的,IronPDF 與 .NET 10 完全相容。它支援所有主要的 .NET 版本,包括 .NET10、9、8、7、6、Core 和 .NET Framework,並能在 .NET 10 專案中開箱即用,無需特殊設定。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。