深入探索 Pdfium.Net:在 .NET 中处理和渲染 PDF 文件

在现代软件开发中,PDF 文件的处理变得愈加重要,尤其是在文档管理、报表生成和在线内容展示等领域。为了高效地处理和渲染 PDF 文件,开发者通常会选择一些强大的 PDF 处理库。而 Pdfium.Net,作为 PDFium 库的 .NET 封装,提供了一个高效且易于使用的解决方案,能够帮助开发者在 .NET 环境中轻松地处理和渲染 PDF 文件。

本文将详细介绍如何在 .NET 中使用 Pdfium.Net 进行 PDF 文件渲染、文本提取、页面处理等常见操作,帮助你理解如何利用该库进行高效的 PDF 处理。


一、什么是 Pdfium.Net?

Pdfium.Net 是 Google 开源的 PDFium 引擎的 .NET 封装。PDFium 是一个高效的 PDF 渲染引擎,广泛应用于浏览器和 PDF 查看器中,特别擅长处理 PDF 渲染和显示。通过 Pdfium.Net,开发者可以在 .NET 环境下方便地使用 PDFium 来渲染、查看和处理 PDF 文件。

主要特点

  • 高效的 PDF 渲染:支持将 PDF 文件页面渲染为图像,便于查看和展示。

  • 文本提取:可以从 PDF 文件中提取文本内容。

  • 简单的 API:提供简洁的 API,易于集成到 .NET 应用程序中。

  • 跨平台支持:虽然是 .NET 封装,但可以在 Windows 环境下运行,支持多种平台。


二、如何安装 Pdfium.Net

要在 .NET 项目中使用 Pdfium.Net,你首先需要通过 NuGet 安装该库。可以通过 NuGet 包管理器或者命令行进行安装。

安装命令

  1. NuGet 包管理器控制台

    Install-Package Pdfium.Net
    
  2. .NET CLI

    dotnet add package Pdfium.Net
    

安装完成后,你可以在代码中引用 PdfiumViewer 命名空间,从而使用 Pdfium.Net 提供的功能。

using PdfiumViewer;

三、Pdfium.Net 的基本使用

Pdfium.Net 提供了多种功能,下面我们将介绍一些最常见的使用场景,例如渲染 PDF 页面为图像、提取文本内容等。

1. 渲染 PDF 页面为图像

Pdfium.Net 主要用于将 PDF 页面渲染为图像,这使得它非常适合用于在应用程序中显示 PDF 文件的内容。通过将 PDF 页面渲染为图像,你可以将其展示在任何图形控件中,如 Windows FormsPictureBoxWPFImage 控件。

代码示例:渲染 PDF 页面为图像
using PdfiumViewer;
using System.Drawing;public void RenderPdfPageToImage(string pdfFilePath, int pageNumber, string outputImagePath)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];  // 获取指定页面var bitmap = page.Render();  // 渲染页面为图像bitmap.Save(outputImagePath, System.Drawing.Imaging.ImageFormat.Png);  // 保存为 PNG 格式}
}

通过上述代码,你可以渲染指定页并将其保存为图像文件,方便在界面中显示。

2. 在 Windows Forms 中显示 PDF 页面

Windows Forms 应用程序中,你可以将渲染的 PDF 页面图像直接显示在 PictureBox 控件中。

代码示例:显示 PDF 页面
using PdfiumViewer;
using System.Drawing;
using System.Windows.Forms;public void DisplayPdfPageInPictureBox(string pdfFilePath, int pageNumber, PictureBox pictureBox)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];  // 获取指定页面var bitmap = page.Render();  // 渲染页面为图像pictureBox.Image = bitmap;  // 显示渲染的图像}
}

这段代码将 PDF 页面渲染为图像,并在 Windows Forms 应用程序中的 PictureBox 控件中显示出来。

3. 获取 PDF 文件的总页数

有时你可能需要获取 PDF 文件的总页数,Pdfium.Net 提供了简单的方法来获取页面数量。

代码示例:获取 PDF 页数
using PdfiumViewer;public int GetPageCount(string pdfFilePath)
{using (var document = new PdfDocument(pdfFilePath)){return document.PageCount;  // 获取总页数}
}

四、处理 PDF 页面:缩放与旋转

Pdfium.Net 提供了对 PDF 页面缩放和旋转的支持,方便开发者根据需求调整页面的显示效果。

1. 缩放 PDF 页面

通过 Render 方法,你可以设置渲染时的缩放因子,从而实现页面缩放。

代码示例:缩放 PDF 页面
using PdfiumViewer;
using System.Drawing;public void RenderPdfPageWithZoom(string pdfFilePath, int pageNumber, float zoomFactor, string outputImagePath)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];var bitmap = page.Render(zoomFactor);  // 设置缩放因子bitmap.Save(outputImagePath, System.Drawing.Imaging.ImageFormat.Png);  // 保存为 PNG 格式}
}

