PDFiumCore:高效处理 PDF 的 .NET 库

发布时间:2025-06-26 08:43  浏览量:1

在开发中,处理 PDF 文件是一个常见的需求。无论是生成报表、查看文档还是进行复杂的 PDF 操作,都需要一个强大且灵活的工具来支持。今天,我们将介绍一款优秀的 .Net 库——PDFiumCore,它是一个基于 Google 的 PDFium 引擎开发的 .NET 库,专门用于处理 PDF 文件。它提供了丰富的功能,包括 PDF 渲染、文本提取、页面操作等。PDFiumCore 支持 .NET Core 和 .NET Framework,适用于各种平台,如 Windows、macOS 和 Linux。

安装

可以通过 NuGet 包管理器安装 PDFiumCore 库

dotnet add package PDFiumCore1. PDF 渲染

PDFiumCore 支持将 PDF 页面渲染为图像,可以生成高质量的 PNG、JPEG 等格式的图片。这对于生成预览图或进行图像处理非常有用。


// 初始化 PDFium 库
using System.Drawing;
using System.Drawing.Imaging;
using PDFiumCore;

fpdfview.FPDF_InitLibrary;

// 加载 PDF 文档
var document = fpdfview.FPDF_LoadDocument("alice-in-wonderland.pdf", );
if (document is)
{
Console.WriteLine("无法加载 PDF 文档。");
return;
}

// 加载第一页
var page = fpdfview.FPDF_LoadPage(document,0);
if (page is)
{
Console.WriteLine("无法加载页面。");
fpdfview.FPDF_CloseDocument(document);
return;
}

// 获取页面宽高
doublepageWidth = fpdfview.FPDF_GetPageWidth(page);
doublepageHeight = fpdfview.FPDF_GetPageHeight(page);
intwidth =1000;
intheight = (int)(pageHeight * width / pageWidth);

// 创建位图(第三个参数设为1,表示带alpha通道)
var bitmap = fpdfview.FPDFBitmapCreate(width, height,1);
if (bitmap is)
{
Console.WriteLine("位图创建失败。");
fpdfview.FPDF_ClosePage(page);

fpdfview.FPDF_DestroyLibrary;
return;
}

// 渲染 PDF 页面到位图
fpdfview.FPDF_RenderPageBitmap(bitmap, page,00, width, height,00);

// 获取位图数据指针
IntPtr buffer = fpdfview.FPDFBitmapGetBuffer(bitmap);

// 创建 .NET Bitmap 对象(PDFium 默认 BGRA 格式)
using (var bmp = new Bitmap(width, height, width *4, PixelFormat.Format32bppArgb, buffer))
{
bmp.Save("output.png", ImageFormat.Png);
}

// 销毁位图,释放资源
fpdfview.FPDFBitmapDestroy(bitmap);

2. 文本提取

PDFiumCore 可以从 PDF 文件中提取文本内容,这对于全文搜索或内容分析非常有用。

using System.Text;
using PDFiumCore;

public static voidExtractTextFromPDF(stringpdfPath,stringoutputTextPath,intstartPageIndex)
{
// 初始化 PDFiumCore 库
fpdfview.FPDF_InitLibrary;

try
{
var document = fpdfview.FPDF_LoadDocument(pdfPath, );
if (document is)
thrownew Exception("Failed to load PDF document.");

intpageCount = fpdfview.FPDF_GetPageCount(document);
var textBuilder = new StringBuilder;

for (inti = startPageIndex; i < pageCount; i++)
{
var page = fpdfview.FPDF_LoadPage(document, i);
if (page is)
continue;

var textPage = fpdf_text.FPDFTextLoadPage(page);
if (textPage is)
{
fpdfview.FPDF_ClosePage(page);
continue;
}

intcharCount = fpdf_text.FPDFTextCountChars(textPage);
if (charCount >0)
{
var buffer = newushort[charCount +1];
fpdf_text.FPDFTextGetText(textPage,0, charCount, ref buffer[0]);
// ushort 转 char
var charBuffer = newchar[charCount];
for (intj =0; j < charCount; j++)
charBuffer[j] = (char)buffer[j];
stringtext = newstring(charBuffer).TrimEnd('\0');
textBuilder.AppendLine($"--- Page {i +1} ---");
textBuilder.AppendLine(text);
}

fpdf_text.FPDFTextClosePage(textPage);

}

File.WriteAllText(outputTextPath, textBuilder.ToString, Encoding.UTF8);
Console.WriteLine($"Text extracted and saved to {outputTextPath}");

fpdfview.FPDF_CloseDocument(document);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
fpdfview.FPDF_DestroyLibrary;
}
}3. 页面操作

PDFiumCore 支持对 PDF 页面进行各种操作,如添加水印、旋转页面、缩放页面等。

4. 文档信息提取

PDFiumCore 可以提取 PDF 文档的元数据信息,如标题、作者、创建日期等。

Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。

如果文章对您有帮助,请给我一个赞,谢谢

点个小心是对我对大的支持!感谢