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 内容的主要内容,如果未能解决你的问题,请参考以下文章