了解最新技术文章
Pdfium.NET SDK它是一个基于 PDFium 项目的类库 ,用于查看、导航、编辑和提取 .NET 项目中的 PDF 文件中的文本。
兼容性
Pdfium.Net SDK 可用于 32 位和 64 位操作系统上的 .Net Framework 2.0 - 4.8、.Net 5.0、.Net Standard 和 Core。
SDK 已在 Windows XP、Vista、7、8、8.1 和 10、MacOS Maverics 和 Catalina 上进行了测试,并且与所有这些都完全兼容。该项目包含的本机 pdfium.dll 和 libpdfium.dylib 库提供 32 位和 64 位版本,因此您的 .NET 应用程序可以是“任何 CPU”。
入门
下载 安装包,解压后将以下文件复制到你的项目目录下
Pdfium.NET SDK 提供了许多处理 PDF 文件的组件:
Patgames.Pdf.dll包含用于加载、操作和呈现 PDF 文档的类库;
Patagames.Pdf.WinForms.dll包含一个可以呈现 PdfDocument 的 WinForms 控件(按照此页面上的步骤将 PdfViewer 控件添加到工具箱中);
Patagames.Pdf.Wpf.dll包含一个可以呈现 PdfDocument 的 Wpf 控件;
Pdfium.dll它是 Windows 的原生 pdfium 引擎;
libpdfium.dylib它是 Mac OS 的原生 pdfium 引擎;
笔记 |
|---|
WinForms 和 Wpf 控件的源代码可以从 github 加载:https ://github.com/Patagames/ |
要使用该库,您必须首先将Patagames.Pdf.dll和/或Patagames.Pdf.WinForms.dll或Patagames.Pdf.Wpf.dll文件的引用添加到您的项目中。

添加此引用后,您需要将两个文件添加到您的项目中:

笔记 |
|---|
你有两个选择。如果您的应用程序仅 32 位或仅 64 位,您可以删除不会使用的 DLL。您可以将此文件保留在 x86 或 x64 目录中,或将其移动到项目的根目录中。在这两种情况下,库都会找到 DLL。 |
x86\pdfium.dll是 32 位版本的 Pdfium 库;
x64\pdfium.dll是 64 位版本的 Pdfium 库;
构建项目时,pdfium.dll 库必须放在应用程序旁边,在根目录或 x86 或 x64 子目录中。完成此操作的最简单方法是更改该文件的属性,将“复制到输出目录”设置更改为“始终复制”。

