使用 IRONPDF

如何在 .NET MAUI 中查看 PDF(逐步教程)

Kannaopat Udonpant
坎納帕特·烏頓潘
2023年1月30日
已更新 2024年2月25日
分享:

.NET MAUI 是 .NET 的下一代技術,讓開發人員能夠使用單一代碼庫構建跨平台的桌面、Web 和移動應用程式,包括 Xamarin.Forms。 使用.NET MAUI,您可以撰寫一次應用程式並將其部署到多個平台,包括 Windows、macOS、iOS、Android 和 tvOS,使用相同的專案名稱。 .NET MAUI 也使您能在各平台上利用最新的 UI 功能,例如 macOS 的深色模式和觸控支援,或 Windows 10 的語音識別。

本文將說明如何在 .NET MAUI 應用程式中使用 IronPDF 來創建具有許多優點的 PDF 文件。


IronPDF:C# PDF 庫

IronPDF是一個.NET庫,使您可以生成和編輯PDF文件。 它非常適合用於 .NET MAUI 應用程式,因為它提供了一系列廣泛的功能,可以根據您的具體需求進行自定義。 IronPDF 的易於使用的 API,使您可以輕鬆地將 PDF 功能整合到您的 .NET MAUI 專案中。

先決條件

在使用IronPDF於.NET MAUI中創建PDF和PDF Viewer之前,有一些先決條件:

  1. Visual Studio 的最新版本

  2. .NET Framework 6 或 7

  3. 在 Visual Studio 中安裝的 MAUI 套件

  4. 在 Visual Studio 中運行的 .NET MAUI 應用程式

步驟 1:安裝 IronPDF

在 Visual Studio 中使用 NuGet 封裝管理員主控台是將 IronPDF 安裝到新項目的最佳方式之一。 使用此方法安裝IronPDF有一些優點。

  • 很容易做到,而且
  • 您可以確保使用的是最新版本的IronPDF。

安裝 IronPDF 的步驟

首先,通過進入工具 > NuGet 套件管理員 > 套件管理員主控台打開套件管理員主控台。

如何在 .NET MAUI 中查看 PDF(逐步)教程,圖 1:套件管理器控制台

套件管理器主控台

接下來,輸入以下指令:

Install-Package IronPdf

這將安裝套件及其所有依賴項,如 assets 資料夾。

如何在 .NET MAUI 中查看 PDF (逐步) 教程,圖 2: IronPDF 安裝

IronPDF 安裝

您現在可以在您的 MAUI 專案中開始使用 IronPDF。

步驟 2:在 .NET MAUI 中設置前端設計

首先,為 IronPDF 的三個功能創建一個佈局。

URL 到 PDF 佈局

針對 URL 轉 PDF 的版面配置,使用 .NET MAUI 標籤控制項創建標籤,並設置文本為「輸入 URL 以轉換 PDF」。 之後,應用水平堆疊佈局,以水平排列 Entry 控件和按鈕。 然後在控制項後面畫一條線,以劃分下一部分的控制項。

<Label
    Text="Enter URL to Convert PDF"
    SemanticProperties.HeadingLevel="Level1"
    FontSize="18"
    HorizontalOptions="Center" 
/>
<HorizontalStackLayout
    HorizontalOptions="Center">
    <Border Stroke="White"
            StrokeThickness="2"
            StrokeShape="RoundRectangle 5,5,5,5"
            HorizontalOptions="Center">
        <Entry
            x:Name="URL"
            HeightRequest="50"
            WidthRequest="300" 
            HorizontalOptions="Center"
        />
    </Border>

    <Button
        x:Name="urlPDF"
        Text="Convert URL to PDF"
        Margin="30,0,0,0"
        Clicked="UrlToPdf"
        HorizontalOptions="Center" />
</HorizontalStackLayout>

<Line Stroke="White" X2="1500" />
XML

HTML 至 PDF 佈局

