iPhone ePub 阅读器更改 ePub 书中所有页面的字体而不是当前的 webview 内容

Posted

技术标签:

【中文标题】iPhone ePub 阅读器更改 ePub 书中所有页面的字体而不是当前的 webview 内容【英文标题】:iPhone ePub Reader Change font of all pages in ePub book not current webview contents 【发布时间】:2013-07-03 03:39:22 【问题描述】:

我正在开发像 ibook 应用程序这样的 iphone 应用程序。我加载了在解析 UIWebView 中的 epub 文件后得到的 XML 文件的内容。我更改了 UIWebView.I 的字体大小和字体系列内容想要更改 ePub book 中所有页面的字体大小和字体系列。如何存储 UIWebView 的设置,以便将其应用于 EPub book 中的所有页面。 这是我如何更改 weview 字体的代码。

NSString *yourhtmlSourceCodeString = [App_delegate.webView stringByEvaluatingjavascriptFromString:@"document.body.innerHTML"];

[App_delegate.webView loadHTMLString:[NSString stringWithFormat:@"<div style=' font-family:Times New Roman;'>%@",yourHTMLSourceCodeString] baseURL:nil];

【问题讨论】:

【参考方案1】:

检查这个项目https://github.com/fedefrappi/AePubReader。您可以简单地将 fontName 和 fontSize 值存储在 NSUserDefaults 中,并在 webView 委托方法 webViewDidFinishLoad 中添加 CSS 规则:

- (void)webViewDidFinishLoad:(UIWebView *)theWebView

    NSString *fontName = [[NSUserDefault standartUserDefaults] objectForKey:@"fontName"];
    NSNumber *currentTextSize = [[NSUserDefault standartUserDefaults] objectForKey:@"currentTextSize"];

    NSString *varMySheet = @"var mySheet = document.styleSheets[0];";

    NSString *addCs-s-rule =  @"function addCs-s-rule(selector, newRule) "
    "if (mySheet.addRule) "
    "mySheet.addRule(selector, newRule);"                               // For Internet Explorer
    " else "
    "ruleIndex = mySheet.cssRules.length;"
    "mySheet.insertRule(selector + '' + newRule + ';', ruleIndex);"   // For Firefox, Chrome, etc.
    ""
    "";


    NSString *setTextSizeRule = [NSString stringWithFormat:@"addCs-s-rule('body', '-webkit-text-size-adjust: %d%%;')", [currentTextSize floatValue]];
    NSString *setFont = [NSString stringWithFormat:@"addCs-s-rule('body', 'font-family:%@;')", fontName];


    [theWebView stringByEvaluatingJavaScriptFromString:varMySheet];

    [theWebView stringByEvaluatingJavaScriptFromString:addCs-s-rule];

    [theWebView stringByEvaluatingJavaScriptFromString:setTextSizeRule];

    [theWebView stringByEvaluatingJavaScriptFromString:setFont];

【讨论】:

感谢您提及项目名称“AePubReader”。这对我帮助很大。【参考方案2】:

虽然帖子太旧了,上面的回答对我帮助很大,但我在 Swift 中这样做时遇到了问题。所以,也许这个答案可以节省一些人的时间。

let varMySheet = "var mySheet = document.styleSheets[0];"

let addCs-s-rule = "function addCs-s-rule(selector, newRule) if (mySheet.addRule) mySheet.addRule(selector, newRule); else  ruleIndex = mySheet.cssRules.length;mySheet.insertRule(selector + '' + newRule + ';', ruleIndex);"

let setTextSizeRule = "addCs-s-rule('body', '-webkit-text-size-adjust: \(fontPercentage)%;')"


self.webView.stringByEvaluatingJavaScriptFromString(varMySheet)
self.webView.stringByEvaluatingJavaScriptFromString(addCs-s-rule)
self.webView.stringByEvaluatingJavaScriptFromString(setTextSizeRule)

fontPercentage 是我班级中的一个变量。默认值为 100,您可以增加/减少它。

为了简单地更新 fontSize,我使用了“-webkit-text-size-adjust”属性。下面这段代码就足够了:

let textSizeRule = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(fontPercentage)%'"
self.webView.stringByEvaluatingJavaScriptFromString(textSizeRule)

【讨论】:

以上是关于iPhone ePub 阅读器更改 ePub 书中所有页面的字体而不是当前的 webview 内容的主要内容,如果未能解决你的问题,请参考以下文章

自定义样式,使用浏览器阅读epub格式的电子书

EPUB书籍阅读器插件分享

Linux版EPUB阅读器

使用 Vue 和 epub.js 制作电子书阅读器

Linux版EPUB阅读器

《加速世界03暮色掠_者》epub下载在线阅读,求百度网盘云资源