2. 旋转 PDF 页面

你可以对 PDF 页面进行旋转操作,以适应不同的显示需求。

代码示例:旋转 PDF 页面
using PdfiumViewer;
using System.Drawing;public void RotatePdfPage(string pdfFilePath, int pageNumber, float rotationAngle, string outputImagePath)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];page.Rotate(rotationAngle);  // 旋转页面var bitmap = page.Render();  // 渲染旋转后的页面bitmap.Save(outputImagePath, System.Drawing.Imaging.ImageFormat.Png);  // 保存为图像}
}

通过这段代码,你可以对 PDF 页面进行旋转操作,并将其保存为图像文件。


五、提取 PDF 文本内容

有时,你需要从 PDF 文件中提取文本内容进行处理或分析。Pdfium.Net 允许你轻松地从 PDF 页面中提取文本。

代码示例:提取 PDF 文本
using PdfiumViewer;public string ExtractTextFromPage(string pdfFilePath, int pageNumber)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];return page.GetText();  // 提取页面文本}
}

这段代码将提取 PDF 页面中的文本内容,并以字符串形式返回,便于后续处理。


六、Pdfium.Net 在 WPF 中的使用

如果你正在开发 WPF 应用程序,可以通过将渲染的图像转换为 BitmapImage 类型,将其显示在 Image 控件中。

代码示例:在 WPF 中显示 PDF 页面
using PdfiumViewer;
using System.Drawing;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using System.IO;public void DisplayPdfPageInWPFImageControl(string pdfFilePath, int pageNumber, Image imageControl)
{using (var document = new PdfDocument(pdfFilePath)){var page = document.Pages[pageNumber];var bitmap = page.Render();var memoryStream = new MemoryStream();bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);memoryStream.Seek(0, SeekOrigin.Begin);var bitmapImage = new BitmapImage();bitmapImage.BeginInit();bitmapImage.StreamSource = memoryStream;bitmapImage.CacheOption = BitmapCacheOption.OnLoad;bitmapImage.EndInit();imageControl.Source = bitmapImage;  // 在 WPF Image 控件中显示图像}
}

这段代码将 PDF 页面渲染为图像并显示在 WPF 应用程序的 Image 控件中。


七、总结

Pdfium.Net 是一个功能强大的库,可以帮助 .NET 开发者轻松地处理和渲染 PDF 文件。无论是简单的页面渲染,还是文本提取、缩放、旋转等高级功能,Pdfium.Net 都提供了简洁而强大的 API。对于需要在桌面应用程序中集成 PDF 查看、显示和处理功能的开发者来说,Pdfium.Net 是一个非常

值得推荐的工具。通过这篇文章的学习,你已经掌握了 Pdfium.Net 的基本使用,并可以将其应用到实际项目中,提升开发效率和用户体验。

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

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

相关文章

当无人机遇到AI智能体:多领域自主空中智能和无人机智能体综述

作者:Ranjan Sapkota, Konstantinos I. Roumeliotis, Manoj Karkee 单位:康奈尔大学生物与环境工程系,希腊伯罗奔尼撒大学信息与电信系 论文标题:UAVs Meet Agentic AI: A Multidomain Survey of Autonomous Aerial Intelligenc…

从 0 到 1 玩转 React:打造你的趣味美食相册

想象一下,你想制作一个超酷的 “美食相册” 网页,能展示各种美食图片,还能随时切换查看不同美食。这听起来是不是很有趣?别担心,React 能帮你轻松实现!作为前端开发领域最受欢迎的库之一,React …

深入浅出:RocketMQ与Kafka的双剑合璧,实现高可用与高吞吐

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、RocketMQ与Kafka的江湖地位1.1 RocketMQ的独门绝技1.2 Kafka的凌厉攻势 二、双剑合璧的策略:双写队列2.1 策略概述2.2 代码实现 三、双剑合璧的实战应用3.1 电商订单处理3.2 …

Apache POI-02.入门案例-通过POI向Excel文件写入文件内容-通过POI读取Excel文件内容

一.入门案例 向excel文件中写入并读出 package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; impor…

MongoDB06 - MongoDB 地理空间

MongoDB06 - MongoDB 地理空间 文章目录 MongoDB06 - MongoDB 地理空间一:地理空间数据基础1:地理数据表示方式1.1:GeoJSON 格式1.2:传统坐标对 2:地理空间索引2.1:2dsphere 索引2.2:2d索引2.3&…

Bugku——WEB篇(持续更新ing)

目录 一、滑稽 二、计算器 方法一 方法二 三、alert 四、你必须让他停下 五、头等舱 六、GET 七、POST 方法一 方法二 八、source 九、矛盾 十、备份是个好习惯 一、滑稽 1.启动环境后,访问URL,页面出现了一堆滑稽表情 2.按f12(或fnf12)打…

