【问题标题】:Opening a big PDF file on an ipad without downloading it first在 ipad 上打开一个大的 PDF 文件而不先下载它
【发布时间】:2014-02-13 02:36:49
【问题描述】:

假设我在网络服务器上有一个 400MB 的 PDF,我希望 ipad 用户能够打开它并尽快开始查看它,而无需先完全下载文件。有哪些选择?

  • Safari 是否能够像这样流式传输大型 PDF?它可以在文件还在下载的同时开始显示第一页吗?

  • 有没有办法构建一个原生应用程序来实现这一点?如果是这样,是否应该首先在服务器上“吐出”PDF?怎么样?

任何有关如何以友好的方式在 ipad 上打开大型 PDF 的提示,我们将不胜感激。如果 PDF 的索引是可访问的,则加分!

【问题讨论】:

  • 这听起来可能很愚蠢,但是您可以让服务器将 pdf 分解为单独的 pdf 页面,然后在前端您可以一次下载 1 个,首先下载那里的多少页是,然后下载第一个,完成后下载第二个,然后在前端显示第一页,每隔几秒钟用户就会看到一个新页面进入。
  • 'Linearized' 或 '为快速 Web 视图优化' PDF 正是出于这个原因而引入的 - “在文件显示第一页时仍在下载”,但似乎只有 Adob​​e 软件(阅读器和浏览器插件)可以利用此功能。
  • 感谢两位的帮助!但是您能否提供有关每种解决方案的更多详细信息?例如,您如何自动逐页拆分 pdf 文件,并且仍然能够向用户显示目录,以便他可以定位特定页面(假设有 5000 页)?对于线性化 PDF,是否有文档列出了 ipad 上支持该功能的客户端?我看到适用于 ipad 的 Adob​​e Reader 无法在 ipad 1 上运行,是否有替代方案?另外,文件开始下载后是否可以访问 TOC?
  • 至于“列出客户”——就像我说的,只有 Reader 会这样做。我已经看到声称,尽管线性化文件格式可能记录得很好(请谷歌并阅读官方(ISO)文档),但关于客户请求的详细信息没有记录得太彻底(hm-m ...) .另外,关于“只要文件开始下载就可以访问 TOC”,——不管它写了什么关于线性化,例如快速访问第一页,然后是第二页,以及链接等,据我所知,PDF 规范只写了第一页显示,仅此而已
  • @electrotype 你找到解决方案了吗,我需要实现相同的。如果你知道请帮助我。非常感谢。

标签: ios ipad pdf streaming pdf-generation


【解决方案1】:

清除:

  • 线性化 PDF 对其对象的顺序进行了重新排序,以便显示页面所需的所有数据都在其他数据之前。您可以在附件 F(第 683 页)的PDF specification 中阅读更多详细信息

如果您还没有找到支持 Linearized PDF 的应用程序,从我的角度来看,最好的解决方案是在服务器端呈现页面并创建自定义协议以仅传输单个页面目录。

除非您想用Linearized PDF 创建自定义 PDF 查看器,否则您只需创建小型便携式“page viewer”,它可以快速显示目录然后询问服务器以获取确切的页码。

示例服务器接口:

class Pages
{
    string title;
    int number;
}

Stream GetDocumentPage(Page n);
List<Page> GetDocumentPages();

为此,可以使用开源解决方案(例如Ghostscript)来解析pdf文件并呈现所需的页面。然后通过您的自定义协议发送二进制数据并在您的小型便携式“page viewer”上显示页面。

此解决方案不需要下载整个文档,因为它会导致大量网络流量。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多