如何将 HTML 文档分解为电子书页面?

2024-04-20

对于 iPhone 电子书应用程序,我需要将任意长的 HTML 文档分解为完全适合一个屏幕的页面。如果我只是使用 UIWebView 来实现此目的,则最底部的行往往只会部分显示:其余部分会从视图边缘消失。

因此,我假设我需要知道在给定源 HTML 的情况下 UIWebView 将显示多少个完整行(或字符),然后为其提供正确数量的数据。这可能涉及大量计算,并且用户还需要能够更改字体和大小。

我不知道这是否可能,尽管像 Stanza 这样的应用程序可以很好地对 HTML (epub) 文件进行分页。我已经很长时间没有研究过 JavaScript 了,那是一个值得考虑的选择吗?

非常感谢任何建议!

update

所以我想到了一个可能的解决方案,使用 JavaScript 用每个元素的大小和位置来注释 DOM 树。然后应该可以重构树(使用内置的 XSLT 或 JavaScript),将其分割成完全适合屏幕的页面。

这里剩下的问题是,这总是会在段落边界上破坏页面,因为无法访问比 P 元素更低级别的文本。也许可以通过将文本解析为单词,将每个单词封装在 SPAN 标签中,重复上面的测量过程,然后仅显示适合屏幕的 SPAN 元素,将剩余的插入到下一个单词的前面来解决这个问题。页。

这一切听起来相当复杂。我说的有道理吗?有没有更简单的方法?


您应该查看 PagedMedia CSS 模块:http://www.w3.org/TR/css3-page/ http://www.w3.org/TR/css3-page/CSS3 还支持多列布局(谷歌搜索“css3-multicol”。我没有足够的 Karma 在这里包含第二个链接:-)

