技术文章

了解最新技术文章

当前位置:首页>技术文章>技术文章
全部 10 常见问题 0 技术文章 10

Pdfium.NET SDK入门

时间:2022-08-18   访问量:1110

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”。

入门

下载 安装包,解压后将以下文件复制到你的项目目录下

网络XX\
	Patgames.Pdf.dll
	Patgames.Pdf.xml
	Patgames.Pdf.WinForms.dll
	Patgames.Pdf.WinForms.xml
	Patgames.Pdf.Wpf.dll
	Patgames.Pdf.Wpf.xml或者网络标准XX\
	Patgames.Pdf.dll
	Patgames.Pdf.xml或者uap10.0\
	Patgames.Pdf.dll
	Patgames.Pdf.xml和  x64\
	pdfium.dllx86\
	pdfium.dll或者osx\
	libpdfium.dylib


Pdfium.NET SDK 提供了许多处理 PDF 文件的组件:

笔记 笔记

WinForms 和 Wpf 控件的源代码可以从 github 加载:https ://github.com/Patagames/

  1. 要使用该库,您必须首先将Patagames.Pdf.dll和/或Patagames.Pdf.WinForms.dllPatagames.Pdf.Wpf.dll文件的引用添加到您的项目中。

    参考

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

    本国的

    笔记 笔记

    你有两个选择。如果您的应用程序仅 32 位或仅 64 位,您可以删除不会使用的 DLL。您可以将此文件保留在 x86 或 x64 目录中,或将其移动到项目的根目录中。在这两种情况下,库都会找到 DLL。

    • x86\pdfium.dll是 32 位版本的 Pdfium 库;

    • x64\pdfium.dll是 64 位版本的 Pdfium 库;

  3. 构建项目时,pdfium.dll 库必须放在应用程序旁边,在根目录或 x86 或 x64 子目录中。完成此操作的最简单方法是更改该文件的属性,将“复制到输出目录”设置更改为“始终复制”。

    属性

  4. 就这样。您的项目已准备好使用 Pdfium.Net SDK

    重要的提示 重要的

    在使用任何 PDF 处理函数之前,您必须在某个时间点调用Initialize函数。
    如果您在初始化时遇到问题(如果它显示“无法加载 DLL 'pdfium.dll'”之类的内容),请尝试通过specificPath参数指定 Pdfium.dll 的完整路径。阅读此处了解更多详情。

    小费 小费

    您可以在此处 找到有关如何配置项目的视频说明

例子

下面的代码示例演示了如何将 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);
        }
    }}


上一篇:没有了!

下一篇:Patgames WinForms 控件的本地化

发表评论:

评论记录:

未查询到任何数据!

在线咨询

点击这里给我发消息 售前咨询专员

点击这里给我发消息 售后服务专员

在线咨询

免费通话

24小时免费咨询

请输入您的联系电话,座机请加区号

免费通话

微信扫一扫

微信联系
返回顶部