Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pdf TrueType字体的StemV值_Pdf_Truetype_Embedded Fonts - Fatal编程技术网

Pdf TrueType字体的StemV值

Pdf TrueType字体的StemV值,pdf,truetype,embedded-fonts,Pdf,Truetype,Embedded Fonts,我正在将TrueType字体嵌入到pdf中,因此需要为其创建描述符字典。 所需字段中有StemV,我还没有在ttf中找到该信息的存储位置。 我想我在某个地方看到了一个暗示,那就是它是程序的一部分,但没有什么特别的 所以,我的问题是如何找出给定TrueType字体的StemV值。我想直接从ttf文件中读取这个值(而不是使用ie windows API),因为我想编写跨平台解决方案 更新: Grep编辑了LibreOffice 5.1.0.3 source,似乎在导出为pdf时,FontDescr

我正在将TrueType字体嵌入到pdf中,因此需要为其创建描述符字典。 所需字段中有StemV,我还没有在ttf中找到该信息的存储位置。 我想我在某个地方看到了一个暗示,那就是它是程序的一部分,但没有什么特别的

所以,我的问题是如何找出给定TrueType字体的StemV值。我想直接从ttf文件中读取这个值(而不是使用ie windows API),因为我想编写跨平台解决方案


更新

Grep编辑了LibreOffice 5.1.0.3 source,似乎在导出为pdf时,
FontDescriptor
是在
vcl/source/gdi/pdfwriter\u impl.cxx
方法
PDFWriterImpl::emitFontDescriptor()
中生成的。在第3888行附近有以下代码:

//根据PDF参考1.4,需要StemV
//我觉得有点奇怪,但是。。。
aLine.append(“\n”
“/StemV 80\n”);
现在的问题是为什么是
80
,而不是
42
?严肃地说,如果像LibreOffice这样的项目使用硬编码常量,似乎表明该值要么没有存储到字体文件中,要么读取该值的成本极高(即需要实现TrueType字体引擎来解释字体程序)

顺便说一句,对于那些想知道这个StemV是什么的人-在“PDF参考”中
第六版“它被描述为”字体中字形的主要垂直杆的厚度(水平测量)。

根据ISO 32000-1:2008,虽然
StemH
是可选的,但需要
StemV
(见表122)。唉,对于从何处获取这些数据,似乎没有达成明确的共识

该变量可能来自Adobe的原始1型(CFF)字体格式:

条目
StdVW
是一个只有一个实数条目的数组 表示垂直茎的主要宽度(水平测量) 以字符空间单位表示)。通常,这将是宽度 用小写字母表示笔直的茎。(对于斜体字体程序, 以垂直角度测量垂直杆的宽度 例如:

/StdVW[85]def

(Adobe Type 1字体格式,1993年2月,1.1版,第42页)

这是CFF字体的
/Private
字典中的可选条目

然而,Werner Lemberg指出()

如果嵌入的字体 是类型1或CFF字体;在这种情况下 使用私人字典。对于CID字体,关联的值 使用字形的字体DICT

如果PDF中没有StemV值,则使用以下算法 适用于

这增加了混淆,因为它在PDF规范中被标记为“必需”

其他一些工具包的尝试 apachefop在字体下的“目标”中注释

。。如果[重要],则在构建FOP xml度量文件时解析.pfb文件以提取它

()

PDFLib使用FreeType,头文件
ft_font.h
包含一个列表:

 +---------------------------------------------------------------------------+
Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. |
 +---------------------------------------------------------------------------+
(.. omitted..)    

/*
 * these defaults are used when the stem value
 * must be derived from the name (unused)
 */
#define FNT_STEMV_MIN        50     /* minimum StemV value */
#define FNT_STEMV_LIGHT      71     /* light StemV value */
#define FNT_STEMV_NORMAL    109     /* normal StemV value */
#define FNT_STEMV_MEDIUM    125     /* mediumbold StemV value */
#define FNT_STEMV_SEMIBOLD  135     /* semibold StemV value */
#define FNT_STEMV_BOLD      165     /* bold StemV value */
#define FNT_STEMV_EXTRABOLD 201     /* extrabold StemV value */
#define FNT_STEMV_BLACK     241     /* black StemV value */
请注意“未使用”。此列表也仅出现在旧版本的FreeType中

对虾PDF只是说()

stemV()
不确定如何计算true type字体的此值

Apache FontBox中的TrueType嵌入程序做出了一个有根据的猜测:

()-我觉得我必须补充一点,总比什么都没有好,但差距很小。对于大多数字体,词干宽度和边框之间的关系并不是这么简单。还有一些著名的字体“向内”增肥,因此它们的边框实际上具有完全相同的值

进一步的搜索让我回到了1998年UseNet的一篇帖子:

.ttf表格和PDF的StemV值

发件人:约翰·布莱
日期:1998年6月16日星期二17:09:19 GMT
当在PDF中嵌入TrueType字体时,我需要一个垂直干宽度值-我可以从各种.ttf表中获得我需要的所有其他值(上升、下降、斜角等),但我似乎无法在任何地方找到或计算平均或正常垂直(或水平)干宽度。通过观看嵌入的PDF字体,我知道“OS/2”表中的“提示”是不够的——它是一个高度精确的值,而不是1-10的刻度。有什么线索吗?谢谢你的时间

该值不是TrueType字体。你必须通过分析,比如说,cap I标志符号来计算它。不要太担心输入一个精确的值:只有当PDF文件中没有字体时,才会使用该值,而使用一种模糊相似的字体劳伦斯

()

“'OS/2'表”提示大概是
usWeightClass
。虽然其值定义在100到900之间,但这不是一个连续的范围。只使用了整个百分之一百,因此它是1-9(而不是上面问题中提到的1-10)的刻度。该比例源自微软的字体定义,只有这9个不同的值。(请注意,
ft_font.h
文件只列出了8个预定义的stem值。还有一个问题。)


(不确定的)不确定测试 使用AdobeInDesign CS4,我创建了一个小的测试PDF,使用字体Aller(浅、规则和粗体)和Arial(规则、粗体和黑色)(这些都是TTF字体),发现InDesign将StemV的

Aller-Light      68
Aller-Regular   100
Aller-Bold      144
Arial            88
Arial-Bold      136
Arial-Black     200
这表明InDesign使用某种启发式方法来计算每个字体的词干宽度,而不依赖于基于固定权重的表格。它不像“大写字母‘I’的宽度”那么简单,分别是69、102、147(Aller)和94.7、144.5、221.68(Arial)设计单位。我特意测试了无衬线字体,因为衬线字体上的衬线需要
Aller-Light      68
Aller-Regular   100
Aller-Bold      144
Arial            88
Arial-Bold      136
Arial-Black     200