Iphone PDF计算字形大小

Iphone PDF计算字形大小,iphone,pdf,ios,quartz-graphics,linear-algebra,Iphone,Pdf,Ios,Quartz Graphics,Linear Algebra,我(认为)在PDF中具有文本呈现的所有值 * Position (Text Matrix) * FontDescriptor with Widths Array * FontBBox * StemV/StemH * FontName * Descent * Ascent * CapHeight * XHeight * ItalicAngle 我的问题是我不知道如何处理这些值。我浏览了PDF Spec 1.7好几次,没有找到一个公式来计算PDF中每个字形的实际像素大小。你能给我一个提示吗 谢谢。

我(认为)在PDF中具有文本呈现的所有值

* Position (Text Matrix)
* FontDescriptor with Widths Array
* FontBBox
* StemV/StemH
* FontName
* Descent
* Ascent
* CapHeight
* XHeight
* ItalicAngle
我的问题是我不知道如何处理这些值。我浏览了PDF Spec 1.7好几次,没有找到一个公式来计算PDF中每个字形的实际像素大小。你能给我一个提示吗


谢谢。

这些值是为正确排版而设计的,而不是绘制字形,因此您无法从这些属性中获得每个字形的确切像素大小。获得字形的精确像素尺寸的唯一方法是将字形绘制到图像中并分析该图像

FontBBox(字体边界框)是容纳每个字形的最小框。宽度数组保存关于每个字符应绘制的距离的信息,而不是实际的字形图像大小。有些字体会绘制一些超出该宽度的字形


在典型的文本编辑器中高亮显示文本时,高亮显示的是字体的全高和每个字符的宽度。通过从宽度数组中获取FontBBox高度和每个字符的宽度,并将这些值转换为与当前字体属性(大小等)匹配的值,可以实现此高亮显示。此信息足以使您的应用程序绘图类型与典型应用程序类似。

您想做什么?呈现PDF需要大量的工作,您还需要考虑前导、文本提升、字距调整、CTM和其他几个因素

Position:     (optional, you can avoid it)
Text Matrix:  (optional, you can avoid it) 
Widths Array: (use empty array [], PDF can read it directly from CFF (FontFile3 stream))
FontBBox:     font file->'CFF ' table->Top DICT INDEX->DICT-> 4 operands for 'FontBBox'     operator
StemV:        (optional, you can avoid it)
StemH:        (optional, you can avoid it)
FontName:     font file->'name' table->records
      or: font file->'CFF ' table->Top DICT INDEX->string by index 0 for 'fonts names' operator

Descent:      font file->'hhea' table->'Descender' parameter
Ascent:       font file->'hhea' table->'Ascender' parameter 
CapHeight:    font file->'OS/2' table->'sCapHeight' parameter
XHeight:      font file->'OS/2' table->'sxHeight' parameter
ItalicAngle:  font file->'OS/2' table->'sxHeight' parameter
实际上,您可以计算数组的宽度。对于每个图示符:

Decoding array(PDF) -> Glyph name (PDF) -> Glyph index (CFF table of font file) -> table 'hmtx' -> Glyph 'hMetrics'[Glyph index] = array ('advanceWidth', 'leftSideBearing')   

我花了一周的时间来理解它…

如果你只想突出显示一个文本,就不需要计算文本。您可以向页面添加任意数量的内容对象(矩形、图像、线条、半透明内容),然后重新计算PDF结构。这真的很简单。询问鼠标的选择坐标)

你想做什么?你的问题与iphone、quartz graphics和线性代数有什么关系?我想突出显示一个文本。我用Quartz 2D方法成功地解析了PDF。我想我已经掌握了所有信息,现在我必须做一些数学运算来找出一些文本/单词的“cRects”。如何将FontBBox值转换为设备空间值(真实像素值)?FontBBox和宽度值在FontMatrix指定的字形空间中。通过连接字体矩阵和文本空间来构建转换矩阵,以将FontBBox值映射到设备空间。您是否有计算FontBBox高度+宽度数组到设备空间的EXACT公式,以便我可以获得字符大小?您是否有机会为iOS实现选择和突出显示文本?或者这只是基本的解释?有很多关于选择和突出显示的信息