平板电脑操作系统的低级文本引擎
背景:我开发了用于查看复杂布局要求(复杂脚注,表格,图像,非标准字符集等)的专业学术内容的软件。在桌面版本中,这是通过WPF低级别的TextFormatter,并且在Web应用程序中,这是通过Flash的FTE(不是TLF,而是底层引擎)完成的。这两个都是低级别的引擎,可以生成指定宽度和格式的文本行,然后可以将它们排列成页面。平板电脑操作系统的低级文本引擎
我们希望将应用程序移植到iPad和Android平板电脑上。目前我们倾向于使用AIR for Android/Packager for iPhone重新使用我们现有的as3代码库。但是,我们想要探索在每个平台上进行本地化的选项。
我的问题是:iOS和Android提供能够相当低级别的文本引擎:
- 线在不同的宽度打破
- 双向文本
- 字距,连字等
- 多种嵌入字体
- 内联和浮动图像
- 文本选择/突出显示
- 还有什么必要产生复杂的布局
假设这不是由本地的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];
如果您发现本机的排版/布局框架的替代方案,有两种选择。
- HTML + CSS
- FreeType库
HTML与UIWebView
可以是一个。看看CSS3及更高版本。有很多功能比人们普遍期望的要多。但是,HTML和UIWebView
比CoreText要重并且慢很多。我可以在UITableViewCell
中使用CoreText绘图,而不需要在滚动动画上挣扎。
freetype库是极低级别的字体库。它提供了最低级别的直接访问字体数据和渲染设施的抗锯齿功能。由于它是低级别的,你应该自己实现布局逻辑。我不太了解这个图书馆。
我不了解Android。