為 HTML 轉 PDF 部分的版面配置創建一個編輯器控件和一個按鈕。 編輯器控制項將用於接受使用者輸入的一串 HTML 內容。 另外,添加一條線作為分隔符。

<Label
    Text="Enter HTML to Convert to PDF"
    SemanticProperties.HeadingLevel="Level2"
    FontSize="18"
    HorizontalOptions="Center" />
<Border 
    Stroke="White"
    StrokeThickness="2"
    StrokeShape="RoundRectangle 5,5,5,5"
    HorizontalOptions="Center">

    <Editor
        x:Name="HTML"
        HeightRequest="200"
        WidthRequest="300" 
        HorizontalOptions="Center"
    />

</Border>

<Button
    x:Name="htmlPDF"
    Text="Convert HTML to PDF"
    Clicked="HtmlToPdf"
    HorizontalOptions="Center" />

<Line Stroke="White" X2="1500" />
XML

HTML檔案轉PDF佈局

將 HTML 文件轉換為 PDF,只需添加一個按鈕。 該按鈕將幫助您使用IronPDF將HTML文件轉換為PDF文檔。

<Label
    Text="Convert HTML file to PDF"
    SemanticProperties.HeadingLevel="Level2"
    FontSize="18"
    HorizontalOptions="Center" />

<Button
    x:Name="htmlFilePDF"
    Text="Convert HTML file to PDF"
    Clicked="FileToPdf"
    HorizontalOptions="Center" />
XML

完整的 UI 代碼

以下提供了.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="PDF_Viewer.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">
            <Label
                Text="Enter URL to Convert PDF"
                SemanticProperties.HeadingLevel="Level1"
                FontSize="18"
                HorizontalOptions="Center" 
            />
            <HorizontalStackLayout
                HorizontalOptions="Center">
                <Border Stroke="White"
                        StrokeThickness="2"
                        StrokeShape="RoundRectangle 5,5,5,5"
                        HorizontalOptions="Center">
                    <Entry
                        x:Name="URL"
                        HeightRequest="50"
                        WidthRequest="300" 
                        HorizontalOptions="Center"
                    />
                </Border>

                <Button
                    x:Name="urlPDF"
                    Text="Convert URL to PDF"
                    Margin="30,0,0,0"
                    Clicked="UrlToPdf"
                    HorizontalOptions="Center" />
            </HorizontalStackLayout>

            <Line Stroke="White" X2="1500" />

            <Label
                Text="Enter HTML to Convert to PDF"
                SemanticProperties.HeadingLevel="Level2"
                FontSize="18"
                HorizontalOptions="Center" />
            <Border 
                Stroke="White"
                StrokeThickness="2"
                StrokeShape="RoundRectangle 5,5,5,5"
                HorizontalOptions="Center">

                <Editor
                    x:Name="HTML"
                    HeightRequest="200"
                    WidthRequest="300" 
                    HorizontalOptions="Center"
                />

            </Border>

            <Button
                x:Name="htmlPDF"
                Text="Convert HTML to PDF"
                Clicked="HtmlToPdf"
                HorizontalOptions="Center" />

            <Line Stroke="White" X2="1500" />

            <Label
                Text="Convert HTML file to PDF"
                SemanticProperties.HeadingLevel="Level2"
                FontSize="18"
                HorizontalOptions="Center" />

            <Button
                x:Name="htmlFilePDF"
                Text="Convert HTML file to PDF"
                Clicked="FileToPdf"
                HorizontalOptions="Center" />
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>
XML

步驟 3:編寫程式碼以儲存和查看 PDF 檔案

