开发高质量PDF应用的不二选择:PdfiumViewer库详细解析

在这里插入图片描述

1. PdfiumViewer库简介

PdfiumViewer是一款基于谷歌开源PDF渲染引擎PDFium的.NET库,主要用于在Windows应用程序中显示和处理PDF文档。PdfiumViewer提供了多种API和控件,使得开发者可以轻松地将PDF文档嵌入到其应用程序中。同时,PdfiumViewer还支持多种平台,包括Windows、Linux以及MacOS。
在这里插入图片描述

2. PdfiumViewer库使用场景

PdfiumViewer适用于各种需要在应用程序中显示和处理PDF文档的场景。比如,可以将PdfiumViewer用于制作PDF阅读器、PDF编辑器、报告生成器等。

PdfiumViewer库的架构设计和组件模块
PdfiumViewer的架构设计主要包含以下几个组件模块:

  • PDF Rendering:PDF Rendering是PdfiumViewer的核心模块,主要用于解析和渲染PDF文档。该模块包含多个类,如PDFDocument、PDFPage、PDFRenderer等,用于描述PDF文档的各个部分,并将它们渲染到屏幕上。
  • Input Handling:Input Handling是PdfiumViewer的输入处理模块,负责处理用户与PDF文档的交互。该模块包含多个类,如PDFMouseHandler、PDFKeyboardHandler等,用于响应鼠标、键盘事件,实现PDF文档的滚动、缩放等功能。
  • User Interface:User Interface是PdfiumViewer的用户界面模块,负责实现PDF文档的显示和控制。该模块包含多种UI控件,如PDFViewControl、PDFSearchControl、PDFBookmarkControl等,用于显示PDF文档内容并提供交互功能。

3. PdfiumViewer库的优点和缺点

3.1 PdfiumViewer的优点包括:

  • 高质量渲染:PdfiumViewer基于PDFium引擎实现,能够对PDF文档进行高质量的渲染和展示,保证了PDF文档在应用程序中的可视化效果。
  • 轻量级:PdfiumViewer是一款轻量级的库,易于学习和使用,同时也占用较少的计算机资源。
  • 跨平台支持:PdfiumViewer支持多种平台,包括Windows、Linux以及MacOS,方便开发者进行跨平台开发。

3.2 PdfiumViewer的缺点包括:

  • 输入处理相对简单:PdfiumViewer对用户输入的处理相对简单,无法满足高级用户交互的需求。
  • 文档较少:由于PdfiumViewer是一个相对较新的库,目前的文档比较少,需要自行阅读源码或查找社区资源。

4. PdfiumViewer的基本功能和代码示例。

4.1 加载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
}

4.2 渲染PDF文档

PdfiumViewer支持多种方式渲染PDF文档,包括渲染到屏幕、渲染到内存和渲染到文件。下面分别介绍这三种方式。

  1. 渲染到屏幕
    要将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 PdfViewerControlviewer.Document = document;// Add the viewer control to a parent containerthis.MyGrid.Children.Add(viewer);
}
  1. 渲染到内存
    要将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 objectvar renderer = new PdfRenderer(document);// Render the first page of the PDF to a Bitmap objectBitmap bitmap = renderer.Render(0, 300, 300, true);// Use the bitmap object
}
  1. 渲染到文件
    要将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 objectvar renderer = new PdfRenderer(document);// Render the first page of the PDF to a file streamusing (var fileStream = new FileStream("page1.png", FileMode.Create)){renderer.RenderToStream(0, fileStream, ImageFormat.Png);}
}

5. 处理PDF文档

PdfiumViewer提供了多种API,用于处理PDF文档。下面介绍一些常用的API。

5.1 获取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 documentstring title = document.Title;// Get the author of the PDF documentstring author = document.Author;// Get the number of pages in the PDF documentint pageCount = document.PageCount;
}

