了解最新技术文章
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); } }}
上一篇:没有了!