c# - 提取pdf矢量对象
问题描述
有没有办法用 C# 提取具有特定颜色的矢量对象的坐标和尺寸?例如,像“切线”或“切割线”?我尝试使用 PDFSharp 库,但它似乎没有这样的功能。我可以使用相应的颜色提取样本,但不能提取对象的坐标或尺寸。
解决方案
您可以使用PDF4NET从 PDF 页面列出矢量图形,如下所示(假设您的切线和切割线是分离色):
PDFFixedDocument document = new PDFFixedDocument(pdfFile);
PDFContentExtractor ce = new PDFContentExtractor(document.Pages[pageNumber]);
PDFVisualObjectCollection pageVisualObjects = ce.ExtractVisualObjects(false);
for (int i = 0; i < pageVisualObjects.Count; i++)
{
switch (pageVisualObjects[i].Type)
{
case PDFVisualObjectType.Path:
PDFPathVisualObject pathVisualObject = pageVisualObjects[i] as PDFPathVisualObject;
if ((pathVisualObject.Pen != null) &&
(pathVisualObject.Pen.Color.ColorSpace.Type == PDFColorSpaceType.Separation))
{
PDFSeparationColorSpace cs =
pathVisualObject.Pen.Color.ColorSpace as PDFSeparationColorSpace;
if (cs.Colorant == "dieline")
{
Console.WriteLine("dieline stroke");
for (int j = 0; j < pathVisualObject.PathItems.Count; j++)
{
Console.Write("{0}: ", pathVisualObject.PathItems[j].Type);
if (pathVisualObject.PathItems[j].Points != null)
{
for (int k = 0; k < pathVisualObject.PathItems[j].Points.Length; k++)
{
Console.Write("[{0:0.######}, {1:0.######}] ",
pathVisualObject.PathItems[j].Points[k].X,
pathVisualObject.PathItems[j].Points[k].Y);
}
}
Console.WriteLine("");
}
}
}
if ((pathVisualObject.Brush != null) &&
(pathVisualObject.Brush.Color.ColorSpace.Type == PDFColorSpaceType.Separation))
{
PDFSeparationColorSpace cs =
pathVisualObject.Brush.Color.ColorSpace as PDFSeparationColorSpace;
if (cs.Colorant == "dieline")
{
Console.WriteLine("dieline fill");
for (int j = 0; j < pathVisualObject.PathItems.Count; j++)
{
Console.Write("{0}: ", pathVisualObject.PathItems[j].Type);
if (pathVisualObject.PathItems[j].Points != null)
{
for (int k = 0; k < pathVisualObject.PathItems[j].Points.Length; k++)
{
Console.Write("[{0:0.######}, {1:0.######}] ",
pathVisualObject.PathItems[j].Points[k].X,
pathVisualObject.PathItems[j].Points[k].Y);
}
}
Console.WriteLine("");
}
}
}
break;
}
}
这是包含填充和描边矩形的示例 PDF 文件的输出:
dieline stroke
MoveTo: [20, 605]
LineTo: [270, 605]
LineTo: [270, 705]
LineTo: [20, 705]
CloseSubpath:
dieline fill
MoveTo: [20, 605]
LineTo: [270, 605]
LineTo: [270, 705]
LineTo: [20, 705]
CloseSubpath:
免责声明:我为开发 PDF4NET 库的公司工作。
推荐阅读
- symfony - em->flush 尝试插入另一个表并得到错误
- ios - 缩放 SDK:iOS Swift
- scala - 在 Spark 数据集中编码 ujson.Value
- html - Ionic - 页面加载后显示 Div 4 秒
- mysql - 在mysql中加入同一张表的子查询
- reactjs - 使用 Reactjs 来自相同 JSON 的具有父 ID 的嵌套树
- php - 函数变量 - API 响应 preg_split 结果并将创建的变量传递给新函数
- ravendb - RavenDB 更新嵌套文档?
- java - 使用 Selenium 遍历表并单击其中的链接
- c# - 对 c# 的 async/await 的控制流感到困惑