C# iText7 文本坐标提取问题

问题描述

我正在使用 iText7 处理 PDF 文本提取器,并注意到某个 PDF 上的奇怪文本坐标。大多数文档似乎在页面的高度和宽度内产生 x 和 y 坐标,但似乎产生负数。我想知道这里是否有处理负坐标的标准方法。这种基本方法是使用 PDF 中的正英寸测量值,并将它们映射到 iText7 提取的文本和坐标,每点英寸的比例值为 1/72。

我是从 LocationTextExtractionStrategy 派生出来的,代码如下:

        private class LocationTextListStrategy : LocationTextExtractionStrategy
        {
            private readonly List<TextRect> _textRects = new List<TextRect>();

            public List<TextRect> TextRects() => _textRects;

            public override void EventOccurred(IEventData data,EventType type)
            {
                if (!type.Equals(EventType.RENDER_TEXT))
                    return;

                var renderInfo = (TextRenderInfo)data;
                var text = renderInfo.GetCharacterRenderInfos();

                foreach (var t in text)
                {
                    if (string.IsNullOrWhiteSpace(t.GetText()))
                        continue;

                    AddTextRect(t);
                }
            }

            private void AddTextRect(TextRenderInfo t)
            {
                var letterStart = t.GetBaseline().GetStartPoint();
                var letterEnd = t.GetAscentLine().GetEndPoint();

                var newTextRect = new TextRect(
                    text: t.GetText(),l: letterStart.Get(0),r: letterEnd.Get(0),t: letterEnd.Get(1),b: letterStart.Get(1));
                
                _textRects.Add(newTextRect);
            }
        }

解决方法

每个 PDF 页面都可以有自己的自定义坐标系。原点在页面左下角很常见,但不是必须的。

类型 价值
MediaBox 矩形 (必需;可继承) 一个矩形(见 7.9.5,“矩形”),以默认用户空间单位表示,用于定义页面所在的物理介质的边界显示或打印(见 14.11.2,“页面边界”)。
裁剪框 矩形 (可选;可继承) 一个矩形,以默认用户空间单位表示,用于定义默认用户空间的可见区域。当页面被显示或打印时,其内容应被剪裁(裁剪)到这个矩形(见 14.11.2,“页面边界”)。默认值:MediaBox的值。

(ISO 32000-2:2017,表 31 — 页面中的条目)

因此,始终根据它们所引用页面的裁剪框来解释坐标。

iText 7 类 PdfPage 具有匹配的 getter。