CN102148852A - 字体子集的动态流式传输 - Google Patents
字体子集的动态流式传输 Download PDFInfo
- Publication number
- CN102148852A CN102148852A CN201010509821XA CN201010509821A CN102148852A CN 102148852 A CN102148852 A CN 102148852A CN 201010509821X A CN201010509821X A CN 201010509821XA CN 201010509821 A CN201010509821 A CN 201010509821A CN 102148852 A CN102148852 A CN 102148852A
- Authority
- CN
- China
- Prior art keywords
- font
- fonts
- data structure
- application
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/109—Font handling; Temporal or kinetic typography
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Information Transfer Between Computers (AREA)
- Controls And Circuits For Display Device (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明涉及字体子集的动态流式传输。描述了用于执行字体子集的动态流式传输的方法和系统的各种实施方式。在某些实施方式中,在客户端设备上执行的应用确定显示文件内容部分所需的字体的字形当前不可用。该应用向远程服务器发送针对字形的请求。服务器向应用发送包含了该字形的回复。在某些实施方式中,应用利用由远程服务器发送的字形来填充字体数据结构的一部分。字体数据结构可以存储在永久存储中来供相同应用或另一应用的随后执行使用。应用的随后执行可以向字体数据结构添加附加字形。在某些实施方式中,应用可以向服务器请求字体数据结构的定义,并且服务器可以向应用提供该定义。
Description
技术领域
本发明涉及字体子集的动态流式传输。
背景技术
电子系统中的可显示内容经常依赖字形的集合(被称作字体)来指定西方语言中字符和亚洲语言中表意文字的视觉特性。显示内容的应用可以采用各种方式来访问文档所需字形的信息。提供所需字形的一种方法是:在本地或网络存储上,使得包含文档所需的所有字体中所有字形的描述的文件可由运行该应用的设备进行访问。例如,包含TrueType字体的字体文件可以存储在运行着Microsoft Windows操作系统的计算机的Windows/Fonts文件夹中,形成具有“.ttf”后缀的文件。Macintosh计算机上的类似文件可以以文件形式存储在System/Fonts文件夹中,或者存储在具有Linux操作系统的计算机上的/usr/share/fonts中。字体文件包含用于显示在字体中定义的字形的信息。在TrueType字体中,文件包括针对字体中定义的每个字形的直线段和二次Bézier曲线的描述,连同提示机制一起用于改进各种大小的字形的外观。如果所需的字体文件不可用但又必须获得该字体文件,那么可能需要用户介入。当不能获得特定字体的文件时,内容可以使用来自运行着该应用的设备上可获得的字体的字形来显示。这可能导致显示的内容不能表现为内容作者所期望的那样。在某些情况下,设备可能不具有可用的合适字体(例如,内容可能需要中文语言表意文字,但执行该应用的设备只具有可用的西方语言字体),这潜在地使得内容不能有效地在设备上显示。
在设备上获得可访问的完整字体文件的备选方案是将可显示内容需要的字体嵌入到包含该内容的文件中。例如,PDF文档格式允许字体嵌入。如上文所述,字体嵌入有效地将可能在系统文件夹中找到的字体文件嵌入到文档文件中。这种方法可以保证应用将可获得需要的字形,但是由于内容文件包含了附加的信息,因此该内容文件将更大。尤其是对于亚洲语言而言,字体描述信息可能非常大。字体信息可能大到以至于通过网络对包含嵌入字体信息的内容文件的下载时间会变得长得难以接受。另外,对于可显示内容嵌入的字体描述信息通常并不在内容的不同实例之间共享。可显示内容的每个实例可以具有其自己的、字体信息的嵌入副本。对于大量的内容文件,字体描述信息的多个副本所需的额外存储可能成为设备的负担。这种方法的修改嵌入了对字体描述信息的引用而不是信息本身,并且当显示内容时才下载需要的字体。这提供了比嵌入字体信息更小的文件大小,但是每次查看内容都需要下载字体信息,而不是在用户获取内容时或安装字体文件时仅下载一次。
发明内容
描述了用于动态流式传输字体子集的方法和设备的各种实施方式。在某些实施方式中,在客户端设备上执行的应用程序分析文档的内容部分。内容部分包含文件中指定的要以特定字体显示的一个或多个字符。该应用确定要以特定字体显示字符的字形当前不可用,并且向远程服务器发送标识该字形的消息。字形少于字体中定义的所有字形(例如,字形是字体中定义的字形的适当子集),并且依赖于内容部分需要的字符。远程服务器接收请求并且向客户端设备上的应用提供所请求的字形。在某些实施方式中,应用可以将字形存储到字体数据结构中。
在某些实施方式中,客户端设备上的字体数据结构可以存储在永久存储中。永久存储中的字体数据结构可以使得字体数据结构中的字形对于应用的随后执行或其他应用的执行当前可用。应用的随后执行可以向字体数据结构添加附加字形。
在某些实施方式中,应用可以确定针对特定字体的字体数据结构不可用,并且可以向远程服务器请求该字体数据结构的定义。针对字体数据结构定义的请求可以包括在对字形的请求中,或者该请求可以作为独立请求进行发送。
在某些实施方式中,服务器从客户端设备上的远程应用接收针对字形的请求,并且发送包含所请求字形的回复。在某些实施方式中,服务器可以提供字体数据结构的定义来响应来自远程客户端应用的请求。在其他实施方式中,服务器可以确定是否应当满足来自客户端设备上的远程应用的请求。
在此描述的方法可以实现为由CPU可执行的程序指令(例如,存储在计算机可读存储介质上的)。例如,方法可以实现为程序指令,当被执行时,实现字体子集的动态流式传输来响应显示文件内容部分的请求。
附图说明
图1示出了根据一个实施方式用于动态流式传输字体的客户端-服务器系统;
图2示出了根据一个实施方式的客户端应用的示例实现;
图3示出了根据一个实施方式客户端设备上的应用实现请求和接收动态流式传输字体的方法的流程图;
图4是根据一个实施方式用于确定字形对于客户端设备上应用当前不可用的方法的流程图;
图5是根据一个实施方式客户端设备上的应用从服务器获得字体数据结构定义的方法的流程图;
图6示出了根据一个实施方式的字体服务器应用的示例实现;
图7是根据一个实施方式服务器上的应用提供动态流式传输字体的方法的流程图;
图8是根据一个实施方式服务器上的应用提供字体数据结构定义的方法的流程图;
图9是根据一个实施方式用于增量建立字体数据结构的方法的流程图;
图10A、图10B和图10C示出了根据一个实施方式创建字体数据结构并且将字形填入该字体数据结构;以及
图11示出了可以在各种实施方式中使用的示例计算机系统。
虽然这里通过若干实施方式和说明性附图的示例描述了本发明,但是本领域技术人员将认识到本发明并不限于所描述的实施方式或附图。应当理解,其中的附图和详细描述并不旨在将本发明限制于所公开的特定形式,相反,本发明将覆盖落入本发明精神和范围内的所有修改、等价物和备选。这里使用的标题仅用于组织上的目的并不意味着要用于限制本说明书的范围。正如贯穿本申请所使用的,词语“可以”用于允许意义(即,表示具有潜在可能),而不是强制意义即,表示必须)。类似地,词语“包括”表示包括但不限于。
具体实施方式
在以下具体描述中,记载了许多特定细节来提供对要求保护的主题的完全理解。然而,本领域技术人员应当理解要求保护的主题可以在没有这些特定细节的情况下被实现。在其他实例中,没有详细描述普通技术人员已知的方法、设备或系统,以便不模糊要求保护的主题。
下面根据对存储在特定设备或专用计算设备或平台的存储器中的二进制数字信号的操作的算法或符号表示,呈现了详细描述的某些部分。在此特定说明书的上下文中,术语“特定设备”等包括通用计算机,一旦其被编程便根据程序软件中的指令来执行特定功能。算法描述或符号表示是信号处理领域或相关领域中那些普通技术人员使用的技术的示例,用于将他们工作的实质传达给本领域中的其他技术人员。算法这里并且通常被认为是通向期望结果的操作或类似信号处理的自相一致的序列。在此上下文中,操作或处理包括物理量的物理操纵。通常,虽然不是必须,但是这种量可以采取能够存储、转移、组合、比较或者操纵的电信号或磁信号的形式。经证明有时是方便的,主要出于惯用的原因,将这种信号称作比特、数据、值、元素、符号、字符、项、数字、标号等。然而,应当理解,所有这些或类似术语都与适当的物理量相关联并且仅仅是方便的称号。从下面描述中明显的是,除非明确指出,否则应当理解,贯穿本说明书的讨论,利用术语(诸如,“处理”、“计算”、“运算”、“确定”等)表示特定设备(诸如,专用计算机或类似专用电子计算设备)的动作或过程。因此,在本说明书的上下文中,专用计算机或类似专用电子计算设备能够操纵或变换信号,通常表示为专用计算机或类似专用电子计算设备的存储器、寄存器或者其他信息存储设备、传输设备或显示设备中的电物理量或磁物理量。
字体的动态流式传输
图1示出了具有通过网络通信来实现字体的动态流式传输的客户端设备和远程服务器的系统。应用110在客户端设备100上运行。例如,应用110可以是文字处理应用或web浏览器。应用110可以接收用户请求以显示来自于文件120的内容。例如,文件120可以是包含从Widget Research Company获得的研究报告的文字处理文档。在某些实施方式中,文件120可以由客户端设备100的用户例如通过使用文字处理应用输入文本来创建。在其他实施方式中,文件120可能已经从另一设备或应用获得(例如,从网络服务器下载或作为电子邮件消息的附件接收)。在某些实施方式中,客户端设备100的用户可以编辑从另一设备或应用接收到的文件来添加或修改文本(例如,利用文字处理应用)。文件120包含组成至少一部分内容的字符。文件120进一步指定字体,其中内容中的每个字符要以该字体进行显示。例如,文件120可以包含字符“Dynamic Subsets(动态子集)”并且指定要以字体“Kigali Std Roman”显示字符。特定字体的每个字符具有指导应用如何以该字体显示字符的相关联字形。应用110必须访问与特定字符相关联的字形,以便显示如文件120指定的字符。继而,应用110必须确定其是否具有关于字体“Kigali Std Roman”中定义的所需字形的信息。如先前所述,现有技术中用于使字形可用于应用的技术包括将包含字体中定义的所有字形的字体描述文件安装到客户端设备上,并且将字体信息嵌入到内容文件本身。
本发明(字体子集的动态流式传输)允许应用110确定字体中定义的哪些字形当前对其而言是可用的,并且允许应用动态地获得只关于显示文件120内容部分所需的字形的附加信息。应用110可以分析内容文件120来确定显示内容需要哪些特定字形(即,何种字体的何种字符)。应用110可以检查客户端设备100上的其他资源来确定哪些字形对其而言当前是可用的。在本发明的某些实施方式中,应用110可以访问包含该字体中定义的任意字形集的字体数据结构。字体数据结构将在下面更加全面地进行描述。在当前示例中,应用110可以扫描内容文件110并且确定字符“Dynamic Subsets”要以字体“Kigali StdRoman”进行显示。为了说明目的,可以假设应用110访问包含某些而不是所有需要字形的字体“Kigali Std Roman”的字体数据结构。在此示例中,除了“y”和“S”的所有所需字符的字形都呈现在字体数据结构中。应用110可以使用字体数据结构中的字形,并且从另一源只获取用于“Kigali Std Roman”字体的字符“y”和“S”的字形。
在某些实施方式中,应用可以针对要求的字形(本示例中的“y”和“S”字形)格式化请求消息,并且通过网络130向远程服务器140发送该请求消息。在某些实施方式,远程服务器140可以是应用从中获得内容文档的相同服务器,或者远程服务器140可以是只提供字体信息(诸如,字形)的服务器。远程服务器140从应用接收消息。响应于接收消息,在服务器140上执行的字体管理器应用160可以访问字体信息150并且确定字体信息150包含用于“Kigali Std Roman”字体的字符“y”和“S”的字形。字体管理器应用160可以从字体信息150读取“Kigali Std Roman”字体的字符“y”和“S”的字形信息,将字形信息格式化到回复消息并且通过网络130向客户端设备100上的应用110发送该回复消息。
在从远程服务器140接收回复消息时,应用110将具有显示文件120的内容部分所需的所有可用字形。应用110可以使用来自“KigaliStd Roman”字体的字体数据结构中的字母“Dnamic ubsets”以及从服务器接收到的字母“y”和“S”来显示文本“Dynamic Subsets”。在某些实施方式中,应用110可以进一步利用新接收到的字形(即,在此示例中对应于字符“y”和“S”的字形)来填充字体数据结构的一部分。如果应用110需要再次以“Kigali Std Roman”字体显示字符“Dynamic Subsets”,则在字体数据结构中,所有所需字形对于应用110而言都是可用的。在某些实施方式中,字体数据结构可以存储在永久存储中,从而允许应用110继续访问从远程服务器140获取的字形,该字形可用于在随后执行中显示相同的或其他内容文件。在某些实施方式中,由应用从多个服务器或从其他源(例如,包含嵌入字体信息的内容文件)获得的字形可以存储在永久存储中相同的字体数据结构中。在某些实施方式中,存储在永久存储中的字体数据结构可以由其他应用用来显示文件120中包含的内容,或者用来显示其他文件的内容部分。
远程服务器140与客户端设备100通过网络130通信。网络130可以是适于在计算机之间传达消息的任何有线或无线网络。在某些实施方式中,网络130可以是因特网或其他广域网和/或一个或多个局域网。在某些实施方式中,远程服务器140可以是单个计算机。在其他实施方式中,远程服务器140可以是实现从客户端设备100看来作为一个服务端点的多个计算机。在某些实施方式中,多个计算机可以配置成远程服务器140,使得多个计算机中的一个接收从客户端计算机100发出的请求消息,以及多个计算机中的另一个发送包含字形的回复消息。
客户端设备100可以是能够处理文件内容部分的任何设备。通常,客户端设备会具有处理器、用于访问通信网络的装置以及至少一个显示器。示例客户端设备可以包括但不限于计算机(包括但不限于桌面计算机、笔记本计算机和上网本计算机)、移动电话、个人数字助理、便携音乐播放器以及数字录像机。与一个或多个所列设备类似的功能可以嵌入或添加到其他产品(例如,汽车或家用设备),并且这些产品可以起客户端设备的作用。
在某些实施方式中,应用110可以不访问显示文件120内容部分所需字体的字体数据结构。例如,这可能发生在应用110首次必须以特定字体显示字符的时候。为了获得字体数据结构,应用110可以向远程服务器140请求字体数据结构的定义。响应于接收对字体数据结构定义的请求,在远程服务器140上执行的字体管理器应用160可以向客户端设备100上的应用110回复包含字体数据结构定义的消息。字体数据结构的定义可以允许应用110构建最初可以是空(例如,不包含字形)的字体数据结构。应用110可以利用如上文所述获得的字形来填充此结构。在某些实施方式中,来自远程服务器140回复中的字体数据结构的定义可以包含一个或多个字形,但是少于字体中的全部字形集合。在其他实施方式中,定义可以包括用于构建字体数据结构的指令,该指令包括写入字体数据结构的数据和偏移量,该偏移量指定字体数据结构中数据要写入的位置。在一个实施方式中,针对字体数据结构的请求消息还可以包含对字体中一个或多个字形的请求。
示例实现
图2示出了客户端设备上应用程序(例如,图1中客户端设备100上的应用110)的示例实现,其可以实现字体子集的动态流式传输。应用200包含分析模块220、通信模块230和字体管理模块240。分析模块220可以访问输入文件210来响应于例如打开文档或显示web页面的用户请求。分析模块220可以分析文件210来确定显示文件210内容部分所需的字符(例如,“A”或“?”)以及其中显示每个字符的字体(例如,Helvetica、Times New Roman等)。分析模块220可以向字体管理模块240提供作为输出的字符/字体对列表。在某些实施方式中,分析模块220可以分析文件210来标识远程服务器,该远程服务器可以提供当前对应用200不可用的字形。服务器可以在内容文件210中明确标识。在某些实施方式中,服务器可以通过名称(例如,使用嵌入在内容文件中的字符串)简单标识,而在其他实施方式中,可以将统一资源标识符(URI)插入内容文件来指示能够提供字形的资源,以及用于访问该资源的特定协议。本领域技术人员应当理解,用来指定将用于获得所需字形的服务器的其他方式是可能的。在其他实施方式中,服务器可以由应用200使用文件210中的指示结合其他信息来标识。例如,文件210可以在字符串中包含内容提供者的名称,并且分析模块220可以访问数据,该数据指定将用于从特定内容提供者获得针对内容文件的字形的远程服务器。内容提供者可以使用与那些在某些实施方式中用于标识服务器的相同方式标识,或者可以使用在文件210的适当部分中的简单名称(例如,“Widget ResearchCompany”)来标识。在某些实施方式中,内容提供者可以通过分派给该内容提供者的任意标识符来标识。例如,“Widget ResearchCompany”可以由特定字体的提供者分派标识号“12345”以用于从该字体提供者操作的服务器获得针对该特定字体的字形。
字体管理模块240从分析模块220接收字符和字体信息作为输入。字体管理模块240确定来自分析模块220的输入信息中的任意字符/字体对的字形对于应用200是否不可用。在某些实施方式中,字体管理模块240查阅字体数据结构来确定字形是否可用。在某些实施方式中,字体数据结构存储在字体存储250中。在其他实施方式中,字体数据结构可以存储在应用存储器或非易失性存储器(例如,闪存)中。字体管理模块240可以使用通信模块230来从远程服务器获得应用200需要的但是对其而言当前不可用的字形。字体管理模块240可以使用通过通信模块230从远程服务器接收到的字形来填充字体数据结构的至少一部分。在某些实施方式中,基于来自远程服务器包含字体数据结构定义的回复,字体管理模块240可以创建空的或部分来填充的字体数据结构。
通信模块230可以通过网络向一个或多个远程服务器发送请求,并且从远程服务器接收响应。在某些实施方式中,远程服务器的标识可以包含在通信模块230中。在其他实施方式中,服务器计算机可以由分析模块220、应用200中的另一模块或者其上运行着应用200的客户端设备来标识。通信模块230可以格式化消息以适于网络,并且可以将接收到的消息处理成适于应用200的其他模块使用的格式。
本领域技术人员容易理解,除了图2中所示的架构,针对应用200的架构可以用于实现字体子集的动态流式传输。其他架构可以通过以其他方式划分上述模块的功能,或者通过以模块的其他配置将功能与应用200的其他功能组合来实践本发明。
客户端应用的实施方式的流程图
图3是应用程序(例如,图2中所示应用200)可以用来实现字体子集动态流式传输的方法的实施方式的流程图。方法开始于310,客户端设备上的应用分析文件的内容部分来确定用于显示内容所需的字符和字体。例如,文字处理应用可以分析文件的内容部分以响应于编辑文件或web浏览器的用户请求,应用可以分析从web站点下载的web页面(即,HTML文件)以便显示该页面。在任一这些示例中,应用(文字处理器或web浏览器)可能需要以由打开的内容文件指定的特定字体来显示字符。可显示的文件可以包括存储在客户端设备上的文档(例如,文字处理或演示文件)、从服务器获得的文件(例如,通常由web浏览器软件显示的HTML格式web页面)、除了文本和静态图形还包括动画的多媒体内容(例如,Adobe Flash文件)或者具有可以显示并且包含字符和字体信息内容的任何其他文件。在某些实施方式中,可显示文件可以包含由客户端设备的用户键入的内容(例如,利用文字处理应用将文本打入文档),或者由在客户端设备上执行的应用生成的内容(例如,由应用自动生成的文本)。分析可以处理文件内容部分中的文本,从而记录指示显示文本需要的每个字符以及文件指定的显示每个字符的字体的信息。该信息可以存储在适当的数据结构中(例如,以每个字体需要的字符的列表)。
在步骤320中,应用确定其是否访问以文件内容部分所需字体显示字符所需的字形。应用可以针对所需字体的每个字符(在310中确定)来搜索对其可用的字形。在某些实施方式,应用可以在若干位置搜索字形。例如,该应用可以在安装在客户端设备上的字体文件集中搜索定义了所需字体的文件。其还可以搜索包含用于嵌入字体或字体子集的内容的文件。如下文所述,该应用还可以搜索已经由该应用或其他应用创建了的字体数据结构。应用标识对其而言当前不可用的字形。经标识的字形少于由字体定义的全部字形集合。如果应用确定需要由字体定义的所有字形,则应用需要全部字体定义文件并且无需创建没有的字体动态子集。在步骤330中,为了请求所需的字形,应用生成包含了在步骤320中确定的字形标识的消息。在某些实施方式中,消息可以包含除了字形标识之外的信息。附加信息可以包括应用、客户端设备、内容文件、内容文件的提供者、主管内容文件提供者的域的网络或者内容文件的作者中一个或多个的标识。在步骤340,向可以提供所需字形的远程服务器发送该消息。该消息发往的远程服务器可以通过若干方式中的一个来确定。在某些实施方式中,客户端设备可以配置用于向特定远程服务器发送标识了所需字形的消息。在其他实施方式中,显示内容的应用程序可以配置用于向特定远程服务器发送请求。在其他实施方式中,包含内容的文件可以指定远程服务器,或者该文件可以标识内容提供者或内容作者,并且应用可以基于提供者或作者信息选择远程服务器。本领域技术人员容易理解,远程服务器可以使用这些方法的组合来确定。例如,应用可以配置用于针对没有指定远程服务器的内容文件使用特定远程服务器。
在步骤350中,响应于在步骤340发送的消息,应用从远程服务器接收字形。接收的字形包括步骤320中确定需要的并在步骤330生成的消息中标识的字形。如先前所述,接收到的字形将少于字体中定义的所有字形。在某些实施方式中,应用可以从除340中消息发往的远程服务器之外的远程服务器接收字形。例如,字体的供应者可以使用一个服务器接收传入的请求消息,同时使用各种其他服务器存储并供应特定字体。在另一实施方式中,可以向由内容文件的提供者操作的服务器发送该请求,并且该提供者可以安排以在来自于由字体供应者操作的服务器的消息中传递字形。
在某些实施方式中,应用可以使用在步骤350中接收到的字形来填充字体数据结构的至少一部分。字体数据结构包含设备用于显示字体中所定义字形的信息。此信息可以包括关于一般字体的信息(例如,字体度量)、用于绘制字形轮廓的指令以及关于个体字形的附加信息(例如,字形边界框的尺寸或填充字形轮廓两侧之一的空间)。字体数据结构可以包含由特定字体定义的所有字形;可以不包含任何由该字体定义的字形;或者可以包含由该字体定义的某些字形而不是所有字形。用于特定字形的数据可以采用多种形式中的一个或多个。字形可以根据数学表达式进行描述。例如,在PostScript Type 1及相关字体中,字形可以利用立方Bézier曲线来描述。在TrueType字体中,字形可以利用二次曲线来描述。在其他字体系统中,字形可以由一个或多个大小的位图来表示。
字体数据结构还可以包含关于该字体数据结构本身的结构信息(例如,指示特定字形的信息位于字体数据结构中位置的映射)。不包含任何字体中定义的字形的字体数据结构仍可以包含关于该字体数据结构本身的结构信息。字体数据结构的定义提供了信息,从而允许应用创建空或外壳的字体数据结构。空字体数据结构不包含字形,但是其具有任何允许添加字形以及允许针对字形搜索数据结构任何所需的内部结构。在某些实施方式中,字体数据结构的定义可以另外包含少于字体中定义的所有字形的一个或多个字形。字体数据结构可以但不是必须存储在附属于客户端设备的磁盘驱动上的文件中。字体数据结构可以备选地存储在通过网络可访问的存储中;可拆卸存储介质上(例如,USB拇指驱动);或者易失性存储器(例如,RAM存储器)或非易失性存储器(例如,闪存)中。在某些实施方式中,字体数据结构可以存储为特定应用存储器的一部分。字体数据结构可以包括文本数据(例如,使用ASCII字符)、二进制数据或者文本数据和二进制数据的组合。文本数据可以是人们容易阅读的文本形式,或者其可以是二进制数据的文本表示。字体数据结构可以是全部或部分加密的。
从多个请求中积累字形
在某些实施方式中,包括将接收到的字形存储到字体数据结构的附加步骤的、图3中所示的步骤可以由应用重复。应用可以针对内容文件的不同部分重复这些步骤,例如针对显示内容的个别页面或屏幕。应用还可以使用步骤310中不同文件的内容部分来重复这些步骤。不同文件可以来自相同或不同的内容提供者。步骤的重复可以发生在应用的一次或不止一次执行中。随后的重复可以将附加字形添加到字体数据结构。在将字体的字体数据结构存储到永久存储(例如,磁盘驱动器或闪存)中时,应用可以为字体积累当前可用字形。在某些实施方式中,客户端设备上的多个应用可以共享字体数据结构。多个应用的每一个应用可以使用字体数据结构来访问当前可用的字形,并且每个应用可以将从远程服务器接收到的字形存储到字体数据结构中。
在某些实施方式中,步骤340和步骤350的随后重复可以使用不同远程服务器来获得针对字体的字形。例如,两个不同的内容文件可以指定不同的服务器,从中获得来自相同字体的字形。从不同远程服务器接收的相同字体的字形可以用于填充该字体的单个字体数据结构。随后重复可以由单个应用在该应用的一次或多次执行中来执行,或者重复可以由多个应用来执行。
在某些实施方式中,字形可以通过除了从远程服务器接收的方式获得。例如,应用可以从包含了字体中定义的某些而不是所有字形的文件中获得字形。这种文件可以是具有嵌入字形的内容文件,或者不具有包含字体中字形子集的内容的文件。包含字形的文件可以通过各种方式获得,包括但不限于:通过网络从服务器下载,或者从CD-ROM或USB拇指驱动加载。从不同源获得的相同字体的字形可以在某些实施方式中用于填充针对该字体的单个字体数据结构。由不同应用从一个或多个服务器或其他源获得的字体中的字形可以用于填充针对该字体的单个字体数据结构。
图4是应用可以用来确定字形是否可用于应用(如图3步骤320)的步骤的实施方式的流程图。文件的内容部分可能需要不止一个字体。在步骤410中,从由文件所需字体间选择一个字体进行检验。在步骤420中,应用确定字体数据结构是否可用于该字体。当应用确定针对特定字体的字体数据结构不可用于该应用时,该应用可以采取步骤使得字体数据结构在继续之前可用,如步骤430。图5中示出了使得字体数据结构可用的步骤的一个实施方式并且在下面进行了描述。在其他实施方式中,应用可以采取除了使得字体数据结构可用之外的动作。在各种实施方式中,其他动作可以包括:通知用户字体数据结构不可用;使用替代字体显示需要字体的字符;不显示需要字体的字符;或者不显示文件的内容部分。
在步骤440中,应用已经确定了针对字体的字体数据结构可用,并且在特定字体中针对对应于文件内容部分所需字符(如步骤310中所确定的)的字形来搜索字体数据结构。在步骤450中,应用记录针对字体数据结构缺失的所需字形的标识信息(例如,标号字符码和字体的名称)。该标识信息可以用于消息的生成以向远程服务器请求字形(如步骤330)。
在各种实施方式中,可以重复图4中的步骤来标识多个字体中的字形。例如,早先描述的文字处理文档除了“Kigali Std Roman”还可能需要自定义字体“ContentProviderCustomFont(内容提供者自定义字体)”。在某些实施方式中,可以组合步骤450中针对若干字体记录的标识信息。步骤还可以针对特定字体进行重复。例如,步骤可以由应用重复以便显示文件的另一内容部分(例如,内容文件的另一页面或屏幕)或者显示另一文件的内容部分。在文件的内容部分改变时(例如在对文件的编辑操作期间)可以重复该步骤。步骤450中记录的标识信息可以附加到在先前重复期间记录的信息或者来自多个重复的信息可以分别记录。
图5示出了当针对所需字体没有字体数据结构可用时应用可以采取以创建字体数据结构的步骤的实施方式,如图4的步骤430。在步骤510中,在已经确定没有字体数据结构可用于内容文件所需的字体之后,应用可以生成请求字体数据结构定义的消息。在某些实施方式中,消息可以包含字体的名称(例如,上文示例中的“ContentProviderCustomFont”)。在其他实施方式中,消息除了或替代字体名称还可以包含字体的另一标识。例如,这种标识可以是内容提供者在内容文档中提供的任意标识符(例如,字符“ABC 123”或数值123456的序列)。在某些实施方式中,除了标识字体,请求还可以包含与客户端设备相关联的附加信息(例如,客户端设备的序列号、其上执行应用的操作系统的标识或者应用本身的版本号)。在某些实施方式中,消息可以由模块(诸如,图2中的通信模块230)进行格式化来与远程服务器通信。在步骤520中,确定了远程服务器并且向该远程服务器发送生成的消息。该消息发往的远程服务器可以由上文所述用于确定请求字形的消息所发往的远程服务器的任意方法来确定。步骤520中用于确定远程服务器的方法不需要与步骤340中用于确定远程服务器的方法相同。在各种实施方式中,可以向相同远程服务器或不同远程服务器发送请求字形的消息和请求字体数据结构定义的消息。例如,在某些实施方式中,内容文件可以指定用于获得字形的服务器,同时应用可以编程用于从信任的字体提供者的服务器获得字体数据结构。
在步骤530中,响应于步骤520中发送的请求消息,从远程服务器接收包含字体数据结构定义的回复消息。在某些实施方式中,提供回复消息的远程服务器可以是与请求消息发往的服务器不同的服务器。例如,字体提供者可以指明用于接收请求的单个服务器并且保持用于提供关于特定字体的信息的单独字体服务器。接收请求的单个服务器可以向针对特定字体的字体服务器转发对特定字体的请求。在各种实施方式中,由远程服务器提供的定义信息可以采取不同形式。在一个实施方式中,定义可以包括多个数据块中的数据以及指定该数据块在字体数据结构中位置的对应位置信息。应用可以根据位置信息将块写入存储用于创建字体数据结构。在另一实施方式中,定义可以包括包含在单个数据块中的字体数据结构。在步骤540中,应用使用由远程服务器提供的定义来创建字体数据结构。在某些实施方式中,使用530中接收到的、定义在540中创建的字体数据结构不包含字形。在另一实施方式中,新创建的字体数据结构包含该字体定义的某些而不是所有字形。
请求字体数据结构的定义以及接收针对字体数据结构的定义可以通过除了图5中所示步骤的方式来实现。在某些实施方式中,应用可以生成针对字体的字体数据结构定义的请求,并且将其包括在针对来自字体的字形的请求消息中,如步骤340。以这种方式请求的字体数据结构可以在如步骤350中还包含字形的消息中接收,或者该字体数据结构定义可以在单独消息中接收。在某些实施方式中,应用可以从除了远程服务器的源获取针对字体的字体数据结构。在某些实施方式中,字体数据结构可能已经由应用的先前执行创建了。在其他实施方式中,字体数据结构可以通过明确的用户动作获得(例如,从字体提供者、通过web页面或其他适当的方式下载字体数据结构)或者从存储介质(诸如,CD、DVD或USB拇指驱动)获得。在某些实施方式中,字体数据结构可以由例如设备制造者安装到客户端设备上,以便供在该设备上运行的应用使用。
字体服务器
图6示出了实现字体子集动态流式传输的服务器上字体管理器应用的示例实现(例如,图1中所示的在远程服务器140上执行的字体管理器应用160)。图6中的字体管理器应用600在服务器计算机上执行,从而从在客户端设备上执行的应用接收针对字体的字形的请求。在某些实施方式中,客户端设备上的应用可以生成针对字形的请求来响应于用于显示来自于文件的内容的用户请求。响应于接收针对一个或多个字形的请求,字体管理器应用600解析该请求以确定所请求的字形、从字体存储640中检索针对所请求字形的字形信息、生成包含所请求字形(但是少于字体中定义的所有字形)的回复消息、以及向客户端设备上的请求应用发送包含该字形的回复消息。如图6中所示,字体管理器应用600包括通信模块610、字体分发模块620和授权模块630。通信模块610通常通过网络从远程客户端设备上的应用接收针对字形的请求,并且向字体分发模块620传送请求。在某些实施方式中,通信模块610可以从在客户端设备上执行的应用接收针对字体数据结构定义的请求。在某些实施方式中,针对字体数据结构定义的请求将在应用首次需要以特定字体显示字形时由客户端设备上的应用进行发送。通信模块610向字体分发模块620传送针对字体数据结构的请求。通信模块610从字体分发模块620接收字形信息。在某些实施方式中,通信模块610从字体分发模块620接收字体数据结构的定义。在某些实施方式中,通信模块610将字形和字体数据结构的定义格式化成适于通过网络传输的回复消息,并且向在远程客户端设备上执行的应用发送该消息。在某些实施方式中,通信模块610可以向代表授权模块630的授权服务器发送消息并从其接收消息。
字体分发模块620通过通信模块610从在远程客户端设备上执行的应用程序接收针对字体字形的请求。在某些实施方式中,字体分发模块620解析请求以便确定请求的字形。由应用程序请求的字形可以少于字体中定义的所有字形。在某些实施方式中,对字体中定义的所有字形的请求可以导致字体分发模块620提供全部字体定义文件。为了满足针对一个或多个字形(少于字体中定义的所有字形)的请求,字体分发模块620访问字体存储640上的字体数据存储来获得字形信息。字体分发模块620从字体存储640提取请求的字形,并且格式化该请求的字形来由远程客户端设备上的应用使用。在某些实施方式中,如本领域所知字体存储640可以包含适于安装在客户端设备上的完整字体定义文件。在这种实施方式中,字体分发模块620可以提取对应于所请求字形的部分字体定义文件,并且向远程应用提供该部分。在其他实施方式中,字体存储640可以包含除了字体定义文件之外格式的字形。例如,字体存储640上的字体数据存储可以使用数据库软件来实现。(例如,关系数据库系统诸如mySQL)。在某些实施方式中,字体存储640可以包含字体中定义的某些而不是所有字形。例如,字体存储640可以实现为经配置的分发数据库系统中的一个节点,使得多个存储节点的每一个都存储字体中定义的部分字形。字体分发模块620向通信模块610提供经格式化的字形用于格式化成消息并且向远程客户端设备上的应用传输。在某些实施方式中,字体分发模块620可以通过通信模块610从远程应用接收针对字体数据结构定义的请求。在某些实施方式中,远程应用可以生成针对字体数据结构定义的请求以响应于显示文档的用户请求。在某些实施方式中,字体分发模块620可以分析字体存储640中包含的数据来创建针对字体数据结构的定义。可以向通信模块提供该定义用于格式化成消息并且向远程应用传输。
在某些实施方式中,授权模块630可以用于确定字体分发模块620是否应当满足由通信模块610接收到的请求。验证模块630可以检验请求中包含的信息来做关于满足请求的决定。在某些实施方式中,授权模块630可能使用的包含在请求消息中的信息包括:请求的特定字体或字形、在发送请求的客户端设备上执行的应用的标识、由客户端从中获得文档的网络域的标识以及对于可用于应用的文档的内容提供者的标识。附加信息(例如,经授权应用或内容提供者的列表)可以由授权模块630用于做出确定。就图1继续早先给出的示例,授权模块630可以检验请求消息,该请求消息将Widget Research Company标识为文档的内容提供者,该文档指定将以字体“Kigali Std Roman”显示的字符。授权模块630可以查阅内容提供者和特定内容提供者可能使用的字体的列表。在此示例中,内容提供者列表可以将WidgetResearch Company显示为字体“Kigali Std Roman”的授权用户,并且授权模块630可以通知字体分发模块620来生成回复消息以响应请求。如果内容提供者列表未能包括Widget Research Company,那么授权模块630可以通知分发模块620忽略请求。在某些实施方式中,授权模块630可以通过通信模块610与其他应用或系统进行通信来获取信息以做出确定。例如,与字体匹配的内容提供者的列表可以在另一服务器上维持,该服务器可通过网络访问而不是在应用600中访问。
对于本领域技术人员易于理解,除了图6中所示架构之外的、用于字体管理器应用600的架构可以用于实现字体子集的动态流式传输。其他架构可以通过以其他方式划分图6中所示模块的功能或者通过以模块的各种配置将功能与字体管理器应用600的其他功能组合来实践本发明。
图7示出了服务器应用(如图6中所示)可以用来动态流式传输字体子集的步骤的实施方式。在步骤710中,服务器应用接收针对字体中一个或多个字形的请求消息。请求消息可以通过各种方式接收。通常,该请求消息将通过网络(例如,通过通信模块610)从在远程客户端设备上执行的应用程序中接收。在某些实施方式中,远程应用生成请求以响应显示内容(诸如,文档或web页面)的用户请求。在某些实施方式中,服务器解析请求消息来确定该请求消息中标识的一个或多个字形。请求的字形可以少于字体中的所有字形。在某些实施方式中,针对字体所有字形的请求可以通过发送全部字体定义文件来满足。在步骤720中,服务器应用确定请求有效以及应当满足的针对字形的请求。确定请求有效可以包括验证请求的字形由字体定义,以及字体本身是服务器可以提供的字体。可能接收服务器不能提供的字形的请求例如是因为:例如,需要的是在特定字体中没有定义的字符的不正确格式文档,或者配置用于向不能提供所需字体的服务器发送请求消息的远程应用(例如,图1中的应用110)。在一个实施方式中,服务器可以提供请求字形的验证可以由应用的模块(诸如,图6中的字体分发模块620)来完成。在某些实施方式中,服务器可以向来自远程应用的、针对服务器不能提供的一个或多个字形的请求回复消息,该消息指示服务器应用接收到该请求但不能提供字形。在某些实施方式中,服务器应用可以进一步确定在客户端设备上执行的应用是否经授权以接收请求的字形(例如,利用诸如图6中所示的授权模块630的模块)。在某些实施方式中,确定应用是否经授权可以包括检验包含在请求消息中的信息。这种信息可以包括以下标识:客户端设备、做出请求的应用、包含对应于请求字形的字符的内容文件、内容提供者或内容作者。服务器应用可以使用没有包含在请求消息中的附加信息来确定请求是否应当被满足。例如,服务器应用可以查阅标识可用字体的数据库以响应于标识特定内容提供者的请求。服务器应用可以与一个或多个其他服务器通信来确定应用是否经授权来接收请求的字形。
在步骤730中,服务器应用(例如,使用如图6中所示的字体分发模块620)分析通常驻留在服务器可访问的存储(例如,字体存储640)上的字体信息来提取请求的字形。在某些实施方式中,代表字形的数据从字体分发文件中进行读取。其他实施方式可以使用数据库系统(例如,关系数据库系统诸如mySQL)或者使用本领域已知的用于组织和存储数据的任何其他适当装置来存储字形数据。所提取的字形可能不是对于请求远程应用立即有用的形式,因此在某些实施方式中字形可以针对请求远程应用的使用进行格式化。在某些实施方式中,格式化字形可以包括将每个字形置于数据块中,并且在字体数据结构中确定针对字体的偏移量,在该偏移量处,数据块必须由请求应用写入。在其他实施方式中,可以在单个数据块中发送字形。在某些实施方式中,附加信息可以包括在经格式化的信息中(例如,用于修改包含在字体数据结构中的结构化信息的指令)。在步骤740中,将格式化的字形格式化成适于传输的消息,并且向请求应用进行发送(例如,通过诸如通信模块610的模块)。
在某些实施方式中,步骤710中接收到的针对字形的请求消息可以包含对来自于不止一个字体的字形的请求。某些或所有步骤720和步骤730可以针对请求消息中定义的每个字体进行重复。字形可以在步骤740以单个消息向请求远程应用发送,或者可以重复步骤740来以多个回复消息发送字形。在某些实施方式中,单个字体中的字形可以以多个回复消息进行发送。例如,可以将包含了大量复杂字形的回复分成多个较小消息。在某些实施方式中,图7中所示的步骤可以使用多个服务器来执行。例如,710中的所有请求可以被指引到第一服务器。该第一服务器可以向多个回复服务器之一分派请求,并且经分派的回复服务器继而可以向请求远程应用提供字形。在某些实施方式中,第一服务器可以向针对请求消息中标识的特定字体的回复服务器或者向地理上靠近该远程应用的回复服务器分派请求。在某些实施方式中,单个请求可以被分派到多个服务器,并且多个服务器中的每个服务器可以回复从而提供请求字形的不同字形。本领域技术人员应当理解,除了这里所提供的示例,回复请求消息的服务器的其他配置是可能的。
图8示出了服务器应用可以用来提供字体数据结构定义的步骤的实施方式。如图5中所示步骤,针对字体数据结构定义的请求可以从远程应用接收,该远程应用以其之前从未使用的字体显示内容。在步骤810中,服务器应用从远程客户端应用接收针对字体数据结构定义的请求。该请求可以通过各种方式进行接收。通常,该请求将包含在通过网络(例如,通过诸如图6中所示通信模块630的模块)接收的消息中。在某些实施方式中,该请求可以是由服务器应用接收到的单独消息,而在其他实施方式中,该请求可以在包含了其他元素(例如,针对字体中字形的请求)的消息中接收。在步骤820中,服务器应用生成包含字体数据结构定义的消息。在某些实施方式中,模块(诸如字体分发模块620)可以生成用于创建字体数据结构的指令。在某些实施方式中,应用可以具有可用于一个或多个字体的预定义字体数据结构定义。在其他实施方式中,应用可以分析服务器可访问的字体数据(例如,存储在如图6的字体存储640中的字体定义文件或数据库),从而创建字体数据结构定义以响应特定请求。通常,使用字体数据结构定义创建的字体数据结构将为空(即,将不包含任何字形),然而在某些实施方式中,新创建的字体数据结构将具有少于字体中定义的所有字形的字形。在步骤830中,应用针对传输格式化字体数据结构定义,并且将其发送到请求远程客户端应用。字体数据结构可以在不具有其他信息的消息中向请求远程客户端应用发送,或者该字体数据结构可以在包含其他数据(例如,字体中的字形)的消息中进行发送。
增量建立字体数据结构
当该一个或多个应用(例如,文字处理文档或web页面)需要字形来显示内容文件时,字体数据结构可以提供用于允许设备获取针对字体的字形的机制。此外,设备可以通过将字体数据结构存储到永久存储来存储获取的字形以供随后使用。如先前所讨论的,字体数据结构可以包含针对字体中定义的所有字形、针对字体中没有定义的任何字形或者针对字体中某些而不是全部字形的数据。存储在永久存储(例如,非易失性闪存、硬盘驱动器或电池备份RAM)中的字体数据结构可以允许客户端设备上的应用使用获取的字形来以内容文档指定的字体显示字符,从而用于显示指定相同字体的一个或多个字符的其他内容文档。显示其他内容文档的应用可以访问永久存储中的现有字体数据结构,并且使用存储在字体数据结构中的一个或多个字形。然而,其他内容文档可能需要字体数据结构中当前不可用的其他字形。这些其他字形可以在显示其他内容之前获得(例如,从远程服务器)。一旦获得了其他字形,应用可以使用这些字形来填充永久存储中的字体数据结构的附加部分。因此,其他字形变得可用于显示客户端设备上的其他内容文档。
在先前结合图1讨论的示例中,显示第一内容文档的设备访问了包含除了以“Kigali Std Roman”字体显示词语“Dynamic Subsets”所需的两个字符之外的所有字符的字体数据结构。针对字符“y”和“S”的字形从远程服务器获取。应用可以利用对应于“y”和“S”字符的字形来填充永久存储中的“Kigali Std Roman”字体数据结构,并且应用的随后执行能够显示词语“Dynamic Subsets”而不需要获取任何其他字形。扩展之前的示例,另一内容文档可以包含词语“Dynamic FontSubsets”并且指定以“Kigali Std Roman”字体显示字符。在某些实施方式中,其他内容文档可以通过用户在客户端设备上编辑第一内容文档来创建,或者通过用户创建包含词语“Dynamic Font Subsets”的新内容文档(例如,通过使用文字处理应用键入文本)来创建。应用的另一执行可以访问字体数据结构;分析其他内容文档;以及确定需要哪些字形但字体数据结构中当前不可用。在此示例中,词语“Dynamic”和“Subset”在其他内容文档中出现,如在第一内容文档中。其他内容文档还包含词语“Font”。对应于字母“n”和“t”的字形当前在字体数据结构中可用,因为它们是显示第一内容文档中的词语“Dynamic Subset”所需的。字符“F”和“o”不是显示第一内容文档所需的。在此示例中,它们没有呈现在字体数据结构中。应用可以使用例如先前所述的方式来获取对应于“F”和“o”字符的字形。在仅获取了对应于字符“F”和“o”的两个附加字形之后,就可以显示其他内容文档。
应用可以利用对应于“F”和“o”字符的字形来填充永久存储中的字体数据结构。需要使用“Kigali Std Roman”字体显示词语“Dynamic Font Subsets”的应用的进一步执行可以具有字体数据结构中当前可用的所有需要的字形并且无需获取任何其他字形。为了继续示例,应用可以以“Kigali Std Roman”字体显示使用词语“DynamicFont Subsets”中字符的其他内容而不需要获取其他字形。因为词语“Fun times”中的所有字符都出现在词语“Dynamic Font Subsets”中,所以在此示例中,应用可以利用永久存储中字体数据结构内当前可用的字形以“Kigali Std Roman”字体显示词语“Fun times”。经由通过这些方式重复获取字形,客户端设备上的一个或多个应用可以动态地建立特定于客户端设备的字形集合。在任何客户端设备上呈现的特定字形可以依赖于已经在客户端设备上显示的特定文档。
图9是示出了按照上文所述的、在永久存储中增量建立字体数据结构的实施方式的流程图。在步骤910中,设备接收在字体中定义的一个或多个字形。在一个实施方式中,应用可以执行图3中的步骤310到步骤340以响应于应用显示文件内容部分的用户请求,从而如在步骤350中从远程服务器接收字形。在其他实施方式中,设备可以使用接收字形的其他方式。例如,字形可以嵌入在内容文件中,并且接收字形可以包括从文件读取字形。在其他实施方式中,设备可以与显示内容文档异步地接收字形。例如,用户可以定位包含了字形子集(少于字体中定义的所有字形)的字体描述文件。这种字体描述文件可以本地存储或者可以通过网络获得。还在其他实施方式中,应用可以在本地存储上或通过网络搜索可能包含字形的文件或者其他资源。在某些实施方式中,应用或代表应用的其他模块可以执行这种搜索以响应于显示文档内容部分的用户请求。
在步骤920中,设备利用接收到的字形来填充永久存储中的字体数据结构的至少一部分。在某些实施方式中,用户可以指导设备利用字形来填充字体数据结构或者授权应用来填充字体数据结构。在其他实施方式中,应用可以填充字体数据结构而不需要用户干预。在某些实施方式中,字体数据结构可以按照图5中所示的步骤创建。在某些实施方式中,在步骤920的填充之前,字体数据结构可以包含字体的一个或多个字形。在其他实施方式中,在步骤920中利用字形填充字体数据结构之前,其将为空。填充字体数据结构的提取方法依赖于字体数据结构的实现细节以及所接收字形的格式。用于将接收的数据插入到数据结构中的各种技术对于本领域技术人员而言是公知的。
在步骤930中,代表应用确定显示文件内容部分所需的字形。在某些实施方式中,这可以响应于用户请求而完成。例如,用户可以请求文字处理应用显示文档文件或者web浏览器显示web页面(例如,HTML文件)。如上文所述,文件的内容部分可以包含字符并且文件可以指定将以特定字体显示的字符。为了以字体显示字符,针对对应于该字符的字体的字形必须可用。在某些实施方式中,应用可以分析文件来确定显示文件内容部分所需的字形。在其他实施方式中,该确定可以由代表应用的另一模块(例如,操作系统模块)来完成。
在步骤940中,访问永久存储中的字体数据结构。应用或代表应用的另一模块可以在字体数据结构中找到确定的字形,并且使用该字形来显示文件的内容部分,如步骤950。在某些实施方式中,由应用使用的一个或多个确定的字形可以是用于在步骤920中填充字体数据结构的字形。在步骤920中填充数据结构之前,所确定字形中的其他字形可能已经呈现在永久存储中的字体数据结构中。
在某些实施方式中,应用可能需要没有呈现在永久存储中字体数据结构中的其他字形,以便显示文件的内容部分。应用可以通过各种方式接收其他字形。例如,按照如图3中所示和上文所述的步骤320-350,应用可以发送标识其他字形的请求并且从远程服务器接收其他字形。在其他实施方式中,其他字形可以从文件(例如,包含了内容的文件)中接收。在某些实施方式中,应用或代表该应用的另一模块可以将其他字形存储到永久存储中的字体数据结构中。一旦存储在字体数据结构中,其他字形对于该应用或者其他应用可以用于显示内容文件。针对从多个源(例如,从不止一个远程服务器,或者从远程服务器和文件)获得的相同字体的字形可以存储到永久存储中的相同字体数据结构中。
在某些实施方式中,多个应用或代表该多个应用的其他模块可以顺序地或同时地访问永久存储中的字体数据结构。在某些实施方式中,多个应用或代表该多个应用的其他模块可以顺序地或同时地填充字体数据结构的各个部分。本领域技术人员已知的用于控制对数据结构或文件同时更新的技术可以用于防止对字体数据结构的同时访问相互干扰。在某些实施方式中,应用可以访问字体数据结构中的字形,该字体数据结构由另一应用、由代表另一应用的模块或者由不代表任何特定应用的模块存储。
在某些实施方式中,设备可以在永久存储中创建字体数据结构。例如,用户可以请求web浏览器显示web页面,该web页面可以指定将以新字体或者以设备从未使用过的较旧字体显示的字符。按照类似于图4中所示的那些步骤的设备例如可以确定(如在步骤420中)没有字体数据结构可用,并且可以通过创建一个字体数据结构使得结构可用(如在步骤430中)。设备继而可以利用字形来填充创建的字体数据结构并且对其进行访问,如图9中所示和上文所述的。在某些实施方式中,如图5所示,设备可以通过生成标识字体数据结构的消息、向远程服务器发送消息、以及从远程服务器接收字体数据结构的定义来创建字体数据结构。设备继而可以使用从远程服务器接收的定义来创建字体数据结构。在一个实施方式中,可以创建字体数据结构以响应于代表应用确定显示文档内容部分需要的针对特定字体的字形来,以及确定设备不具有针对特定字体的字体数据结构。
图10A、图10B和图10C示出了如图9所示的利用字形来填充字体数据结构的实施方式。在此图示中使用的字体数据结构具有必须出现的固定部分以及可以是完全不存在的、部分出现或完全出现的可变部分。在此示例中的固定部分可以包含关于字体数据结构布局的信息(例如,到数据结构内容的映射),并且该固定部分可以包含关于字体作为整体(例如,字体度量)的信息。可变部分包含关于个体字形的信息。这种结构只是用于说明的目的并不旨在限制。本领域技术人员应当理解符合本发明的其他字体数据结构配置是可能的。
图10A示出了空字体数据结构(即,不包含字形的字体数据结构)的实施方式。空字体数据结构可以由应用使用从远程服务器获得的定义信息来构造,如图5所示,或者该空字体数据结构可以通过上述其他方式获得。固定信息1010表示由字体数据结构定义提供的信息,并且在此实施方式中保持不变。如果利用字形将字体数据结构填满,则空部分1020表示该字体数据结构的完整范围。在某些实施方式中,空部分1020可以不占用永久存储,仅为添加的字形分配存储空间。在其他实施方式中,在创建空字体数据结构时,可以为全部空部分1020在永久存储中分派存储位置。
图10B示出了在已经添加了两个字形之后图10A的字体数据结构。例如,文字处理应用可能需要字形来以对应于所示字体数据结构的字体显示包含缩写“Ft”的文档文件。固定信息1010在此示例中保持不变。字体信息部分1030和1040(对应于字符“t”和“F”)已经由执行例如图9中所示步骤910、步骤920和步骤930的应用进行了添加。图10A中所示的空部分1020已经通过字形信息部分1030和1040的插入而分成了较小的空部分1020a、1020b和1020c。访问字体数据结构的应用可以具有用于确定特定字形是否存在的方式。在此图示中,字体中定义的每个字形在字体数据结构中具有预定的位置。如果字形在字体数据结构中是当前可用的,那么该字形将在预定的位置处可用。如果字形当前不可用,那么可以提供指示该字形不存在的方式。在某些实施方式中,可以在永久存储中分配空位置1020a、1020b和1020c,并且利用应用识别为指示字形不存在的独特图案进行填充。访问字形的尝试(如果有的话,将占用空部分1020a、1020b和1020c中的一个)返回独特图案,并且应用识别出该字形不存在。例如,可以利用具有值“0”的比特来填充空部分,而填充有字形信息的部分可以以值为“1”的比特开始。在其他实施方式中,在永久存储中可以不分配空部分1020a、1020b和1020c,并且访问字形的尝试(如果有的话,将占用空部分1020a、1020b和1020c中的一个)可以产生错误条件(例如,段违反异常),该错误条件可以向应用指示没有字形存在。
本领域技术人员应当理解,符合本发明的字体数据结构的其他实现可以提供其他方式来确定特定字形当前是否可用。在某些实施方式中,例如,字体数据结构可以包含指示特定字形存在或不存在的表格。该表格可以具有针对字体中每个字形的预定条目,并且在向字体数据结构添加字形时可以更新针对字形的表格条目。应用可以通过访问表格来确定字形是否存在于字体数据结构中。在某些实施方式中,字体数据结构还可以指示特定字形不可用。可以将特定字形标记为不可用,例如,在先前已经对该字形做出请求并且远程服务器已经指示该字形不可用时。在某些实施方式中,可以不向远程服务器请求标记为不可用的字形,从而避免了对不可用字形的重复请求。
图10C示出了在应用的另一执行(例如,文字处理应用接收以对应于字体数据结构的字体显示包含词语“Font”的另一文档文件、其他文件的用户请求)利用附加字形对图10B的字体数据结构进行了进一步填充之后的该字体数据结构。字形已经添加到字形信息部分1050和1060(对应于字符“n”和“o”),从而在字体数据结构中占用了连续的位置。图10B的空部分1020a已经被字形信息部分1050和1060部分地占用,留下空部分1020d和1020e。字形信息部分1030和1040(包含对应于字符“t”和“F”的字形),连同空部分1020b和1020c一起保持不变。
应用可以显示文件的内容部分而不向字体数据结构添加附加字形。应用可以确定所有需要的字形在字体数据结构中当前可用,以及应用不需要获得附加字形。例如,文字处理应用可以以对应于图10C中所示字体数据结构的字体显示词语“not”、“no”、“on”和“to”而不需要获得任何附加字形。随着一个或多个应用增量地向字体数据结构添加字形,越来越多的字形对于应用而言将是当前可用的,并且为了显示新内容文件可能需要添加更少的附加字形。
示例系统
这里所述的动态流式传输字体子集的实施方式可以在一个或多个计算机系统上执行,该计算机系统可以与各种其他设备交互。图11示出了一个这种计算机系统。所示的计算机系统可以实现客户端功能或服务器功能。在不同的实施方式中,计算机系统1100可以是各种类型设备中的任意设备,包括但不限于:个人计算机系统、桌面计算机、膝上型计算机、笔记本计算机或上网本计算机、大型计算机系统、手持计算机、工作站、网络计算机、照相机、机顶盒、移动设备、消费设备、视频游戏控制台、手持视频游戏设备、应用服务器、存储设备、外围设备(诸如,交换机、调制解调器、路由器)或者通常任何类型的计算或电子设备。
在所示的实施方式中,计算机系统1100包括一个或多个处理器1110,其通过输入/输出(I/O)接口1130耦合至系统存储器1120。计算机系统1100还包括耦合至I/O接口1130的网络接口1140,以及一个或多个输入/输出设备1150,诸如光标控制设备1160、键盘1170、显示器1180和存储设备1190。在某些实施方式中,可以想到,可以使用计算机系统1100的单个实例来实现这些实施方式,而在其他实施方式中,多个此类系统或者构成计算机系统1100的多个节点可以配置用于容纳实施方式的不同部分或者实例。例如,在一个实施方式中,某些元件可以通过计算机系统1100的一个或多个节点来实现,这些节点不同于实现其他元件的那些节点。
在各种实施方式中,计算机系统1100可以是包括一个处理器1110的单处理器系统,或者包括多个处理器1110(例如,2个、4个、8个或者其他适当数目)的多处理器系统。处理器1110可以是能够执行指令的任何适当的处理器。例如,在各种实施方式中,处理器1110可以是通用处理器或者嵌入式处理器,其实现多种指令集架构(ISA)中的任何一种,诸如x86、PowerPC、SPARC或者MIPS ISA或者任何其他适当的ISA。在多处理器系统中,每个处理器1110可以共同地(但不是必须)实现相同的ISA。
在某些实施方式中,至少一个处理器1110可以是图形处理单元。图形处理单元或GPU可以被当做针对个人计算机、工作站、游戏控制台或者其他计算或电子设备的专用图形渲染设备。现代GPU可以在操纵和显示计算机图形方面非常有效,并且它们的高并行结构可以使得它们对于大量复杂图形算法范围而言比典型的CPU更加有效。例如,图形处理器可以以下面的方式实现许多图形元操作,该方式是使得执行它们比利用主机中央处理单元(CPU)直接绘制到屏幕要快得多。在各种实施方式中,这里公开的图像处理方法可以(至少部分)由配置用于在一个这种GPU上执行或在两个或多个这种GPU上并行执行的程序指令来实现。GPU可以实现一个或多个应用程序接口(API),从而允许程序调用GPU的功能。适当的GPU可以从供货者(诸如,NVIDIA公司、ATI技术(AMD)等)获得。
系统存储器1120可以配置用于存储由处理器1110可访问的程序指令和/或数据。在各种实施方式中,系统存储器1120可以使用任何适当的存储器技术来实现,例如静态随机访问存储器(SRAM)、同步动态RAM(SDRAM)、非易失性/闪存类存储器或者任何其他类型的存储器。在所示的实施方式中,实现期望功能(诸如上文针对用于流式传输字体子集的模块的实施方式而描述的那些功能)的程序指令和数据被示为分别作为程序指令1125和数据存储1135而存储在系统存储器1120中。在其他实施方式中,可以基于与系统存储器1120或者计算机系统1100分离的、不同类型的计算机可访问介质或者类似介质来接收、发送或者存储程序指令和/或数据。一般而言,计算机可访问介质可以包括存储介质或者存储器介质,诸如磁性或光学介质,例如经由I/O接口1130耦合至计算机系统1100的盘或CD/DVD-ROM。经由计算机可访问介质存储的程序指令和数据可以通过传输介质或者信号来传输,这些传输介质或者信号诸如电信号、电磁信号或者数字信号,其可以经由诸如网络和/或无线链路的通信介质来传递,诸如可以经由网络接口1140来实现。
在一个实施方式中,I/O接口1130可以配置用于协调处理器1110、系统存储器1120以及设备中的任何外围设备(包括网络接口1140或者其他外围接口,诸如输入/输出设备1150)之间的I/O业务。在某些实施方式中,I/O接口1130可以执行任何所需的协议、定时或者其他数据变换,以便将数据信号从一个部件(例如,系统存储器1120)使用的格式转换为适于其他部件(例如,处理器1110)使用的格式。在某些实施方式中,I/O接口1130可以包括对通过各种类型的外围总线附接的设备的支持,其中外围总线例如外围部件互连(PCI)总线标准或者通用串行总线(USB)标准的变形。在某些实施方式中,I/O接口1130的功能可以划分到两个或者更多分离的部件中,诸如北桥和南桥。而且,在某些实施方式中,I/O接口1130的某些或者全部功能(诸如与系统存储器1120的接口)可以直接并入处理器1110。
网络接口1140可以配置用于允许在计算机系统1100与附接至网络的其他设备(诸如其他计算机系统)之间或者计算机系统700的节点之间交换数据。在各种实施方式中,网络接口1140可以支持经由有线的或者无线通用数据网络(例如,任何适当类型的以太网)、经由电信/电话网络(诸如,模拟语音网络或者数字光纤通信网络)、经由存储区域网络(诸如,光纤信道SAN)、或者经由任何其他适当类型的网络和/或协议进行通信。
在某些实施方式中,输入/输出设备1150包括一个或多个显示终端、键盘、小键盘、触摸板、扫描设备、语音或者光学识别设备或者适于由一个或多个计算机系统1100输入或者接收数据的任何其他设备。多个输入/输出设备1150可以存在计算机系统1100中,或者可以在计算机系统1100的各个节点上分布。在某些实施方式中,相似的输入/输出设备可以与计算机系统1100分离,并且可以通过有线或者无线连接(诸如通过网络接口1140)与计算机系统1100的一个或多个节点交互。
如图11所示,存储器1120可以包括程序指令1125和数据存储1135,其中程序指令1125配置用于实现在此描述的用于动态流式传输字体子集的模块的实施方式,而数据存储1135包括程序指令1125可访问的各种数据。在一个实施方式中,程序指令1125可以包括如图3、图4和图5中所示的用于动态流式传输字体子集的模块实施方式的软件元素。数据存储1135可以包括可在某些实施方式中使用的数据。在其他实施方式中,可以包括不同的软件元素和数据。
本领域技术人员应当理解,计算机系统1100仅仅是说明性的而不旨在限制如这里所述用于动态流式传输字体子集的模块的范围。具体地,计算机系统和设备可以包括能够执行经指示功能的硬件或软件的任何组合,包括计算机、个人计算机系统、桌面计算机、膝上型计算机、笔记本计算机或上网本计算机、大型计算机系统、手持计算机、工作站、网络计算机、照相机、机顶盒、移动设备、网络设备、因特网设备、PDA、无线电话、寻呼机、消费设备、视频游戏控制台、手持视频游戏设备、应用服务器、存储设备、外围设备(诸如,交换机、调制解调器、路由器)或者通常任何类型的计算或电子设备。计算机系统1100还可以与未示出的其他设备连接,或者可以操作为独立系统。另外,由所示部件提供的功能可以在某些实施方式中组合到较少部件中或者分布到附加部件中。类似地,在某些实施方式中,某些所示部件的功能可能没有提供和/或其他附加功能可能是可用的。
本领域技术人员还将理解,尽管各种项目被示为在使用时存储在存储器中或者存储设备上,但是这些项目或者其中的部分可以在存储器与其他存储设备之间传送,以用于存储器管理和数据完整性的目的。备选地,在其他实施方式中,某些或者全部软件组件可以在其他设备上的存储器中执行,并经由计算机间的通信与所示的计算机系统通信。某些或者全部系统组件或者数据结构还可以存储在(例如,作为指令或者结构化数据)将由适当的驱动读取的计算机可访问介质或者便携式产品中,已在上文描述了其中的各种示例。在某些实施方式中,存储在与计算机系统1100分离的计算机可访问介质上的指令可以经由传输介质或者信号而传输到计算机系统1100,其中传输介质或者信号例如由诸如网络和/或无线链路的通信介质承载的电信号、电磁信号或者数字信号。各种实施方式还可以包括接收、发送或者存储按照上文关于计算机可访问介质的描述而实现的指令和/或数据。因而,可以利用其他计算机系统配置来实施本发明。
总结
各种实施方式还可以包括接收、发送或者存储按照上文关于计算机可访问介质的描述而实现的指令和/或数据。一般而言,计算机可访问介质可以包括存储介质或者存储器介质,诸如磁性介质和光学介质,例如盘或者DVD/CD-ROM、易失性或者非易失性介质,诸如RAM(例如,SDRAM、DDR、RDRAM、SRAM等)、ROM等,以及由诸如网络和/或无线链路的通信介质承载的传输介质或者信号,诸如电信号、电磁信号或者数字信号。
附图中所示以及在此描述的各种方法表示方法的示例实施方式。该方法可以通过软件、硬件或其组合来实现。该方法的顺序可以改变,并且可以对各种元素进行添加、重排序、组合、省略和修改等。
对于受益于本公开的本领域技术人员而言显而易见的是,可以进行各种修改和改变。本发明意在涵盖所有这些修改和改变,因此应认为上文的描述是示意性的而不是限制性的。
Claims (20)
1.一种方法,包括:
由在计算机上执行的应用执行:
确定在文件中指定的将以特定字体显示的、所述文件的内容部分中的一个或多个字符;
确定字体的一个或多个字形对于所述应用而言当前不可用于以所述特定字体显示一个或多个确定的字符;
生成标识确定的一个或多个字形的消息,其中所述确定的一个或多个字形少于所述特定字体中定义的所有字形;
向远程服务器发送所述消息;以及
从所述远程服务器接收所述确定的一个或多个字形,其中接收的一个或多个字形少于所述特定字体中的所有字形。
2.根据权利要求1所述的方法,进一步包括:
响应于接收所述确定的一个或多个字形,利用所述接收的一个或多个字形来填充针对所述特定字体的字体数据结构的至少一部分。
3.根据权利要求2所述的方法,进一步包括:
确定在另一文件中指定的将以相同特定字体显示的、该另一文件的另一内容部分中的一个或多个其他字符;
确定字体的另外一个或多个字形对于所述应用而言当前不可用于以所述特定字体显示一个或多个其他确定的字符;
生成标识确定的其他一个或多个字形的另一消息,其中所述确定的其他一个或多个字形少于所述特定字体中定义的所有字形;
向所述远程服务器发送该另一消息;以及
从所述远程服务器接收所述确定的其他一个或多个字形,其中接收的其他一个或多个字形少于所述特定字体中的所有字形。
4.根据权利要求3所述的方法,进一步包括:
响应于接收所述确定的其他一个或多个字形,利用所述接收的其他一个或多个字形来填充针对所述特定字体的所述字体数据结构的至少一部分。
5.根据权利要求3所述的方法,其中确定字体的另外一个或多个字符对于所述应用而言当前不可用包括:确定针对可用于所述应用的所述特定字体的所述字体数据结构是否包含对应于所述一个或多个其他字符的字形。
6.根据权利要求2所述的方法,其中所述字体数据结构存储在永久存储中。
7.根据权利要求1所述的方法,其中所述消息包括针对所述特定字体的字体数据结构定义的请求,并且其中所述方法进一步包括:
接收针对所述特定字体的所述字体数据结构的定义;
创建针对所述特定字体的所述字体数据结构;以及
响应于接收所述确定的一个或多个字形,利用接收的一个或多个字形来填充针对所述特定字体的所述字体数据结构的至少一部分。
8.根据权利要求1所述的方法,进一步包括:
在发送所述消息之前,发送针对所述特定字体的字体数据结构定义的请求;
接收针对所述特定字体的所述字体数据结构的定义;
创建针对所述特定字体的所述字体数据结构;以及
响应于接收所述确定的一个或多个字形,利用所述接收的一个或多个字形来填充针对所述特定字体的所述字体数据结构至少一部分。
9.一种存储有程序指令的计算机可读存储介质,其中所述程序指令是计算机可执行的,用于实现:
确定在文件中指定的将以特定字体显示的、所述文件的内容部分中的一个或多个其他字符;
确定字体的一个或多个字形对于所述应用而言当前不可用于以所述特定字体显示一个或多个确定的字符;
生成标识确定的一个或多个字形的消息,其中所述确定的一个或多个字形少于所述特定字体中定义的所有字形;
向远程服务器发送所述消息;以及
从所述远程服务器接收所述确定的一个或多个字形,其中接收的一个或多个字形少于所述特定字体中的所有字形。
10.根据权利要求9所述的计算机可读存储介质,其中所述程序指令是计算机可执行的,用于实现:
响应于接收所述确定的一个或多个字形,利用所述接收的一个或多个字形来填充针对所述特定字体的字体数据结构的至少一部分。
11.根据权利要求10所述的计算机可读存储介质,其中所述程序指令是计算机可执行的,用于实现:
确定在另一文件中指定的将以相同特定字体显示的、该另一文件的另一内容部分中的一个或多个其他字符;
确定字体的另外一个或多个字形对于所述应用而言当前不可用于以所述特定字体显示一个或多个其他确定的字符;
生成标识确定的其他一个或多个字形的另一消息,其中所述确定的其他一个或多个字形少于所述特定字体中定义的所有字形;
向所述远程服务器发送该另一消息;以及
从所述远程服务器接收所述确定的其他一个或多个字形,其中接收的其他一个或多个字形少于所述特定字体中的所有字形。
12.根据权利要求11所述的计算机可读存储介质,其中所述字体数据结构存储在永久存储中,并且其中所述程序指令是计算机可执行的,用于实现:
响应于接收所述确定的其他一个或多个字形,利用接收的其他一个或多个字形来填充针对所述特定字体的所述字体数据结构的至少一部分。
13.根据权利要求11所述的计算机可读存储介质,其中确定字体的另外一个或多个字形对于所述应用而言当前不可用包括:确定针对可用于所述应用的所述特定字体的所述字体数据结构是否包含对应于所述一个或多个其他字符的字形。
14.根据权利要求9所述的计算机可读存储介质,其中所述程序指令是计算机可执行的,用于实现:
接收针对所述特定字体的所述字体数据结构的定义;
创建针对所述特定字体的所述字体数据结构;以及
响应于接收所述确定的一个或多个字形,利用所述接收的一个或多个字形来填充针对所述特定字体的所述字体数据结构的至少一部分。
15.根据权利要求9所述的计算机可读存储介质,其中所述程序指令是计算机可执行的,用于实现:
在发送所述消息之前,发送针对所述特定字体的字体数据结构定义的请求;
接收针对所述特定字体的所述字体数据结构的定义;
创建针对所述特定字体的所述字体数据结构;以及
响应于接收所述确定的一个或多个字形,利用所述接收的一个或多个字形来填充针对所述特定字体的所述字体数据结构的至少一部分。
16.一种方法,包括:
由计算机执行:
从远程应用接收标识特定字体的一个或多个字形的请求消息,其中所述一个或多个字形少于所述特定字体中定义的所有字形;
响应于接收所述请求消息:
解析所述请求消息以确定所述请求消息中标识的特定的一个或多个字形;
访问字体数据存储以获得标识的字形而不是全部字体;
生成包含所述一个或多个字形的回复消息,其中所述回复消息包含少于所述字体中定义的所有所述字形;以及
向所述远程应用发送所述回复消息。
17.根据权利要求16所述的方法,进一步包括:
从所述远程应用接收另一请求消息,所述另一请求消息请求针对所述特定字体的字体数据结构的定义;
响应于接收其他请求消息,生成另一回复消息,所述另一回复消息包含针对所述特定字体的所述字体数据结构的定义;以及
向所述远程应用发送其他回复。
18.根据权利要求16所述的方法,其中所述请求消息包括针对所述特定字体的字体数据结构定义的请求,以及其中所述方法进一步包括将针对所述特定字体的所述字体数据结构的定义包括在所述回复消息中。
19.根据权利要求16所述的方法,进一步包括:
在所述发送之前,确定对所述远程应用授权以接收所述一个或多个字形。
20.根据权利要求19所述的方法,其中所述请求消息包括内容提供者的标识,以及其中所述确定包括确定对所述内容提供者授权以提供指定要以所述特定字体显示字符的文件的内容部分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/622,201 US20110115797A1 (en) | 2009-11-19 | 2009-11-19 | Dynamic Streaming of Font Subsets |
US12/622,201 | 2009-11-19 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102148852A true CN102148852A (zh) | 2011-08-10 |
Family
ID=44010992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010509821XA Pending CN102148852A (zh) | 2009-11-19 | 2010-10-13 | 字体子集的动态流式传输 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20110115797A1 (zh) |
CN (1) | CN102148852A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279452A (zh) * | 2013-05-28 | 2013-09-04 | 珠海金山办公软件有限公司 | 一种在关联设备中匹配并传输字体文件的方法和系统 |
CN103312793A (zh) * | 2013-05-28 | 2013-09-18 | 珠海金山办公软件有限公司 | 一种跨设备提醒文件所缺失的字体信息的方法和系统 |
CN103425631A (zh) * | 2013-07-19 | 2013-12-04 | 百度在线网络技术(北京)有限公司 | 用于获取文档文件中目标文字的字体文件的方法及装置 |
CN103488616A (zh) * | 2012-06-11 | 2014-01-01 | 北大方正集团有限公司 | 一种内嵌字体处理方法与装置 |
CN110825461A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 数据处理方法和装置 |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10810355B1 (en) | 2001-07-16 | 2020-10-20 | Clantech, Inc. | Allowing operating system access to non-standard fonts in a network document |
US8522127B2 (en) | 2001-07-16 | 2013-08-27 | Robert G. Adamson, III | Allowing operating system access to non-standard fonts in a network document |
US9319444B2 (en) * | 2009-06-22 | 2016-04-19 | Monotype Imaging Inc. | Font data streaming |
EP2367118A1 (en) * | 2010-03-15 | 2011-09-21 | GMC Software AG | Method and devices for generating two-dimensional visual objects |
US8615709B2 (en) * | 2010-04-29 | 2013-12-24 | Monotype Imaging Inc. | Initiating font subsets |
US9164968B2 (en) * | 2011-07-26 | 2015-10-20 | Google Inc. | Techniques for server-side determination of font subsets |
US20130215126A1 (en) * | 2012-02-17 | 2013-08-22 | Monotype Imaging Inc. | Managing Font Distribution |
US9817615B2 (en) | 2012-12-03 | 2017-11-14 | Monotype Imaging Inc. | Network based font management for imaging devices |
US9569865B2 (en) | 2012-12-21 | 2017-02-14 | Monotype Imaging Inc. | Supporting color fonts |
WO2014110206A2 (en) | 2013-01-09 | 2014-07-17 | Monotype Imaging Inc. | Advanced text editor |
CN103970721B (zh) * | 2013-02-05 | 2016-08-03 | 腾讯科技(深圳)有限公司 | 文字内容显示方法、系统、移动终端及云端排版服务器 |
US20150074522A1 (en) * | 2013-09-12 | 2015-03-12 | Monotype Imaging Inc. | Font Management for Editing Electronic Documents |
US9317777B2 (en) | 2013-10-04 | 2016-04-19 | Monotype Imaging Inc. | Analyzing font similarity for presentation |
TW201530322A (zh) * | 2014-01-20 | 2015-08-01 | Arphic Technology Co Ltd | 字型處理方法及字型處理系統 |
US10055386B2 (en) | 2014-04-18 | 2018-08-21 | Emc Corporation | Using server side font preparation to achieve WYSIWYG and cross platform fidelity on web based word processor |
US20150332493A1 (en) * | 2014-05-16 | 2015-11-19 | Clantech, Inc. | Portable Typelet File |
US9691169B2 (en) | 2014-05-29 | 2017-06-27 | Monotype Imaging Inc. | Compact font hinting |
US9940744B2 (en) * | 2014-09-15 | 2018-04-10 | Microsoft Technology Licensing, Llc | Remote font management |
US10115215B2 (en) | 2015-04-17 | 2018-10-30 | Monotype Imaging Inc. | Pairing fonts for presentation |
US11537262B1 (en) | 2015-07-21 | 2022-12-27 | Monotype Imaging Inc. | Using attributes for font recommendations |
US10074042B2 (en) | 2015-10-06 | 2018-09-11 | Adobe Systems Incorporated | Font recognition using text localization |
US9875429B2 (en) | 2015-10-06 | 2018-01-23 | Adobe Systems Incorporated | Font attributes for font recognition and similarity |
US10347016B2 (en) * | 2016-01-12 | 2019-07-09 | Monotype Imaging Inc. | Converting font contour curves |
US10341319B2 (en) | 2016-02-17 | 2019-07-02 | Adobe Inc. | Utilizing a customized digital font to identify a computing device |
US10503811B2 (en) * | 2016-02-29 | 2019-12-10 | Adobe Inc. | Acquisition of a font portion using a compression mechanism |
US10007868B2 (en) * | 2016-09-19 | 2018-06-26 | Adobe Systems Incorporated | Font replacement based on visual similarity |
AU2016266083A1 (en) * | 2016-12-02 | 2018-06-21 | Canon Kabushiki Kaisha | Method, system and apparatus for displaying an electronic document |
US10417327B2 (en) * | 2016-12-30 | 2019-09-17 | Microsoft Technology Licensing, Llc | Interactive and dynamically animated 3D fonts |
US11334750B2 (en) | 2017-09-07 | 2022-05-17 | Monotype Imaging Inc. | Using attributes for predicting imagery performance |
US10909429B2 (en) | 2017-09-27 | 2021-02-02 | Monotype Imaging Inc. | Using attributes for identifying imagery for selection |
WO2019089578A1 (en) | 2017-10-30 | 2019-05-09 | Monotype Imaging Inc. | Font identification from imagery |
US10936792B2 (en) | 2017-12-21 | 2021-03-02 | Monotype Imaging Inc. | Harmonizing font contours |
US10950017B2 (en) | 2019-07-08 | 2021-03-16 | Adobe Inc. | Glyph weight modification |
US11295181B2 (en) | 2019-10-17 | 2022-04-05 | Adobe Inc. | Preserving document design using font synthesis |
CN110991147B (zh) * | 2019-12-19 | 2023-07-07 | 五八有限公司 | 一种字体检测方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6065008A (en) * | 1997-10-01 | 2000-05-16 | Microsoft Corporation | System and method for secure font subset distribution |
CN1661590A (zh) * | 2004-02-27 | 2005-08-31 | 捷讯研究有限公司 | 字体数据处理系统和方法 |
US20050275656A1 (en) * | 2004-06-15 | 2005-12-15 | Toby Corbin | Method and arrangement for font building |
CN1811751A (zh) * | 2005-01-28 | 2006-08-02 | 微软公司 | 字体高速缓存和元字体 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6313920B1 (en) * | 1998-08-17 | 2001-11-06 | Microsoft Corporation | System and method for remote printing using incremental font subsetting |
US7064757B1 (en) * | 1999-05-07 | 2006-06-20 | Apple Computer, Inc. | Automatic synthesis of font tables for character layout |
US6657625B1 (en) * | 1999-06-09 | 2003-12-02 | Microsoft Corporation | System and method of caching glyphs for display by a remote terminal |
US7155672B1 (en) * | 2000-05-23 | 2006-12-26 | Spyglass, Inc. | Method and system for dynamic font subsetting |
US7900143B2 (en) * | 2000-12-27 | 2011-03-01 | Intel Corporation | Large character set browser |
US7251365B2 (en) * | 2002-07-03 | 2007-07-31 | Vadim Fux | Scalable stroke font system and method |
US7580038B2 (en) * | 2003-09-30 | 2009-08-25 | Microsoft Corporation | System and method of caching glyphs for display by a remote terminal |
US8689101B2 (en) * | 2004-02-27 | 2014-04-01 | Blackberry Limited | Font data processing system and method |
US7359902B2 (en) * | 2004-04-30 | 2008-04-15 | Microsoft Corporation | Method and apparatus for maintaining relationships between parts in a package |
US8661332B2 (en) * | 2004-04-30 | 2014-02-25 | Microsoft Corporation | Method and apparatus for document processing |
US7481374B2 (en) * | 2005-06-08 | 2009-01-27 | Xerox Corporation | System and method for placement and retrieval of embedded information within a document |
US8040533B2 (en) * | 2006-01-06 | 2011-10-18 | Microsoft Corporation | Techniques for granular font subsetting for efficient document consumption |
CA2649721A1 (en) * | 2006-04-18 | 2007-10-25 | Geoffrey B. Pardo | Intraocular pressure attenuation device |
JP4888071B2 (ja) * | 2006-11-15 | 2012-02-29 | 富士通株式会社 | プログラム、コピーアンドペースト処理方法、装置及び記録媒体 |
US20130120396A1 (en) * | 2009-11-19 | 2013-05-16 | Gregory A. Kaplan | Incrementally Building A Font |
US8643652B2 (en) * | 2010-08-31 | 2014-02-04 | Adobe Systems Incorporated | Dynamic augmentation of extensible font subsets |
-
2009
- 2009-11-19 US US12/622,201 patent/US20110115797A1/en not_active Abandoned
-
2010
- 2010-10-13 CN CN201010509821XA patent/CN102148852A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6065008A (en) * | 1997-10-01 | 2000-05-16 | Microsoft Corporation | System and method for secure font subset distribution |
CN1661590A (zh) * | 2004-02-27 | 2005-08-31 | 捷讯研究有限公司 | 字体数据处理系统和方法 |
US20050275656A1 (en) * | 2004-06-15 | 2005-12-15 | Toby Corbin | Method and arrangement for font building |
CN1811751A (zh) * | 2005-01-28 | 2006-08-02 | 微软公司 | 字体高速缓存和元字体 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488616A (zh) * | 2012-06-11 | 2014-01-01 | 北大方正集团有限公司 | 一种内嵌字体处理方法与装置 |
CN103488616B (zh) * | 2012-06-11 | 2016-04-06 | 北大方正集团有限公司 | 一种内嵌字体处理方法与装置 |
CN103279452A (zh) * | 2013-05-28 | 2013-09-04 | 珠海金山办公软件有限公司 | 一种在关联设备中匹配并传输字体文件的方法和系统 |
CN103312793A (zh) * | 2013-05-28 | 2013-09-18 | 珠海金山办公软件有限公司 | 一种跨设备提醒文件所缺失的字体信息的方法和系统 |
CN103312793B (zh) * | 2013-05-28 | 2017-02-08 | 珠海金山办公软件有限公司 | 一种跨设备提醒文件所缺失的字体信息的方法和系统 |
CN103425631A (zh) * | 2013-07-19 | 2013-12-04 | 百度在线网络技术(北京)有限公司 | 用于获取文档文件中目标文字的字体文件的方法及装置 |
CN110825461A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 数据处理方法和装置 |
CN110825461B (zh) * | 2018-08-10 | 2024-01-05 | 北京百度网讯科技有限公司 | 数据处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US20110115797A1 (en) | 2011-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102148852A (zh) | 字体子集的动态流式传输 | |
CN101183355B (zh) | 复制和粘贴处理方法及装置 | |
US20130120396A1 (en) | Incrementally Building A Font | |
US8074167B2 (en) | Cross domain presence of web user interface and logic | |
Jackson et al. | Android apps for absolute beginners | |
US8209598B1 (en) | Exporting electronic documents from rich internet applications | |
CN1779782B (zh) | 用户界面设计装置和方法 | |
CN102439588A (zh) | 派送字体字形 | |
CN108140018A (zh) | 创作用于基于文本的文档的视觉表示 | |
CN106648569B (zh) | 目标序列化实现方法和装置 | |
CN102567094A (zh) | 标识多个资源实例的资源索引 | |
CN111324833A (zh) | 页面展示方法、装置、电子设计及计算机可读介质 | |
CN110688145B (zh) | Android MVP代码自动生成方法、装置、介质、电子设备 | |
CN111506300A (zh) | 一种小程序生成方法、装置、设备及存储介质 | |
KR101754258B1 (ko) | 마크업 언어 기반 문서에 대한 동시 편집 정합성 검증 장치 및 방법 | |
CN113158101A (zh) | 一种可视化页面渲染方法、装置、设备及存储介质 | |
CN104813312A (zh) | 使用基本文本框来对丰富内容进行有状态编辑 | |
CN108958731B (zh) | 一种应用程序界面生成方法、装置、设备和存储介质 | |
CN113110829A (zh) | 多ui组件库数据处理方法及装置 | |
JP5867540B2 (ja) | プログラム生成装置、プログラム生成装置の制御方法、およびプログラム | |
CN102215252B (zh) | 用于实现瘦客户机的四层体系结构 | |
KR20140098929A (ko) | 사용자 지향적 개인 출판물 저작 도구를 이용하는 웹 기반의 온라인 전자책 출판 방법 및 웹 기반의 온라인 전자책 출판 시스템 | |
JP2011233104A (ja) | 情報処理システム、情報処理装置、情報処理方法、プログラム、記録媒体 | |
US11119975B2 (en) | Digital design application plugin for content updates and delivery | |
CN106227713B (zh) | 文档的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110810 |