PDFTron:将像素转换为字体大小

PDFTron: converting pixels to fontsize

我有一些经过 OCR 处理的 pdf 文本。 OCR returns 文字的边界框给我。 我能够在 pdf 上绘制边界框 (wordRect),一切似乎都是正确的。

但是当我告诉我的字体大小是这些边界框的高度时, 一切都出错了。文本看起来比应有的小很多,而且与高度不匹配。

我缺少一些转换。我怎样才能确保文本与边界框一样高?

pdftron.PDF.Font font = pdftron.PDF.Font.Create(convertedPdf.GetSDFDoc(), pdftron.PDF.Font.StandardType1Font.e_helvetica);
for (int j = 0; j < ocrStream.pr_WoordList.Count; j++)
{
           wordRect = (Rectangle) ocrStream.pr_Rectangles[j];

           Element textBegin = elementBuilder.CreateTextBegin();
           gStateTextRun = textBegin.GetGState();
           gStateTextRun.SetTextRenderMode(GState.TextRenderingMode.e_stroke_text);
           elementWriter.WriteElement(textBegin);

           fontSize = wordRect.Height;
           double descent;

           if (hasColorImg)
           {
               descent = (-1 * font.GetDescent() / 1000d) * fontSize;
               textRun = elementBuilder.CreateTextRun((string)ocrStream.pr_WoordList[j], font, fontSize);

              //translate the word to its correct position on the pdf

              //the bottom line of the wordrectangle is the baseline for the font, that's why we need the descender
              textRun.SetTextMatrix(1, 0, 0, 1, wordRect.Left, wordRect.Bottom + descent );

How can i make sure the text is as high as the bounding boxes?

font_size 只是一个比例因子,在大多数情况下会映射到 1/72 英寸 (pt),但并非总是如此。

转换是: GlyphSpace -> TextSpace -> UserSpace(其中 UserSpace 本质上是页面 space,并且是 1/72 英寸)

font中的glyphs定义在GlyphSpace中,并且有一个字体矩阵映射到TextSpace。通常,1000 个单元映射到测试中的 1 个单元 space,但并非总是如此。

然后text matrixelement.SetTextMatrix),font size(这里有问题的变量)和一些附加参数,将TextSpace坐标转换为UserSpace .

最后,确切的高度也取决于字形。

这个论坛 post 展示了如何从字形数据转到用户空间。参见 ProcessElements https://groups.google.com/d/msg/pdfnet-sdk/eOATUHGFyqU/6tsUF0BHukkJ