平板电脑操作系统的低级文本引擎

问题描述:

背景:我开发了用于查看复杂布局要求(复杂脚注,表格,图像,非标准字符集等)的专业学术内容的软件。在桌面版本中,这是通过WPF低级别的TextFormatter,并且在Web应用程序中,这是通过Flash的FTE(不是TLF,而是底层引擎)完成的。这两个都是低级别的引擎,可以生成指定宽度和格式的文本行,然后可以将它们排列成页面。平板电脑操作系统的低级文本引擎

我们希望将应用程序移植到iPad和Android平板电脑上。目前我们倾向于使用AIR for Android/Packager for iPhone重新使用我们现有的as3代码库。但是,我们想要探索在每个平台上进行本地化的选项。

我的问题是:iOS和Android提供能够相当低级别的文本引擎:

  1. 线在不同的宽度打破
  2. 双向文本
  3. 字距,连字等
  4. 多种嵌入字体
  5. 内联和浮动图像
  6. 文本选择/突出显示
  7. 还有什么必要产生复杂的布局

假设这不是由本地的API提供的(至少从看在Android SDK中这似乎是这种情况),是否有任何可用的第三方框架对于这些做以上所有的平台?

在iOS中,有CoreText框架。 (用C语言提供)我认为这非常适合你。 这里是参考文件。 http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html


苹果拥有最强的印刷技术为如Adobe的一个。据我所知,他们的技术不兼容。 (除了字体和PDF)CoreText具有与Adobe的大多数功能类似的功能,但行为略有不同。所以你必须再次调整所有布局值。

我不确定您列出的所有功能是否受支持。

  • 行间距,
  • 字距调整,
  • 各种字体,
  • 嵌入对象(如图片)的布局,
  • 和等

在CoreText框架的初始释放支持为iOS。我不确定其他功能,如结扎,双向流动。 (因为我没有测试过)关于选择,我检查了其他框架中提供的相关功能,但我没有使用它。

在CoreText的初始版本中存在一些问题。(1)Aligning multiple sized text vertical center instead of baseline with Core Text in iOS(2)Core Text: Render to an Odd Shape

CoreText最初是一个Mac OS X框架。它正逐渐被移植到iOS。我没有在Mac上使用CoreText,但是当我查看文档时,它有更多的功能。我预计大多数功能将被移植。苹果目前正积极地移植许多Mac功能。

我已经使用Flash(字体中没有深入的级别),我对Apple的框架感到满意。我相信你不会失望的。如你所知,苹果是电脑印刷时代的开创者之一。 (另一个是Adobe :)


该框架看起来有点硬核,但它很容易使用比看起来。它可以按原样绘制NSAttributedString(富文本对象),并且您只需制作一个NSAttributedString实例并使用CoreText绘制该实例即可。

例如,如果您已正确配置NSAttributedString,此代码将绘制特定矩形区域中的每个富文本。

// In an UIView subclass. 
- (void)drawRect:(CGRect)rect 
{ 
    NSAttributedString* AS = [self text]; // Assumes this property exist. 
    CGContextRef  CTX = UIGraphicsGetCurrentContext(); 
    CGMutablePathRef P = CGPathCreateMutable(); 
    CGRect    R = rect; 
    CGPathAddRect(P, NULL, R); 

    CTFramesetterRef FS = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)AS); 
    CTFrameRef   F = CTFramesetterCreateFrame(FS, CFRangeMake(0, 0), P, NULL); 

    CTFrameDraw(F, CTX); 

    CFRelease(FS);  
    CGPathRelease(P); 

当然绘制的图形将被翻转,除非您在某处调用此代码。

[[self layer] setGeometryFlipped:YES]; 

如果您发现本机的排版/布局框架的替代方案,有两种选择。

  1. HTML + CSS
  2. FreeType库

HTML与UIWebView可以是一个。看看CSS3及更高版本。有很多功能比人们普遍期望的要多。但是,HTML和UIWebView比CoreText要重并且慢很多。我可以在UITableViewCell中使用CoreText绘图,而不需要在滚动动画上挣扎。

freetype库是极低级别的字体库。它提供了最低级别的直接访问字体数据和渲染设施的抗锯齿功能。由于它是低级别的,你应该自己实现布局逻辑。我不太了解这个图书馆。


我不了解Android。