天天看點

開發高品質PDF應用的不二選擇:PdfiumViewer庫詳細解析

作者:小乖獸技術
開發高品質PDF應用的不二選擇:PdfiumViewer庫詳細解析

PdfiumViewer庫簡介

PdfiumViewer是一款基于谷歌開源PDF渲染引擎PDFium的.NET庫,主要用于在Windows應用程式中顯示和處理PDF文檔。PdfiumViewer提供了多種API和控件,使得開發者可以輕松地将PDF文檔嵌入到其應用程式中。同時,PdfiumViewer還支援多種平台,包括Windows、Linux以及MacOS。

PdfiumViewer庫使用場景

PdfiumViewer适用于各種需要在應用程式中顯示和處理PDF文檔的場景。比如,可以将PdfiumViewer用于制作PDF閱讀器、PDF編輯器、報告生成器等。

PdfiumViewer庫的架構設計群組件子產品

PdfiumViewer的架構設計主要包含以下幾個元件子產品:

  1. PDF Rendering:PDF Rendering是PdfiumViewer的核心子產品,主要用于解析和渲染PDF文檔。該子產品包含多個類,如PDFDocument、PDFPage、PDFRenderer等,用于描述PDF文檔的各個部分,并将它們渲染到螢幕上。
  2. Input Handling:Input Handling是PdfiumViewer的輸入處理子產品,負責處理使用者與PDF文檔的互動。該子產品包含多個類,如PDFMouseHandler、PDFKeyboardHandler等,用于響應滑鼠、鍵盤事件,實作PDF文檔的滾動、縮放等功能。
  3. User Interface:User Interface是PdfiumViewer的使用者界面子產品,負責實作PDF文檔的顯示和控制。該子產品包含多種UI控件,如PDFViewControl、PDFSearchControl、PDFBookmarkControl等,用于顯示PDF文檔内容并提供互動功能。

PdfiumViewer庫的優點和缺點

PdfiumViewer的優點包括:

  1. 高品質渲染:PdfiumViewer基于PDFium引擎實作,能夠對PDF文檔進行高品質的渲染和展示,保證了PDF文檔在應用程式中的可視化效果。
  2. 輕量級:PdfiumViewer是一款輕量級的庫,易于學習和使用,同時也占用較少的計算機資源。
  3. 跨平台支援:PdfiumViewer支援多種平台,包括Windows、Linux以及MacOS,友善開發者進行跨平台開發。

PdfiumViewer的缺點包括:

  1. 輸入處理相對簡單:PdfiumViewer對使用者輸入的處理相對簡單,無法滿足進階使用者互動的需求。
  2. 文檔較少:由于PdfiumViewer是一個相對較新的庫,目前的文檔比較少,需要自行閱讀源碼或查找社群資源。

PdfiumViewer的基本功能和代碼示例。

加載PDF文檔

要在PdfiumViewer中加載PDF文檔,需要使用PdfiumViewer.PdfDocument類。使用Load方法加載指定路徑的PDF文檔。Load方法傳回PdfDocument對象,用于描述PDF文檔的各個部分。

using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Use the document object
}
           

渲染PDF文檔

PdfiumViewer支援多種方式渲染PDF文檔,包括渲染到螢幕、渲染到記憶體和渲染到檔案。下面分别介紹這三種方式。

渲染到螢幕

要将PDF文檔渲染到螢幕上,需要使用PdfViewerControl控件。将PdfDocument對象指派給PdfViewerControl的Document屬性,即可在控件中顯示PDF文檔。

using PdfiumViewer;

// Create a PdfViewerControl
var viewer = new PdfViewerControl();

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Set the document object to the PdfViewerControl
    viewer.Document = document;

    // Add the viewer control to a parent container
    this.MyGrid.Children.Add(viewer);
}
           

渲染到記憶體

要将PDF文檔渲染到記憶體中,需要使用PdfiumViewer.PdfRenderer類。将PdfDocument對象和指定的頁面參數傳遞給PdfRenderer的Render方法,即可獲得一個Bitmap對象,該對象包含渲染後的圖像資料。

using System.Drawing;
using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Create a PdfRenderer object
    var renderer = new PdfRenderer(document);

    // Render the first page of the PDF to a Bitmap object
    Bitmap bitmap = renderer.Render(0, 300, 300, true);

    // Use the bitmap object
}
           

