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

如何使用C#提取特定颜色矢量对象的坐标与尺寸?

提取PDF中特定颜色矢量对象的坐标与尺寸(替代PDFSharp的方案)

你说得没错,PDFSharp本身确实没有直接提供按颜色筛选并提取矢量图形坐标/尺寸的API——它的强项更多在PDF的创建、修改和基础内容提取上,色板提取已经是它在颜色相关处理上的边界了。不过我们有两种可行的解决思路:

一、扩展PDFSharp的内容解析逻辑

PDFSharp允许你遍历页面的底层内容对象,你可以自己编写逻辑来筛选目标颜色的矢量图形,并计算其边界信息。核心思路是遍历每个图形路径,检查其描边/填充颜色,匹配后通过GetBounds()获取坐标和尺寸。

示例代码(C#)

using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Content;
using PdfSharp.Pdf.Content.Objects;

// 加载目标PDF文档
PdfDocument doc = PdfReader.Open("your-dieline-file.pdf");
PdfPage targetPage = doc.Pages[0]; // 假设处理第一页

// 读取页面内容
ContentReader contentReader = ContentReader.Read(targetPage);
foreach (ContentObject contentObj in contentReader.AllObjects)
{
    // 筛选出路径类型的矢量对象
    if (contentObj is CPath pathObj)
    {
        // 获取路径的描边/填充颜色(根据你的需求选择,模切线一般是描边色)
        XColor targetStrokeColor = XColors.Magenta; // 替换为你的目标颜色
        if (pathObj.StrokeColor.Equals(targetStrokeColor))
        {
            // 计算该路径的边界矩形,包含坐标与尺寸
            XRect pathBounds = pathObj.GetBounds();
            // 输出结果(注意PDF坐标原点在左下角)
            Console.WriteLine($"找到匹配路径:X={pathBounds.X:F2}, Y={pathBounds.Y:F2}, 宽度={pathBounds.Width:F2}, 高度={pathBounds.Height:F2}");
        }
    }
}

关键注意点

  • 颜色匹配要对应正确的颜色空间:如果是专色模切线,需要检查pathObj.StrokeColor.ColorSpace是否为专色,再匹配专色名称,而不是RGB/CMYK值;
  • PDF的坐标系统以页面左下角为原点,若需要转换为常规的顶部原点坐标,可用页面高度 - Y坐标计算;
  • 若模切线由多个连续路径组成,可收集所有匹配路径的边界后合并计算整体尺寸。

二、改用更专业的PDF内容提取库

如果不想自己编写复杂的解析逻辑,推荐使用对PDF内容提取支持更完善的库:

  • iTextSharp/iText 7:拥有成熟的内容遍历API,可直接筛选指定颜色的图形元素,获取其几何边界,还支持图层(OCG)筛选(很多模切线会放在专属图层);
  • PDFClown:提供直观的PDF对象模型,能轻松访问图形的颜色属性和几何信息,适合处理复杂的矢量内容。

内容的提问来源于stack exchange,提问作者Razvan Dumitrescu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:07:33