就这样。您的项目已准备好使用 Pdfium.Net SDK
重要的 |
|---|
在使用任何 PDF 处理函数之前,您必须在某个时间点调用Initialize函数。 |
小费 |
|---|
您可以在此处 找到有关如何配置项目的视频说明。 |
例子
下面的代码示例演示了如何将 PDF 文档加载到 PdfViewer 控件中,选择某个页面上的所有文本并提取所选文本。
此示例要求您已将 PdfViewer 控件添加到窗体,并从构造函数或窗体的另一个方法调用示例中创建的方法。该示例还需要一个名为 Test001.pdf 的 pdf 文档位于驱动器 C 的根目录中。
C#
复制
公共 无效加载文档(){
//初始化SDK库
//你必须先调用这个函数才能调用任何PDF处理函数。
PdfCommon.Initialize();
//从文件中打开并加载 PDF 文档。
pdfViewer1.LoadDocument( @"c:\test001.pdf" );
//选择第一页中包含的所有文本。
pdfViewer1.SelectText( 0 , 0 , 1 , 0 );
//从 PdfViewer 控制
字符串中获取选定文本selectedText = pdfViewer1.SelectedText;}如果您使用 WPF,那么您应该将 PdfViewer 控件放置在如下所示的窗口中
XAML
复制
<窗口 xmlns:Wpf = "clr-命名空间:Patagames.Pdf.Net.Controls.Wpf;程序集=Patagames.Pdf.Wpf"
xmlns:Toolbars = "clr-命名空间:Patagames.Pdf.Net.Controls.Wpf.ToolBars;程序集=Patagames.Pdf.Wpf"
x:Class = "ExamplesWpf.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft .com/winfx/2006/xaml"
名称= "mainWindow"
>
<网格>
< Grid.RowDefinitions >
<行定义 高度= "自动" > </RowDefinition >
< RowDefinition > </ RowDefinition >
</ Grid.RowDefinitions >
< ToolBarTray Grid.Row = "0" >
< Toolbars:PdfToolBarMain Window = "{Binding ElementName= mainWindow}" PdfViewer = "{Binding ElementName=pdfViewer1}" Name = "toolbarMain1" > </ Toolbars:PdfToolBarMain >
< Toolbars:PdfToolBarClipboard PdfViewer = "{Binding ElementName=pdfViewer1}" Name = "toolbarClipboard1" > </ Toolbars:PdfToolBarClipboard >
</ ToolBarTray >
< ScrollViewer Grid.Row = "1" CanContentScroll = "True" VerticalScrollBarVisibility = "Auto" Horizo ntalScrollBarVisibility = "Auto" >
< Wpf:PdfViewer Name = "pdfViewer1" />
</ ScrollViewer >
</ Grid > </ Window >您可以在不使用任何 GUI 元素的情况下处理 pdf 文档。
下面的代码示例演示了如何在不使用 PdfViewer 控件的情况下从任何 pdf 页面中提取所有文本。
此示例需要一个名为 Test001.pdf 的 pdf 文档位于驱动器 C 的根目录中。
C#
复制
公共 无效ExtractTextExample(){
//初始化SDK库
//你必须先调用这个函数才能调用任何PDF处理函数。
PdfCommon.Initialize();
//从文件中打开并加载 PDF 文档。
var doc = PdfDocument.Load( @"c:\test001.pdf" );
//从文档中获取第二页;
var page = doc.Pages[ 1 ];
//获取页面中的字符数或-1表示错误。
//生成的字符,如额外的空格字符,换行符,也被计算在内。
int totalCharCount = page.Text.CountChars;
//从页面字符串中提取文本字符串text = page.Text.GetText( 0 , totalCharCount);}您可以将 pdf 页面呈现为图像以在图形模式下使用它。
C#
复制
公共 无效渲染页面(){
//初始化SDK库
//你必须先调用这个函数才能调用任何PDF处理函数。
PdfCommon.Initialize();
//从文件中打开并加载 PDF 文档。
使用( var doc = PdfDocument.Load( @"c:\test001.pdf" ))
{
诠释i = 0 ; //遍历所有页面;
foreach(doc.Pages中的var页面)
{
//获取以磅为单位的页面宽度和高度。一点是 1/72 英寸(约 0.3528 毫米)
int width = ( int )page.Width; int height = ( int )page.Height;
//使用( var bmp = new PdfBitmap(width, height, true ))创建位图
{
//填充背景
bmp.FillRect( 0 , 0 , width, height, FS_COLOR.White); //将页面中的内容渲染到由坐标对、宽度和高度指定的绘图表面。
page.Render(bmp, 0 , 0 , 宽度, 高度,
Patagames.Pdf.Enums.PageRotate.Normal,
Patagames.Pdf.Enums.RenderFlags.FPDF_ANNOT);
//获取.Net图片并保存到文件
bmp.Image.Save(string.Format ( @"c:\test001_pdf_page_{0}.png" , i++), ImageFormat.Png);
}
}
}}下面的代码示例演示了如何创建一个新的 PDF 文档,从现有的 PDF 文档中导入一些页面,并将创建的文档保存到一个文件中。
本示例要求 C 盘根目录下有一个名为 Test001.pdf 的 pdf 文档。
本示例还要求您具有 C 盘根目录的写权限。
C#
复制
公共 无效导入页面(){
//初始化SDK库
//你必须先调用这个函数才能调用任何PDF处理函数。
PdfCommon.Initialize();
//从文件中打开并加载 PDF 文档。
var docSource = PdfDocument.Load( @"c:\test001.pdf" );
//创建一个新的PDF文档。
var doc = PdfDocument.CreateNew();
//将一些页面导入PDF文档。
doc.Pages.ImportPages(docSource, "1,5-7" , 0 );
//保存一份PDF文档到指定文件名
doc.Save( @"c:\test002.pdf" , Patagames.Pdf.Enums.SaveFlags.Incremental);}以及如何访问 acro 表单
C#
复制
公共 无效GetAccessToAcroForms(){
var forms = new PdfForms(); var doc = PdfDocument.Load( @"c:\test.pdf" , forms); //doc.FormFill 等同于表单,也可用于访问 acro 表单;
诠释i = 0 ; foreach( forms.InterForm.Fields中的var字段)
{
如果(field.FieldType == Patagames.Pdf.Enums.FormFieldTypes.FPDF_FORMFIELD_TEXTFIELD)
{
field.Value = "这是一个字段#" + (++i);
}
}}//或者如果您使用的是 PdfViewer公共 无效GetAccessToAcroFormsFromViewer(){
var doc = pdfViewer1.Document; var interactiveForms = doc.FormFill.InterForm;
诠释i = 0 ; foreach(interactiveForms.Fields中的var字段)
{
如果(field.FieldType == Patagames.Pdf.Enums.FormFieldTypes.FPDF_FORMFIELD_TEXTFIELD)
{
field.Value = "这是一个字段#" + (++i);
}
}}上一篇:没有了!