5.2 获取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 documentPdfPage page = document.Pages[0];// Get the size of the PDF pageSizeF size = page.Size;// Get the rotation angle of the PDF pageint rotation = page.Rotation;
}

5.3 搜索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 objectvar finder = new PdfTextFinder(document);// Search for a string in the PDF documentPdfTextMatches matches = finder.Search("search string");// Use the matches object
}

在这里插入图片描述

6. 使用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 fileusing (var document = PdfDocument.Load("sample.pdf")){// Create a PDFViewerControl object and set its document propertyvar viewer = new PdfViewerControl { Document = document };// Add the viewer control to a parent containerthis.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库。

7. 总结PdfiumViewer库

PdfiumViewer是一款基于PDFium引擎的.NET库,适用于各种需要在应用程序中显示和处理PDF文档的场景。它提供了多种API和控件,使得开发者可以轻松地将PDF文档嵌入到其应用程序中。同时,PdfiumViewer还支持多种平台,具有良好的跨平台支持。开发者可以根据自己的需求来选择合适的PDF处理库。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity游戏开发——(细)深入解析 Unity 地形系统:从基础到高级应用

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发前言深入解析 Unity 地形系统&#xff1a;从基础到高级应用一、初识 Unity 地形系统1. 地形尺寸与分辨率 二、地形编辑工具详解1…

kafka发送消息-自定义消息发送的拦截器

1、自定义拦截器 创建自定义拦截器类&#xff0c;实现ProducerInterceptor接口。对消息进行拦截&#xff0c;可以在拦截中对消息做些处理&#xff0c;记录日志等操作… package com.power.config;import org.apache.kafka.clients.producer.ProducerInterceptor; import org…

【Spring Boot】全局异常处理

目录 背景 前言 设计步骤 1.定义异常信息类&#xff1a; 2.自定义异常&#xff1a; 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中&#xff0c;如何处理全局异常的&#xff0c;也就是如何捕获全局异…

vue2 part2

数据代理 通过defineProperty里面传入obj2和x&#xff0c;然后get和set下读取接收下然后再接收set中给对象x用value接收下&#xff0c;这样就能两个数据读取和接收了 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>何…

浅谈【数据结构】链表之单链表

目录 1、什么是数据&#xff1f; 2、什么是结构 3、什么是数据结构&#xff1f; 4、线性结构(线性表&#xff09; 4.1线性表的物理结构的实现 5、链表 5.1无头结点的单链表 5.2新内容、老面孔 5.3数组和链表的优缺点 5.4链表的概念 5.5链表的创建步骤 5.5.1创建过程…

芯片后端之 PT 使用 report_timing 产生报告 之 -input_pins 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -include_hierarchical_pins 选项。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max -include_hierarchical_pins 我们使用命…

【数据库】Mysql 批量变更所有字段类型为varchar的字符集

生成变更语句 SELECT CONCAT(ALTER TABLE , TABLE_NAME, MODIFY , COLUMN_NAME, , COLUMN_TYPE, , CHARACTER SET utf8 COLLATE utf8_general_ci , CASE WHEN IS_NULLABLE YES THEN NULL DEFAULT NULL WHEN IS_NULLABLE NO AND ISNULL(COLUMN_DEFAULT) THEN NOT NULL EL…

什么是持续集成(持续交付、部署)

文章目录 1 持续集成1.1 持续集成的好处1.2 持续集成的目的1.3 没有持续集成的状况 2 持续交付3 持续部署4 持续交付和持续部署的区别 1 持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;简单来说持续集成就是频繁地&#xff…

数字孪生网络 (DTN)关键技术分析

数字孪生网络 (DTN): 概念、架构及关键技术 摘要 随着5G商用规模部署和下一代互联网IPv6的深化应用&#xff0c;新一代网络技术的发展引发了产业界的广泛关注。智能化被认为是新一代网络发展的趋势&#xff0c;为数字化社会的信息传输提供了基础。面向数字化、智能化的新一代网…

【Linux篇】Linux命令基础

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

【微信小程序】使用 npm 包 - API Promise化-- miniprogram-api-promise

1. 基于回调函数的异步 API 的缺点 默认情况下&#xff0c;小程序官方提供的异步 API 都是基于回调函数实现的&#xff0c;例如&#xff0c;网络请求的 API 需要按照如下的方式调用&#xff1a; 缺点&#xff1a;容易造成回调地狱的问题&#xff0c;代码的可读性、维护性差&a…

HTML简单了解和基础知识记录

参考视频 html的用途 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;&#xff0c;用来显示网页的文字和框架结构&#xff0c;可以认为是网页的骨架。 标签/元素 用于定义文字图片连接等&#xff0c;分…

VLDB 2024 即将来袭!创邻科技将带来精彩分享

8月26-30日&#xff0c;数据库领域最权威、影响力最大的顶级盛会之一&#xff0c;VLDB 2024 来了&#xff01; VLDB&#xff08;International Conference on Very Large Databases&#xff09;是数据管理、可扩展数据科学和数据库研究人员、厂商、应用开发者以及用户广泛参与…

能实现可算不可见的同态加密技术详解

目录 同态加密的基本概念 同态加密示例 同态加密的原理 同态加密的类型 同态加密的应用场景 同态加密的挑战 小结 同态加密&#xff08;Homomorphic Encryption&#xff0c;HE&#xff09;是一种满足密文同态运算性质的加密算法&#xff0c;可以在加密数据上直接执行特定…

WiFi的IP和电脑IP一样吗?怎么更改wifi的ip地址

在数字化时代&#xff0c;网络连接已成为我们日常生活和工作中不可或缺的一部分。无论是通过手机、电脑还是其他智能设备接入互联网&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演着至关重要的角色。然而&#xff0c;很多用户对于WiFi的IP地址与电脑&#xff08;或…

3.4-CoroutineScope/CoroutineContext:coroutineScope() 和 supervisorScope()

文章目录 coroutineScope()supervisorScope()总结 coroutineScope() coroutineScope() 和我们创建协程时的 CoroutineScope 名字是相同的&#xff0c;实际上它们也确实有所关联&#xff0c;为了方便理解我们先说下 coroutineScope() 是怎样的效果。 我们在使用 coroutineScop…

计算机网络常见面试题总结

文章目录 1 计算机网络基础1.1 网络分层模型1.1.1 OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;1.1.2 TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;1.1.3 为什么网络要分层&#xff1f; 1.2 常见网络协议1.2.1 应用层有哪些常见的协议&…

MySQL主从复制之GTID模式

目录 1 MySQL 主从复制 GTID 模式介绍 2 传统复制模式与GTID复制模式的区别 3 GTID模式核心参数 4 GTID 实现自动复制原理 4.1 GTID基本概念 4.2 GTID复制流程 5 GTID 实现自动定位 5.1 配置 my.cnf 5.2 配置 SLAVE 实现自动定位 5.3 测试 6 GTID 模式 故障转移的方法流程 6.1…

记一次NULL与空字符串导致的分组后产生重复数据

目录 一&#xff0c;场景说明二&#xff0c;实现功能三&#xff0c;修改原实现方法四&#xff0c;说明 一&#xff0c;场景说明 想实现这样一个功能&#xff0c;统计人员信息中不同性别的人的总工资。 实现方式&#xff1a;将数据group by 分组后累加。 二&#xff0c;实现功…

SpringMVC核心机制环境搭建

文章目录 1.SpringMVC执行流程1.基础流程图2.详细流程图 2.安装Tomcat1.下载2.解压到任意目录即可3.IDEA配置Tomcat1.配置Deloyment2.配置Server 3.创建maven项目1.创建sun-springmvc模块&#xff08;webapp&#xff09;2.查看是否被父模块管理3.pom.xml引入依赖4.目录5.SunDis…