我有一个27MB的pdf文件,它托管在网络上。当我尝试打开它时,打开它需要一些时间。那么我有什么方法可以快速查看这个大型pdf文件。我想有一些设置,我们可以在下载一些页面后查看文件的页面。 对此的任何解决方案都将受到高度赞赏
答案 0 :(得分:4)
您需要对PDF进行“网络优化”。技术上更正确的术语是使它们“线性化”:
pdfopt.ps
的PostScript编写的辅助工具,可以执行此操作。简单地说:gs -q -dNODISPLAY -P- -dSAFER -dDELAYSAFER -- /path/to/pdfopt.ps input.pdf optimized.pdf
,或者如果你在Windows上:gswin32.exe -q -dNODISPLAY -P- -dSAFER -dDELAYSAFER -- c:/path/to/pdfopt.ps input.pdf optimized.pdf
通常pdfopt.ps
应与Ghostscript一起安装在安装路径的lib/
子目录中。如果没有,您可以从Ghostscript Git存储库中download pdfopt.ps。
线性化在内部重新组织PDF,以便其PDF对象的内部ToC(在技术术语中:其“ xref 表”)的(副本)接近开头的文件(而不是它的结尾),再加上一些更改。
这样,符合规范的PDF阅读器将能够在加载文件的其余部分之前开始渲染第一页。如果您使用基于HTTP的协议通过Web访问PDF,甚至可以在下载中间页之前跳转到最后一页并查看它。但是,Web服务器需要支持HTTP“字节范围”请求(否则即使对于线性化的PDF也不行)。
您可以在官方PDF-1.7 ISO标准规范available on the Adobe website
中阅读有关PDF线性化的更多详细信息。线性化PDF can be found here
的示例从Ghostscript的9.07版本开始,通过在命令行中添加以下开关,可以直接生成线性化(“web优化”)PDF输出(没有上面概述的两步法):
-dFastWebView=true
由于pdfopt.ps
文件现在是冗余的,因此它已从当前的Ghostscript源存储库中删除。
答案 1 :(得分:0)
一种选择是使用像JPedal这样的pdf库来从服务器端的PDF渲染页面图像,然后(通过AJAX)将图像呈现给客户端。
答案 2 :(得分:0)
两种可能的解决方法是:
如果PDF通常不会更改,您可以为资源设置cache expiry
(在response
中设置),这样当客户打开pdf / view时,资源会缓存在他们的浏览器中,将减少第二次访问的加载时间(取决于它到期的时间)
另一个选项,如果可能,尝试加载pdf文件asynchronously
。这是首先加载你网页的其他内容,然后你的pdf将被加载。
或者你可以将两者结合起来。
答案 3 :(得分:0)
FlexPaper支持将大型PDF文档拆分为多个页面,以便只下载可见页面。他们有两个观众,一个是翻页效果,一个是更经典的文档阅读器/阅读器,提供从免费到商业许可的选项。
答案 4 :(得分:0)
补充Kurt的评论。我组装了这个命令行,它似乎可以解决生成优化的PDF文件的问题:
gs -q -P- -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dFastWebView -sOutputFile=optimized.pdf input.pdf
您可以使用pdfinfo optimized.pdf
检查输出,您应该在输出中看到Optimized: yes