如何通过MuPDF.NET提取PDF全部内容(含表单域、矢量图)及相对位置?
使用MuPDF.NET提取PDF全量内容及元素位置
一、提取表单域内容与位置
MuPDF.NET提供了直接访问PDF表单域的API,通过Document的AcroForm属性可获取表单集合,进而遍历每个域的内容与位置信息:
using MuPDF.NET; var document = new Document("path-to-doc.pdf"); // 检查文档是否包含表单 if (document.AcroForm != null) { foreach (var field in document.AcroForm.Fields) { // 获取表单域的名称和值 string fieldName = field.Name; string fieldValue = field.Value; // 获取表单域在页面上的边界框位置 Rect rect = field.Rect; float x = rect.X; float y = rect.Y; float width = rect.Width; float height = rect.Height; // 按需处理或输出信息 Console.WriteLine($"表单域:{fieldName},值:{fieldValue},位置:X={x}, Y={y}, 宽={width}, 高={height}"); } }
二、提取矢量图与位置
要获取PDF中的矢量图形,可使用Page对象的GetDrawings()方法,该方法会返回页面上所有矢量元素的集合,包含路径、颜色、位置等关键信息:
using MuPDF.NET; var document = new Document("path-to-doc.pdf"); for (int i = 0; i < document.PageCount; i++) { var page = document.LoadPage(i); // 获取页面所有矢量图形 var drawings = page.GetDrawings(); foreach (var drawing in drawings) { // 获取图形的边界框位置 Rect rect = drawing.BBox; // 获取图形的路径数据 string pathData = drawing.Path; // 获取图形的填充、描边颜色属性 Color fillColor = drawing.FillColor; Color strokeColor = drawing.StrokeColor; // 按需处理或输出信息 Console.WriteLine($"矢量图位置:X={rect.X}, Y={rect.Y}, 宽={rect.Width}, 高={rect.Height}"); Console.WriteLine($"路径数据:{pathData}"); } page.Dispose(); } document.Dispose();
三、整合全量内容提取
如果需要同时提取文本、表单域、矢量图,可将上述逻辑整合,按页批量处理:
using MuPDF.NET; var document = new Document("path-to-doc.pdf"); for (int i = 0; i < document.PageCount; i++) { var page = document.LoadPage(i); // 提取HTML格式文本 string htmlContent = page.GetText("html"); // 提取当前页面的表单域 if (document.AcroForm != null) { var pageFields = document.AcroForm.Fields.Where(f => f.PageNumber == i); foreach (var field in pageFields) { // 表单域处理逻辑 } } // 提取当前页面的矢量图 var drawings = page.GetDrawings(); foreach (var drawing in drawings) { // 矢量图处理逻辑 } page.Dispose(); } document.Dispose();
注意事项
- 表单域的
PageNumber属性可用于关联到具体页面,方便按页筛选 GetDrawings()会返回所有路径类图形,包括线条、多边形、曲线等- 处理完页面后需调用
Dispose()释放资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者Noble Eugene
相关产品推荐
相关产品推荐