Linux 网络命名空间的奥秘:深入解析struct net与内核模块编译陷阱

引言:网络隔离的基石 在Linux容器化技术(如Docker)和云计算网络中,网络命名空间是实现网络隔离的核心机制。每个隔离的网络环境都由一个关键的内核数据结构描述——struct net。这个结构体不仅是网络隔离的技术基础,也是内核开发者常遇到的编译陷阱源头。 一、解剖网络命…

idea的EasyCode插件连接瀚高数据库(APP)

文章目录 环境症状问题原因解决方案 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:5.6.5 症状 客户在idea工具中使用EasyCode插件连接瀚高数据库的企业版时,连接设置的url中提示“jdbc:highgo不存在”的错误 问题原因 E…

VMware设置虚拟机为固定IP

1. 修改虚拟网络编辑器 打开虚拟机网络“编辑” 点击“VMnet8” 选择“NAT”模式 修改网关:前面的不要修改,最后一位设置为“1”,然后确定 记住这里的网关,后面的配置要保持一致 设置子网IP和子网掩码:一般就…

智核引擎融合生成式AI,重塑企业知识图谱与研发创新范式!

目录 系统架构设计核心实现步骤步骤1:知识图谱构建与数据预处理步骤2:生成式AI与知识图谱融合(RAG增强)步骤3:智能推理工作流 核心流程可视化企业级部署方案性能优化策略应用场景示例结语 本文将手把手实现企业级知识图…

LogisticRegression(solver = ‘lbfgs‘)的ConvergenceWarning问题解决

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 LogisticRegression的Co…

web3 docs

区块链重构信任机制,去中心化,用唯一的hash编号来实现防篡改。以数字货币的形式交易,个人持有唯一的数字秘钥(唯一,不可篡改) 详见 以太坊的白皮书 和 数字货币 (加密货币实现隐私交易) 底层基础的很多特点 1.例如p2p&#xf…

AI入门 | 计算自注意力时QK^T的计算复杂度是多少?

0. 背景 假设我们有两个矩阵: 矩阵 A,尺寸为 (n, d_k)矩阵 B,尺寸为 (d_k, n) 我们要计算它们的乘积 C A * B。 那么这个过程所需的计算量是多少? 1. 结果矩阵的尺寸 首先,结果矩阵 C 的尺寸是由第一个矩阵的行数…

NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)

摘要 面对传统激光雷达建模​​成本高昂​​(单设备超$20万)与​​操作复杂​​的行业痛点,本文提出基于消费级无人机大疆Mavic 4 Pro的​​NeRF-LiDAR融合重建方案​​,实现厘米级精度建模成本降低至1/10。核心技术突破在于&…

x64dbg设置条件断点

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、x64是什么?二、条件断点1.CreateWindowExW函数设置当窗口名称为xxx字符串时候break总结前言 提示:这里可以添加本文要记录的大概内容: x64dbg设置条件断点 版本 2024 mar 27 提示:以…

RNN人名分类器案例

RNN人名分类器案例 1 任务目的: 目的: 给定一个人名,来判定这个人名属于哪个国家 典型的文本分类任务: 18分类---多分类任务 2 数据格式 注意:两列数据,第一列是人名,第二列是国家类别,中间用制表符号&q…

鸿蒙HarmonyOS 关于图片、视频的选择详解

背景 在聊天软件中,发送相册中视频和照片、用相机拍摄视频和图片发送是很常用的功能。在Android和iOS端,大部分应用都通过API方式定义UI来实现相册选择照片、视频,相机拍摄照片、视频,它们一般都支持以下功能: 相册选…

iOS 网络请求断连重试失败?抓包分析丢包原因的完整流程

在移动 App 的开发中,中断网络环境(如切换到飞行模式再回网)后,App 在重连过程中有时会出现请求未重新发送或丢包的情况。这类问题难重现、难定位,尤其在 iOS 平台上更容易被忽视。我们最近就遇到一个用户反馈“切换网…

使用 DHTMLX Gantt 添加迷你地图:提升大型项目可视化与导航体验

在应对数千个任务构成的大型项目时,DHTMLX Gantt 以其卓越的性能表现和流畅渲染能力广受欢迎。然而,在实际使用中,终端用户往往需要快速定位到时间线中的特定位置,这在面对庞杂任务结构时尤为困难。为此,DHTMLX 提供了…

ROM修改进阶教程------用于自启脚本来打开系统的一些常用开关等指令 备份收藏 【一】

在定制化rom中。有很多项目需要反编译系统的相关应用来实现。但有些功能项完全可以使用指令来更改。那么结合自启脚本就可以很方便的来实现很多功能。网络虽然有很多类似的指令,但一些相关定制化项目的指令很少见而且不全面。此博文将全面收录此类指令。方便rom修改用户借鉴参…