2011-02-24 95 views
3

背景:我開發了用於查看複雜佈局要求(複雜腳註,表格,圖像,非標準字符集等)的專業學術內容的軟件。在桌面版本中,這是通過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中這似乎是這種情況),是否有任何可用的第三方框架對於這些做以上所有的平臺?

回答

2

在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。