在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
.NET 多平台应用程序用户界面(.NET MAUI).NET Framework 是一个跨平台框架,用于使用 C# 和 XAML 创建本地移动和桌面应用程序。 您可以使用 .NET MAUI 在 Android、iOS、MacOS 和 Windows 上使用单一代码库进行操作。 .NET MAUI 是开源的,是对 Xamarin Forms 的改进。 为了提高性能和可扩展性,用户界面控件已从头开始重新编写。 此外,它还从移动平台扩展到桌面使用案例。 如果您曾经使用过 Xamarin Forms 来创建跨平台用户界面,那么您会发现 .NET MAUI 框架与其有很多共同之处。
但是,也存在一些差异。 您可以使用单个项目使用 .NET MAUI Framework 构建多平台应用程序,但如果需要,您可以添加特定平台的代码和资源。 .NET MAUI 的主要目标之一是让您在一个代码库中编写尽可能多的应用程序逻辑和用户界面布局。 .NET MAUI 将适用于所有平台,并支持现有的 MVVM 和 XAML 模式。
.NET MAUI 允许开发人员在移动开发和 Windows 平台等各种平台上工作。
IronPdf 是一款功能强大的 PDF 转换器,几乎可以处理浏览器可以处理的任何任务。 开发人员使用 .NET 库可以轻松创建、阅读和处理 PDF 文件。 IronPdf 使用 Google Chrome 引擎将 HTML 转换为 PDF 文件。 在其他网络技术中,IronPDF 支持 HTML、ASPX.NET、ASPX.NET、ASPX.NET、ASPX.NET、ASPX.NET、ASPX.NET 和 ASPX.NET、使用 IronPDF 将 Razor 页面转换为 PDF例如:.NET、Java 和 MVC 视图。 IronPDF 支持 Microsoft .NET 应用程序(ASP.NET 网络应用程序和传统 Windows 应用程序). IronPDF 还可用于制作有吸引力的 PDF 文档。
IronPDF可以使用 JavaScript 和 CSS 从 HTML 文件创建 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 App 生成 PDF 文档并将其保存到合适的位置。
在Visual Studio中创建一个新项目
在相应文本框中输入项目名称并选择文件路径。 然后,点击创建按钮,如下图所示。
配置项目
Visual Studio 项目现在将按照 .NET MAUI App 平台为所选应用程序生成结构。 现在,它将打开 MainPage.cs
文件以添加代码并构建/运行应用程序。
在 MainPage.cs 文件中添加代码
接下来,安装库以测试代码。
IronPDF 库可以通过四种方式下载和安装。
它们是
Visual Studio 软件提供了 NuGet 软件包管理器选项,可直接将软件包安装到解决方案中。 下面的截图显示了如何打开 NuGet 包管理器。
导航至 NuGet 软件包管理器用户界面
这提供了显示 NuGet 网站软件包列表的搜索框。在 NuGet 软件包管理器中,搜索关键字 "IronPDF",如下截图所示。
从 NuGet 软件包管理器用户界面 IronPdf 软件包
上图中列出了相关搜索项,选择第一个选项即可将软件包安装到解决方案中。 它将安装在所有 .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 "方法会生成一个新的 PDF 文档,其中包含文本 "Hello, IronPDF!......",并将其保存到用户计算机的指定位置。
在上述方法中,一个新的ChromePdfRenderer对象,并调用将Html渲染为Pdf方法生成一个新的 PDF 文档,其中包含 "Hello IronPDF! ...... "的 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
由于在用户设备上保存内容的实施细节因平台而异(视窗、安卓、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 库的广泛功能及其众多特性。