.NET MAUI 沒有任何預建功能可以在本地存儲中保存文件。 因此,有必要親自撰寫程式碼。 為創建保存和查看功能,建立了一個名為 SaveService 的部分類,其中具有一個名為 SaveAndView 的部分 void 函數,帶有三個參數:檔案名稱、檔案內容類型和內存流以寫入檔案。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDF_Viewer
{
    public partial class SaveService
    {
        public partial void SaveAndView(string filename, string contentType, MemoryStream stream);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDF_Viewer
{
    public partial class SaveService
    {
        public partial void SaveAndView(string filename, string contentType, MemoryStream stream);
    }
}

需要為每個打算支援的平台(例如 Android、macOS 和/或 Windows)實施儲存和查看功能。 在 Windows 平台上,創建一個名為 "SaveWindows.cs" 的文件並實現部分方法 SaveAndView

using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Popups;

namespace PDF_Viewer
{
    public partial class SaveService
    {
        public async partial void SaveAndView(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 FileSavePicker();
                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 PDF_Viewer
{
    public partial class SaveService
    {
        public async partial void SaveAndView(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 FileSavePicker();
                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);
                }
            }
        }
    }
}

針對 Android 和 macOS,需要創建具有可比較SaveAndView實現的單獨文件。 您可以從這個MAUI PDF Viewer GitHub Repo獲取一個可用的示例。

步驟 4:PDF 功能的程式碼

現在,是時候編寫 PDF 功能的程式碼了。 讓我們從 URL 轉換為 PDF 功能開始。

URL到PDF功能

為 URL 轉換為 PDF 功能創建一個UrlToPdf函數。 在函數內,實例化ChromePdfRenderer物件,並使用RenderUrlAsPdf函數將URL轉換為PDF文件。 RenderUrlAsPdf 函數從網路伺服器獲取 URL 的數據,並處理以將其轉換為 PDF 文檔。 在參數中,傳遞 URL 輸入控制項中的文本,創建 SaveService 類的對象並使用 SaveAndView 函數。 在 SaveAndView 函數的參數中,傳入生成的 PDF 文件的流。

SaveAndView 函數幫助將檔案儲存在任何自訂路徑,並提供檢視 PDF 檔案的選項。 最後,顯示一個警示框,提供有關創建 PDF 文件的信息。如果用戶嘗試用空白輸入控制創建 PDF 文件,將顯示帶有錯誤訊息和警告的警示框。

private void UrlToPdf(object sender, EventArgs e)
{
    if (URL.Text != null)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(URL.Text.Trim());
        SaveService saveService = new SaveService();
        saveService.SaveAndView("URLtoPDF.pdf", "application/pdf", pdf.Stream);
        DisplayAlert("Success", "PDF from URL Created!", "OK");
    }
    else
    {
        DisplayAlert("Error", "Field can't be empty! \nPlease enter URL!", "OK");
    }

}
private void UrlToPdf(object sender, EventArgs e)
{
    if (URL.Text != null)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(URL.Text.Trim());
        SaveService saveService = new SaveService();
        saveService.SaveAndView("URLtoPDF.pdf", "application/pdf", pdf.Stream);
        DisplayAlert("Success", "PDF from URL Created!", "OK");
    }
    else
    {
        DisplayAlert("Error", "Field can't be empty! \nPlease enter URL!", "OK");
    }

}

HTML 轉 PDF 功能

要實現將 HTML 轉換為 PDF 的功能,請建立HtmlToPdf函數,並使用RenderHtmlAsPdf函數。 使用編輯器控制項的文本並將其傳遞到RenderHtmlAsPdf函數的參數中。 類似於上述功能,使用SaveAndView函數可以在儲存後檢視 PDF 檔案。

private void HtmlToPdf(object sender, EventArgs e)
{
    if (HTML.Text != null)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HTML.Text);
        SaveService saveService = new SaveService();
        saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", pdf.Stream);
        DisplayAlert("Success", "PDF from HTML Created!", "OK");
    }
    else
    {
        DisplayAlert("Error", "Field can't be empty! \nPlease enter valid HTML!", "OK");
    }
}
private void HtmlToPdf(object sender, EventArgs e)
{
    if (HTML.Text != null)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HTML.Text);
        SaveService saveService = new SaveService();
        saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", pdf.Stream);
        DisplayAlert("Success", "PDF from HTML Created!", "OK");
    }
    else
    {
        DisplayAlert("Error", "Field can't be empty! \nPlease enter valid HTML!", "OK");
    }
}

