You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:50:05