渲染到檔案

要将PDF文檔渲染到檔案中,需要使用PdfiumViewer.PdfRenderer類。将PdfDocument對象和指定的頁面參數傳遞給PdfRenderer的RenderToStream方法,即可将渲染後的圖像資料寫入到指定的檔案流中。

using System.IO;
using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Create a PdfRenderer object
    var renderer = new PdfRenderer(document);

    // Render the first page of the PDF to a file stream
    using (var fileStream = new FileStream("page1.png", FileMode.Create))
    {
        renderer.RenderToStream(0, fileStream, ImageFormat.Png);
    }
}
           

處理PDF文檔

PdfiumViewer提供了多種API,用于處理PDF文檔。下面介紹一些常用的API。

擷取PDF文檔資訊

要擷取PDF文檔的各種資訊,需要使用PdfiumViewer.PdfDocument類的相應屬性。比如,可以擷取PDF文檔的标題、作者、頁數等資訊。

using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Get the title of the PDF document
    string title = document.Title;

    // Get the author of the PDF document
    string author = document.Author;

    // Get the number of pages in the PDF document
    int pageCount = document.PageCount;
}
           

擷取PDF頁面資訊

要擷取PDF頁面的各種資訊,需要使用PdfiumViewer.PDFPage類的相應屬性。比如,可以擷取PDF頁面的大小、旋轉角度等資訊。

using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Get the first page of the PDF document
    PdfPage page = document.Pages[0];

    // Get the size of the PDF page
    SizeF size = page.Size;

    // Get the rotation angle of the PDF page
    int rotation = page.Rotation;
}
           

搜尋PDF文本

要搜尋PDF文本,需要使用PdfiumViewer.PdfTextFinder類。将PdfDocument對象和指定的搜尋字元串傳遞給PdfTextFinder的Search方法,即可獲得一個PdfTextMatches對象,該對象包含比對結果的詳細資訊。

using PdfiumViewer;

// Load a PDF document from a file
using (var document = PdfDocument.Load("sample.pdf"))
{
    // Create a PdfTextFinder object
    var finder = new PdfTextFinder(document);

    // Search for a string in the PDF document
    PdfTextMatches matches = finder.Search("search string");

    // Use the matches object
}           
開發高品質PDF應用的不二選擇:PdfiumViewer庫詳細解析

使用WPF代碼案例介紹PdfiumViewer庫用法

下面是一個WPF程式中使用PdfiumViewer庫的完整執行個體。

示例包含一個MainWindow視窗,其中包含一個Button控件和一個Grid控件。點選Button控件會調用ShowPDF方法,在Grid控件中顯示PDF文檔。

同時,需要将PdfiumViewer庫的dll檔案添加到項目中,并在代碼中引用。

using System.Windows;
using System.Windows.Controls;
using PdfiumViewer;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ShowPDF();
    }

    private void ShowPDF()
    {
        // Create a PDFDocument object from a file
        using (var document = PdfDocument.Load("sample.pdf"))
        {
            // Create a PDFViewerControl object and set its document property
            var viewer = new PdfViewerControl { Document = document };

            // Add the viewer control to a parent container
            this.MyGrid.Children.Add(viewer);
        }
    }
}
           

在XAML中,添加以下控件:

<Window x:Class="WpfApp1.MainWindow"
        ...
        xmlns:pdf="clr-namespace:PdfiumViewer.Wpf;assembly=PdfiumViewer.Wpf">
    <Grid>
        <Button Content="Show PDF" Click="Button_Click"/>
        <Grid x:Name="MyGrid"/>
    </Grid>
</Window>           

以上代碼會在MainWindow視窗中添加一個Button和一個Grid控件。當按鈕被點選時,調用ShowPDF方法,在Grid控件中顯示PDF文檔。需要確定将PdfiumViewer庫的dll檔案添加到項目中,并在代碼中引用。也可以通過NuGet包管理器安裝PdfiumViewer庫。

總結PdfiumViewer庫

PdfiumViewer是一款基于PDFium引擎的.NET庫,适用于各種需要在應用程式中顯示和處理PDF文檔的場景。它提供了多種API和控件,使得開發者可以輕松地将PDF文檔嵌入到其應用程式中。同時,PdfiumViewer還支援多種平台,具有良好的跨平台支援。開發者可以根據自己的需求來選擇合适的PDF處理庫。