HTML 文件轉 PDF 功能

創建FileToPdf函式以將HTML檔案轉換為PDF檔案,請使用RenderHtmlFileAsPdf函式,並將HTML檔案路徑作為參數傳遞。 它將所有 HTML 內容轉換為 PDF 並保存輸出文件。

private void FileToPdf(object sender, EventArgs e)
{
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdf = renderer.RenderHtmlFileAsPdf(@"C:\Users\Administrator\Desktop\index.html");
    SaveService saveService = new SaveService();
    saveService.SaveAndView("HTML File to PDF.pdf", "application/pdf", pdf.Stream);
    DisplayAlert("Success", "PDF from File Created!", "OK");
}
private void FileToPdf(object sender, EventArgs e)
{
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdf = renderer.RenderHtmlFileAsPdf(@"C:\Users\Administrator\Desktop\index.html");
    SaveService saveService = new SaveService();
    saveService.SaveAndView("HTML File to PDF.pdf", "application/pdf", pdf.Stream);
    DisplayAlert("Success", "PDF from File Created!", "OK");
}

輸出

執行專案後,輸出將如下所示。

如何在 .NET MAUI 中查看 PDF(逐步)教程,圖 3:輸出

輸出

將 Microsoft 網站的 URL 放在此區域並點擊按鈕。

如何在 .NET MAUI 中查看 PDF(步驟指南),圖 4:PDF 的 URL

URL 轉換為 PDF

在創建 PDF 文件後,會顯示一個對話框以在自定位置保存文件。

如何在 .NET MAUI 中查看 PDF(逐步)教學,第 5 圖:保存檔案

儲存檔案

儲存檔案後,此彈出視窗顯示並提供選擇 PDF 檢視器以查看 PDF 檔案的選項。

如何在 .NET MAUI 中查看 PDF(逐步)教程,圖 6:PDF 查看器彈出窗口

PDF 檢視器彈出窗口

IronPDF 出色地將 URL 轉換為 PDF。 它保留所有顏色和圖像的原始形狀和格式。

如何在.NET MAUI中查看PDF(逐步)教程,圖7:PDF查看器彈窗

PDF 檢視器彈出窗口

同樣的程序需要應用於所有其他功能。 請查看這篇IronPDF 在 Blazor 上的博客文章,以了解有關 IronPDF 在 Blazor 中運作的更多信息。

了解如何將 MAUI 頁面作為 XAML 轉換為 PDF 文件,請訪問「如何在 MAUI 中將 XAML 轉換為 PDF」。

摘要

本教程在 .NET MAUI 應用程式中使用 IronPDF 來創建 PDF 檔案和 PDF 檢視器。 .NET MAUI 是一個非常好的工具,可以用單一的代碼基礎來創建多平台應用程式。 IronPDF可在任何.NET應用程式中輕鬆創建和自訂PDF文件。 IronPDF 與 .NET MAUI 平台完全相容。

IronPDF 在開發中是免費的。 您可以獲取一個免費試用金鑰來在生產環境中測試IronPDF。 欲了解更多有關 IronPDF 及其功能的信息,請造訪 IronPDF 官方網站

Kannaopat Udonpant
坎納帕特·烏頓潘
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat 也成為了車輛機器人實驗室的成員,該實驗室隸屬於生物生產工程學系。2022 年,他利用自己的 C# 技能,加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。Kannapat 珍視這份工作,因為他可以直接向負責撰寫大部分 IronPDF 程式碼的開發人員學習。除了同儕學習外,Kannapat 還享受在 Iron Software 工作的社交方面。當他不在撰寫程式碼或文件時,Kannapat 通常會在 PS5 上玩遊戲或重看《最後生還者》。
< 上一頁
在 C# 中將 PPT (PowerPoint) 轉換為 PDF(示例教程)
下一個 >
使用 IronPDF 的 C# 中 PDFium 替代方案