关于您的更新:怎么样做一个单页的布局,然后使用带有溢出的DIV:隐藏文本部分。接下来的事情是在其上覆盖一个透明项目,这将根据某些导航控件(或手势)以编程方式向上或向下滚动 DIV PAGE_HEIGHT 像素的内部内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 HTML 文档分解为电子书页面? 的相关文章

  • 检测 HTML5 视频何时结束

    如何检测 HTML5
  • CSS - 为什么我无法设置 元素的高度和宽度?

    我正在尝试使用以下 html 标记创建 css 按钮 a href access php class css button red Forgot password a 但它最终不会比中间的文本大 即使我已经设置了班级的高度和宽度 顺便说一句
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • 防止隐藏的输入被更改

    这一直让我压力很大 我有一个隐藏的输入
  • Angular4 - 滚动到锚点

    我正在尝试对同一页面上的锚元素进行简单的滚动 基本上 用户点击 尝试 按钮 它就会滚动到页面下方 ID 为 登录 的区域 现在 它正在与一个基本的id login a href login a 但它正在跳转到该部分 理想情况下 我希望它滚动
  • 如何使用 htaccess 重定向 html 扩展?

    目前 这两个链接显示同一页面 http www example com podcast episode html http www example com podcast episode html http www example com
  • 如何将 NSDate 转换为 NSString?

    我想将 NSDate 转换为 NSString 这怎么可能 我尝试了这个 但它不起作用 它正在生成异常 NSString dateToString NSString alloc initWithFormat NSString dateObj
  • 不要让最终用户保存密码[重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器 保存密码 功能 https stackoverflow com questions 32369 disable browser save password functionality 是否
  • 以编程方式检测应用程序是否正在设备或模拟器上运行

    我想知道我的应用程序在运行时是在设备还是模拟器上运行 有没有办法检测到这一点 原因是用模拟器测试蓝牙 api http volcore limbicsoft com 2009 09 iphone os 31 gamekit pt 1 woo
  • 如何使自定义绘制的 UITableViewCell 正确调整大小?

    出于性能原因 我在自定义视图中绘制 UITableViewCell 的字符串 该视图重写其 drawRect 方法 以使用 NSString drawInRect 直接在视图矩形中绘制字符串 这类似于 Apple 的 TableViewSu
  • 如何在css3中制作曲线风格的菜单?

    是否可以用css3制作曲线 圆弧样式的菜单 我可以使用canvas或HTML5中的其他东西来实现这一点吗 预先感谢 洛根 不幸的是 我不知道有什么优雅的解决方案 特别是当涉及到菜单项时 但弧线本身应该可以在纯 css 和几个 html 元素
  • Swift - 将图像插入 PDF 不再适用于 iOS 13

    目前正在开发在我的贷款计算器应用程序上导出 PDF 的功能 我有一个预览屏幕 可以在您保存 PDF 之前显示它 预览屏幕由带有 html 的 webView 组成 其中包含占位符 我能够成功地将图像插入到正确的占位符上 并将其显示在 PDF
  • 将滚动事件从 uibutton 传递到 uiscrollview

    我有水平的UIScrollView这是从UIScrollView我添加了UIButtons水平地 我只能滚动到按钮区域之外 但如果我想滚动到任何按钮就会触发UIControlEventTouchUpInside事件 我不想要这个 我想开火U
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 在移动网站中处理 iPhone 事件(如向左滑动)

    iPhone 浏览器是否有可以使用 Javascript 挂钩的特殊事件 例如 如果用户向左滑动 我想执行某个操作 如果有类似的活动 很高兴看到所有这些活动的参考 理想情况下 有一天所有触摸屏移动浏览器都会有一个标准 您可以访问多点触控事件
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • Onblur 事件在另一个 div 的 onclick 之前触发

    如上所述 我有一个按钮 单击该按钮将打开子菜单 对于子菜单中的每个选项 都有三个元素 我认为实际上还有更多元素 但为了简单起见 将其保留为 3 我将焦点放在子菜单的主 div 白色 框架 上 Onblur 这个 div 然后我隐藏子菜单 这
  • 延迟图像下载完成后更新 UITableViewCell

    异步下载单元格图像后 我在更新 UITableViewCells 时遇到一些问题 我正在使用自定义 UITableViewCells 如下所示 UITableViewCell tableView UITableView tableView
  • 响应式2列2行布局

    我一直在试图弄清楚如何创建这个布局 我有一个 2 列布局 左列有 1 行 右侧有 2 行 我试图让它流畅地调整 我遇到的问题是 我希望右侧顶部图像的顶部与左侧图像的顶部对齐 而底部图像的底部与左侧图像的底部保持对齐 我应该使用桌子吗 这是我
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS

随机推荐

  • Windows 自动化 telnet

    我想运行一组通常在 telnet 中运行的命令 来自 c 例如我想运行以下命令 using System using System Diagnostics namespace InteractWithConsoleApp class Pro
  • 隐藏在ios 9中的附件栏

    嗨有人可以帮我吗 我想在 ios 9 中隐藏键盘上的附件栏 它的工作发现直到 ios 8 但在 ios 9 我无法隐藏附件栏我厌倦了这段代码但它不工作 for UIView possibleFormView in keyboardWindo
  • 外部 API 的 CORS 问题 - 通过 PostMan 工作,但不能使用 Axios 进行 HTTP 请求 [重复]

    这个问题在这里已经有答案了 正在开发一个涉及汽车数据的新 Laravel 项目 并找到了一个免费的查找 API http www carqueryapi com documentation api usage 一个示例端点是 https w
  • 发送和接收短信以验证手机号码

    我正在尝试在不使用第三方的情况下进行手机号码验证 为此 我的逻辑是这样的 用户输入带有国家 地区代码的手机号码 当他们点击验证按钮时 意图将使用随机唯一 ID 向用户定义的手机号码发送一条短信 之后应用程序广播将等待 2 分钟 当它收到短信
  • Android 中的 Javascript“document.cookie”?

    我需要帮助如何正确使用 javascript 文档 cookie 或者 如何在 Android 网络浏览器中从 javascript 编写 cookie 我已确保在设置中启用了 cookie 当我检查时 通过使用 navigator coo
  • 是否可以在不使用 WMI 的情况下获取网络适配器的 PnPDeviceId?

    我一直在尝试使用 p invoke setupapi 调用获取给定网络适配器的 PnPDeviceId 但没有成功 我不情愿地决定使用 WMI 如下所示 public static string GetPnpDeviceId string
  • 汉明窗有什么用?

    我正在使用一些执行傅里叶变换的代码 以计算音频样本的倒谱 在计算傅里叶变换之前 它会对样本应用汉明窗 for int i 0 i lt SEGMENTATION LENGTH i timeDomain i float 0 53836 0 4
  • 有时 listView.getChildAt(int index) 返回 NULL (Android)

    我有一个带有自定义适配器的 listView 当发生某些事情 在子视图中单击 时 我会进行一些计算并修改子视图 如果满足某些条件 则应修改与单击的子项无关的其他子项 这有时有效 但有时失败 DDMS 说视图为空 让我向您展示代码 if in
  • 使用 AJAX/jQuery 加载页面和 History.pushState() 方法保留浏览器“后退”按钮功能

    我想在通过 AJAX jQuery 加载页面时保留后退按钮功能load方法 并通过将 URL 推送到浏览器栏history pushState方法 当单击浏览器后退按钮并且第一次单击仅恢复上一个 URL 但不加载上一个页面时 就会出现此问题
  • Extjs + D3:渲染冲突

    当我结合 Extjs 和 D3 时 我正在挖掘一些非常有趣的东西 一般来说 ExtJS渲染整个页面的主框架 D3渲染该框架中某个div的动态图 由于Extjs中的渲染逻辑相当复杂 因此我放置D3渲染逻辑的位置似乎至关重要 这里我尝试了两种
  • 从点制作 geopandas 数据框,然后投影 gpd,出现错误:无法转换朴素几何图形。请先在对象上设置一个crs

    我将带有纬度 经度的数据集转换为 geopandas 数据框 我们称之为 gpd gpd 没有 CRS 我试图使用以下命令将此 gpd 投影到 EPSG 3857 gpd gpd to crs EPSG 3857 我收到一条错误消息 无法转
  • ruby 默认参数习惯用法

    当您想要一个函数有一个默认参数 但该参数依赖于另一个参数 另一个变量时 Ruby 中的习惯用法是什么 例如 在Python中 一个例子是 def insort right a x lo 0 hi None if hi is None hi
  • 如何在 NSImageView 中实现 NSImage 的连续旋转?

    未来的观众 我已经成功完成了这个旋转动画 并且可以在问题上找到带有描述的代码 NSView 中的 NSImage 旋转不起作用 https stackoverflow com questions 10836131 nsimage rotat
  • 注册到 global.asax 的路由的替代位置

    最常见的做法是在 Application Start 事件中注册路由global asax cs vb文件 但您需要有权访问该文件才能执行此操作 美好的 我要么没有 要么不想 我正在尝试将 Asp net MVC 应用程序集成到 Share
  • 我如何解释 meminfo 中的所有内存?

    我试图理解如何meminfo跟踪记忆 这是我正在看的内容 MemTotal 341596 kB MemFree 147288 kB Buffers 56 kB Cached 46752 kB SwapCached 0 kB Active 8
  • Android - addToBackStack() 不起作用?

    这是负责将片段添加到返回堆栈的函数 public void populateContent File f ContentFragment cf new ContentFragment ctx ac this FragmentTransact
  • 在离子谷歌地图中添加多个标记

    我正在尝试将谷歌地图集成到离子项目中 并成功在离子页面上显示谷歌地图 但我想在这个谷歌地图上显示多个标记 尝试了不同的代码 但没有得到这个多个标记的东西 下面是我的代码 html
  • 如何使用脚本显示 Kendo Grid 的列菜单

    Kendo Grid 有一个非常漂亮的列上下文菜单 又名 columnMenu 您可以通过右键单击每个列标题来访问它 通过将 Kendo Grid 中的字段设置为以下内容来启用该菜单 列菜单 true 启用 columnMenu 后 它会在
  • 无法捕获 Apache Karaf 客户端输出

    我使用以下命令在服务器模式下启动了 Apache Karaf 3 0 0 KARAF HOME bin start在 CentOS 6 5 中 然后我想使用运行几个命令 KARAF HOME bin client并捕获这些命令的输出 以确保
  • 如何将 HTML 文档分解为电子书页面?

    对于 iPhone 电子书应用程序 我需要将任意长的 HTML 文档分解为完全适合一个屏幕的页面 如果我只是使用 UIWebView 来实现此目的 则最底部的行往往只会部分显示 其余部分会从视图边缘消失 因此 我假设我需要知道在给定源 HT