在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
.NET 多平台應用程式使用者介面(.NET MAUI)是一個跨平台框架,用於使用 C# 和 XAML 創建原生移動和桌面應用程式。 您可以使用 .NET MAUI 透過單一程式碼基礎在 Android、iOS、MacOS 和 Windows 上操作。 .NET MAUI 是開源的,是對 Xamarin Forms 的改進。 用於效能和擴展性的考量,UI 控件已經從頭開始重寫。 此外,它已從移動平台擴展至包含桌面使用案例。 如果您曾經使用 Xamarin Forms 創建跨平台使用者介面,那麼您會發現 .NET MAUI 框架與它有很多相似之處。
然而,存在一些差異。 您可以使用 .NET MAUI 框架透過一個專案建構多平台應用程式,但如果需要,您可以添加平台特定的程式碼和資源。 .NET MAUI 的主要目標之一是讓您儘可能多地在單一程式碼基礎中撰寫應用程式邏輯和 UI 佈局。 .NET MAUI 將適用於所有平台,並將支援現有的 MVVM 和 XAML 模式。
.NET MAUI 允許開發人員在各種平台上進行工作,例如移動開發和 Windows 平台。
IronPDF 是一款功能強大的 PDF 轉換器,能夠處理幾乎每個瀏覽器可以處理的任務。 該.NET開發庫讓創建、閱讀和處理PDF文件變得簡單。 IronPDF使用Google Chrome引擎將HTML轉換為PDF文件。 在其他網頁技術中,IronPDF 支援 HTML、ASPX,使用 IronPDF 將 Razor Pages 轉換為 PDF和 MVC 視圖。 IronPDF 支援 Microsoft .NET 應用程式(ASP.NET Web 應用程式和傳統 Windows 應用程式). IronPDF 也可以用來製作精美的 PDF 文件。
IronPDF 可以從 HTML 文件使用 JavaScript 和 CSS 創建 PDF 文件包含 JavaScript、CSS 和圖像文件。
不僅可以使用 IronPDF 將 HTML 文件轉換為 PDF, 但你也可以將圖像文件轉換為PDF.
IronPDF 可以幫助創建互動式 PDF 文件,使用 IronPDF 填寫並提交互動式表單, 合併和分割 PDF 文件, 從 PDF 中提取文字和圖片從 PDF 文件中提取文字、在 PDF 文件中搜尋文字、將 PDF 頁面光柵化為圖像、將 PDF 轉換為 HTML,並使用 IronPrint 列印 PDF 文件.
IronPDF 可以從 URL 生成文件。 HTML 後的登入使用 IronPDF 用於登入表單,還允許使用自訂網絡登入憑證、使用者代理、代理伺服器、cookie、HTTP標頭和表單變數。
IronPDF 是一個可以讀取和填寫 PDF 文件的庫,並能夠從文件中提取圖像。 它允許我們將頁首和頁尾添加到 PDF 文件中文字,照片,方便導航的書籤,浮水印,並將更多內容添加到文檔中。 它還允許我們在新文件或現有文件中加入和分割頁面。 IronPDF 能夠在不使用 Acrobat 檢視器的情況下將文件轉換為 PDF 物件。 也可以將 CSS 文件轉換為 PDF 文件,並且 CSS 媒體類型文件可以轉換為文檔。
ChromePdfRenderer.RenderHtmlAsPdf
生成 PDF 檔案的方法首先,使用 Visual Studio Code 和 Visual Studio 創建一個專案。 在使用 Visual Studio Code 時,有必要使用命令行工具來安裝專案類型模板。
打開 Microsoft Visual Studio 軟體並前往檔案選單。 選擇「新專案」,在新專案視窗中選擇「.NET MAUI 應用程式」。本文將使用 .NET MAUI 應用程式來生成 PDF 文件並將其保存到合適的位置。
在 Visual Studio 中創建一個新專案
在相應的文字框中輸入專案名稱並選擇文件路徑。 然後,按下圖中的 Create 按鈕。
配置專案
Visual Studio 專案現在將根據 .NET MAUI App 平台生成所選應用程式的結構。 現在將打開 MainPage.cs
文件以添加代碼並構建/運行應用程式。
將程式碼添加到 MainPage.cs 檔案中
接下來,安裝該程式庫以測試程式碼。
IronPDF 庫可以透過四種方式下載和安裝。
這些是:
Visual Studio 軟體提供 NuGet Package Manager 選項,讓使用者可以將套件直接安裝到解決方案中。 以下截圖顯示如何打開 NuGet Package Manager。
導航至 NuGet 套件管理員 UI
這提供了一個搜尋框,以顯示來自 NuGet 網站的套件列表。在 NuGet 套件管理器中,搜尋關鍵字「IronPDF」,如以下螢幕截圖所示。
IronPDF 套件來自 NuGet 套件管理器 UI
在上圖中,列出了相關的搜索項目,選擇第一個選項以將套件安裝到解決方案中。 它將安裝在所有 .NET MAUI 應用程式平台上,例如 Android、iOS 和 Windows 平台。
在 Visual Studio 中,前往 工具 > NuGet 套件管理員 > 套件管理員主控台
在封裝管理員主控台標籤中輸入以下行:
Install-Package IronPdf
現在,該套件將下載/安裝到當前專案的所有 .NET MAUI 平台,並準備使用。
在套件管理器主控台安裝套件
第三種方式是透過訪問他們的網站直接下載NuGet套件。IronPDF NuGet 存儲庫頁面
.
下載最新的 IronPDF ZIP 套件直接從他們的網站下載。下載完成後,按照以下步驟將套件添加到您的項目中。
單擊確定以添加參考。
您還需要添加對所有 .NET MAUI 支援平台的引用。
當專案建立時,將會自動生成一個名為 MainPage.xaml
的檔案。 這是放置 .NET MAUI 應用程式使用者介面的位置。
請參考以下程式碼。
<?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="MAUI_PDF.MainPage"
>
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Image
Source="dotnet_bot.png"
SemanticProperties.Description="Cute .NET bot waving hi to you!"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
Text="Welcome to IronPDF!"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center" />
<Button
x:Name="PdfBtn"
Text="Click me to generate PDF"
SemanticProperties.Hint="Click button to generate PDF"
Clicked="GeneratePDF"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
將以上代碼添加到 MainPage.xaml
文件後,打開 MainPage.xaml.cs
文件,並在 MainPage 類內包括以下方法:
private void GeneratePDF(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>");
//Saves the memory stream as file.
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream);
}
private void GeneratePDF(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>");
//Saves the memory stream as file.
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream);
}
Private Sub GeneratePDF(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer As New ChromePdfRenderer()
Dim doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>")
'Saves the memory stream as file.
Dim saveService As New SaveService()
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream)
End Sub
GeneratePDF
方法生成一個包含文字 "Hello, IronPDF" 的新 PDF 文件!...並將其保存到用戶計算機的指定位置。
在上述方法中,一個新的ChromePdfRenderer
物件已創建並調用RenderHtmlAsPdf
生成包含“Hello IronPDF”字樣的新 PDF 文件的方法! 從一串HTML標記中「……」。接下來,將把檔案儲存到使用者裝置的任務委託給一個獨立的類別,稱為SaveService。這個類別將在下一步中創建。
完整的 MainPage.xaml.cs
檔案如下所示。 請確認檔案內容與下列顯示的內容相符,然後再繼續下一步:
// Change the namespace as desired, but make sure that all source files use this same namespace,
// or there will be errors!
namespace MAUI_IronPDF;
// This namespace is required to make use of IronPDF functionality
using IronPdf;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void GeneratePDF(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>");
//Saves the memory stream as file.
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream);
}
}
// Change the namespace as desired, but make sure that all source files use this same namespace,
// or there will be errors!
namespace MAUI_IronPDF;
// This namespace is required to make use of IronPDF functionality
using IronPdf;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void GeneratePDF(object sender, EventArgs e)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>");
//Saves the memory stream as file.
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream);
}
}
Imports IronPdf
' Change the namespace as desired, but make sure that all source files use this same namespace,
' or there will be errors!
Namespace MAUI_IronPDF
' This namespace is required to make use of IronPDF functionality
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Sub GeneratePDF(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer As New ChromePdfRenderer()
Dim doc = renderer.RenderHtmlAsPdf("<h1>Hello IronPDF!</h1> <p>I'm using IronPDF MAUI!</p>")
'Saves the memory stream as file.
Dim saveService As New SaveService()
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", doc.Stream)
End Sub
End Class
End Namespace
現在,在專案的根目錄中創建一個新的類文件,命名為 SaveService.cs
,並添加以下原始碼:
// Change the namespace as desired, but make sure that all source files use this same namespace,
// or there will be errors!
namespace MAUI_IronPDF
{
// SaveService partial class declaration ... this allows a layer of abstraction
// as we implement the save file details specially for each platform on which this app will
// operate!
public partial class SaveService
{
public void SaveAndView(string filename, string contentType, MemoryStream stream)
{
SaveFile(filename, contentType, stream);
}
// Additional partial files will provide implementations for this method specifically.
partial void SaveFile(string filename, string contentType, MemoryStream stream);
}
}
// Change the namespace as desired, but make sure that all source files use this same namespace,
// or there will be errors!
namespace MAUI_IronPDF
{
// SaveService partial class declaration ... this allows a layer of abstraction
// as we implement the save file details specially for each platform on which this app will
// operate!
public partial class SaveService
{
public void SaveAndView(string filename, string contentType, MemoryStream stream)
{
SaveFile(filename, contentType, stream);
}
// Additional partial files will provide implementations for this method specifically.
partial void SaveFile(string filename, string contentType, MemoryStream stream);
}
}
' Change the namespace as desired, but make sure that all source files use this same namespace,
' or there will be errors!
Namespace MAUI_IronPDF
' SaveService partial class declaration ... this allows a layer of abstraction
' as we implement the save file details specially for each platform on which this app will
' operate!
Partial Public Class SaveService
Public Sub SaveAndView(ByVal filename As String, ByVal contentType As String, ByVal stream As MemoryStream)
SaveFile(filename, contentType, stream)
End Sub
' Additional partial files will provide implementations for this method specifically.
Partial Private Sub SaveFile(ByVal filename As String, ByVal contentType As String, ByVal stream As MemoryStream)
End Sub
End Class
End Namespace
由於每個平台在儲存內容到用戶設備上的實作細節各不相同(Windows、Android、MacOS 等)需要為應用程序將支援的每種類型的設備編寫特定於平台的程式碼。 為了實現這一點,我們將 SaveService
定義為部分類別。(為了抽象目的)包含一個名為 SaveAndView
的部分方法。 接下來,此方法的實現將在解決方案總管中位於Platforms文件夾內嵌的一個或多個文件夾內的單獨SaveService.cs
部分類中定義。(見下圖):
實現跨平台的資料夾結構
為了簡化,本教程將僅為 Windows 平台定義上述的部分文件。 在 Windows 平台資料夾下建立一個新的 SaveService.cs
文件,其中包含如下所示的程式碼:
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Popups;
namespace MAUI_IronPDF;
public partial class SaveService
{
async partial void SaveFile(string filename, string contentType, MemoryStream stream)
{
StorageFile stFile;
string extension = Path.GetExtension(filename);
//Gets process windows handle to open the dialog in application process.
IntPtr windowHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
if (!Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
//Creates file save picker to save a file.
FileSavePicker savePicker = new();
savePicker.DefaultFileExtension = ".pdf";
savePicker.SuggestedFileName = filename;
//Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", new List<string>() { ".pdf" });
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle);
stFile = await savePicker.PickSaveFileAsync();
}
else
{
StorageFolder local = ApplicationData.Current.LocalFolder;
stFile = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
}
if (stFile != null)
{
using (IRandomAccessStream zipStream = await stFile.OpenAsync(FileAccessMode.ReadWrite))
{
//Writes compressed data from memory to file.
using Stream outstream = zipStream.AsStreamForWrite();
outstream.SetLength(0);
//Saves the stream as file.
byte [] buffer = stream.ToArray();
outstream.Write(buffer, 0, buffer.Length);
outstream.Flush();
}
//Create message dialog box.
MessageDialog msgDialog = new("Do you want to view the document?", "File has been created successfully");
UICommand yesCmd = new("Yes");
msgDialog.Commands.Add(yesCmd);
UICommand noCmd = new("No");
msgDialog.Commands.Add(noCmd);
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle);
//Showing a dialog box.
IUICommand cmd = await msgDialog.ShowAsync();
if (cmd.Label == yesCmd.Label)
{
//Launch the saved file.
await Windows.System.Launcher.LaunchFileAsync(stFile);
}
}
}
}
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Popups;
namespace MAUI_IronPDF;
public partial class SaveService
{
async partial void SaveFile(string filename, string contentType, MemoryStream stream)
{
StorageFile stFile;
string extension = Path.GetExtension(filename);
//Gets process windows handle to open the dialog in application process.
IntPtr windowHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
if (!Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
//Creates file save picker to save a file.
FileSavePicker savePicker = new();
savePicker.DefaultFileExtension = ".pdf";
savePicker.SuggestedFileName = filename;
//Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", new List<string>() { ".pdf" });
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle);
stFile = await savePicker.PickSaveFileAsync();
}
else
{
StorageFolder local = ApplicationData.Current.LocalFolder;
stFile = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
}
if (stFile != null)
{
using (IRandomAccessStream zipStream = await stFile.OpenAsync(FileAccessMode.ReadWrite))
{
//Writes compressed data from memory to file.
using Stream outstream = zipStream.AsStreamForWrite();
outstream.SetLength(0);
//Saves the stream as file.
byte [] buffer = stream.ToArray();
outstream.Write(buffer, 0, buffer.Length);
outstream.Flush();
}
//Create message dialog box.
MessageDialog msgDialog = new("Do you want to view the document?", "File has been created successfully");
UICommand yesCmd = new("Yes");
msgDialog.Commands.Add(yesCmd);
UICommand noCmd = new("No");
msgDialog.Commands.Add(noCmd);
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle);
//Showing a dialog box.
IUICommand cmd = await msgDialog.ShowAsync();
if (cmd.Label == yesCmd.Label)
{
//Launch the saved file.
await Windows.System.Launcher.LaunchFileAsync(stFile);
}
}
}
}
Imports Windows.Storage
Imports Windows.Storage.Pickers
Imports Windows.Storage.Streams
Imports Windows.UI.Popups
Namespace MAUI_IronPDF
Partial Public Class SaveService
Private Async Sub SaveFile(ByVal filename As String, ByVal contentType As String, ByVal stream As MemoryStream)
Dim stFile As StorageFile
Dim extension As String = Path.GetExtension(filename)
'Gets process windows handle to open the dialog in application process.
Dim windowHandle As IntPtr = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
If Not Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons") Then
'Creates file save picker to save a file.
Dim savePicker As New FileSavePicker()
savePicker.DefaultFileExtension = ".pdf"
savePicker.SuggestedFileName = filename
'Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", New List(Of String)() From {".pdf"})
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle)
stFile = Await savePicker.PickSaveFileAsync()
Else
Dim local As StorageFolder = ApplicationData.Current.LocalFolder
stFile = Await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting)
End If
If stFile IsNot Nothing Then
Using zipStream As IRandomAccessStream = Await stFile.OpenAsync(FileAccessMode.ReadWrite)
'Writes compressed data from memory to file.
Using outstream As Stream = zipStream.AsStreamForWrite()
outstream.SetLength(0)
'Saves the stream as file.
Dim buffer() As Byte = stream.ToArray()
outstream.Write(buffer, 0, buffer.Length)
outstream.Flush()
End Using
End Using
'Create message dialog box.
Dim msgDialog As New MessageDialog("Do you want to view the document?", "File has been created successfully")
Dim yesCmd As New UICommand("Yes")
msgDialog.Commands.Add(yesCmd)
Dim noCmd As New UICommand("No")
msgDialog.Commands.Add(noCmd)
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle)
'Showing a dialog box.
Dim cmd As IUICommand = Await msgDialog.ShowAsync()
If cmd.Label = yesCmd.Label Then
'Launch the saved file.
Await Windows.System.Launcher.LaunchFileAsync(stFile)
End If
End If
End Sub
End Class
End Namespace
建立並運行 MAUI 應用程式。 將出現一個包含以下介面的窗口:
MAUI 應用程式的使用者介面
點擊“生成PDF”按鈕。 過幾分鐘後,會彈出一個窗口以選擇生成的 PDF 文件的儲存位置。
選擇檔案位置以儲存 PDF 文件
IronPDF 是最常用的 PDF 轉換庫之一,允許您生成、閱讀、編輯和格式化 PDF。 IronPDF 庫提供了許多優勢和功能,包括一個瀏覽器引擎,可以將指定的 URL 轉換為 PDF 文件,允許您將 CSS 添加到 HTML 字串並將其轉換為 PDF 文件,還允許您填寫 PDF 表單。 IronPDF 的所有功能都包含在一個庫中。
IronPDF 提供多種價格結構。 IronPDF 的基本價格從 $749 開始。 產品支援和更新也可透過支付一年的費用獲得。 免版稅再分發覆蓋也可以作為附加選項購買。
總而言之,IronPDF 被推薦是因為它為處理 PDF 的開發人員提供了出色的性能和大量的功能。 它支援通用平台,如 .NET MAUI。 它還提供優秀的幫助和文件,讓您能夠充分利用IronPDF庫及其眾多功能。