版本:freetype-2.3.7问题:FT_New_Memory_Face的第二个参数是要传入的字体数据,这个数据是指的整个字体文件的数据吗?
PDF中可以存储字体数据,对于里边存储的字体二进制数据是可以通过FT_New_Memory_Face加载的,对于某种字体:字体文件很大,但存储在PDF里边的字体数据流却不大(是经过ZIP压缩的,但还是差的太多了),我觉得存储的应该是部分字体数据。总之就是想知道这第二个参数是什么数据,和什么有关系。如何通过字体文件提取应该传入FT_New_Memory_Face的数据?

解决方案 »

  1.   

    已经在C\C++里边发同样帖,地址:http://topic.csdn.net/u/20090701/13/12fd6925-f846-4ba4-9124-5e2f6e4b36ab.html如能解决会将两帖分都给您,先在此感谢!
      

  2.   

    以下内容摘自http://hi.baidu.com/s_rlzheng/blog/item/0e3ef452c0d7f7060df3e3a3.html/**********************************
    FT_New_Face函数从一个字体文件装载一个字体face,一个face对象描述了一个特定的字样和风格,其返回值为FT_Err_Unknown_File_Format,表示可以打开,读这个文件,但是不支持它的格式,其他非零的返回值,表示不能打开跟读该文件.返回零表示装载成功. 函数原型为:
    FT_EXPORT( FT_Error )
    FT_New_Face( FT_Library   library,       // 库的句柄
                                const char* filepathname, // 字体文件路径名
                                FT_Long      face_index,    // 字体face的索引,该索引指示你想装载的face如果这个值太大,函数将会返回一个错误Index为0总是正确的。
                                FT_Face     *aface );       // 一个指向新建的face对象的指针    freetype还提供从内存装载字体face的函数,函数原型为:
    FT_EXPORT( FT_Error )
    FT_New_Memory_Face( FT_Library      library,    // 库的句柄 
                                                const FT_Byte* file_base, // 指向字体数据的第一个字节 
                                                FT_Long         file_size, // 缓存的大小(以字节表示)
                                                FT_Long         face_index, // face索引
                                                FT_Face        *aface );    // face对象的指针
    ****************************************/
      

  3.   


    谢谢回复,我现在想知道的是:FT_New_Memory_Face第二个参数要传入的数据是什么,我能把整个字体文件读出来,然后传给它吗?
    如果可以,那我必须传入整个字体文件的数据吗?是不是传入字体的某一部分就可以?PDF的字体有嵌入或不嵌入两种方式,对于不嵌入字体的PDF文件我现在想把本地字体数据读出来,然后写入PDF文件。
    现在的问题是:怎么读取字体文件数据,使用freetype库需要提取什么数据,不应该是直接把字体文件写入PDF吧。
    要写入PDF的位置,及如何读取显示等都没问题了。就差这一个需要解决了。
      

  4.   

    FT_New_Memory_Face第二个参数要传入的数据  应该是某个字体文件。对于不嵌入字体的PDF文件,如果想创建正确的Face必须指定正确的字体文件;对于嵌入字体(实际上是字形数据)的PDF文件,我觉得应该把PDF中的嵌入的字体数据(通常是某个字典里面的某个/File)作为第二个参数(这里之所以写“我觉得”,是因为我试过一些嵌入字体的PDF文件,有的能够正确创建Face,多数会出错。可能我的用法还是有些错误吧)。上文你指出PDF中的字体数据通常比较小,这是正常的,因为PDF文件中通常不会使用到一个字体中所有的字形(glyph),PDF允许部分嵌入字体文件(该过程叫做SubSetting)。被SubSetting的字体数据,比起你硬盘上放着的字体文件,有些区别:前者有些table被删去了,保留下来的table中有些部分也被删掉了,比如glyf table中的某些字形就被删掉了,cmap table可能也和原字体有些区别。但整体上看,被SubSetting的字体数据,基本上还是保持完备的。不知道这些是不是对你有帮助。