在我的网页上,你可以阅读pdf格式的书籍。问题是,有些书有1000页左右,PDF很大,所以即使用户只读10页,服务器也会下载完整的pdf,所以这对我的托管帐户来说是很糟糕的,因为我有一个传输限制。
我可以做什么来显示的PDF没有加载完整的pdf。
我使用pdf.js
欢迎光临。
发布于 2014-09-16 14:37:15
原始帖子:
PDF文件的设计方式迫使客户端下载整个文件,只为了获得第一页。
PDF文件的最后一行告诉PDF阅读器PDF文件的根字典位于哪里(根字典告诉读者页面目录-页面顺序-以及阅读器使用的其他数据)。
因此,正如您可以看到的那样,PDF设计的局限性要求您使用服务器端解决方案来创建一个只需要显示页面的新PDF。
最好的解决方案(在我看来)是创建一个"reader“页面(而不是下载页面),它从服务器请求一个特定的页面,并允许用户逐页前进(使用AJAX)。
服务器将需要创建一个只包含所请求页面的新PDF (文件或流),并将其返回给阅读器。
如果您正在使用Ruby ( rails)运行您的服务器,您可以使用combine_pdf gem加载pdf并只发送一个页面.
您可以定义如下所示的控制器方法:
def get_page
# read the book
book = CombinePDF.parse IO.read("book.pdf")
# create empty PDF
pdf_with_one_page = CombinePDF.new
# add the page you want
# notice that the pages array is indexed from 0,
# so an adjustment to user input is needed...
pdf_with_one_page << book.pages[ params[:page_number] - 1 ]
# no need to create a file, just stream the data to the client.
send_data pdf_with_one_page.to_pdf, type: 'application/pdf', disposition: 'inline'
end如果您正在运行PHP或node.js,则需要找到不同的服务器端解决方案。
祝好运!
编辑:
我查看了PDF.js项目(看起来很不错),并注意到对Safari的有限支持声明:"Safari (桌面和移动)缺乏许多特性或缺陷,例如类型化数组或HTTP请求“.
我从这个声明中了解到,在某些浏览器上,您可以管理基于HTTP服务协议的客户端解决方案。
这并不能适用于所有浏览器,但它将使您不必使用服务器端解决方案。
我找不到PDF.js特性的文档(可能它默认为range,您只需要设置范围.?),但是我会使用一个服务器端解决方案,我知道它可以在所有浏览器上工作。
编辑2:
忽略编辑1,正如iPDFdev所指出的(谢谢iPDFdev),这需要特殊布局的PDF文件,不会解决浏览器下载整个文件的问题。
发布于 2014-09-16 14:36:42
您可以采取以下由功能管理的方法
https://stackoverflow.com/questions/25871195
复制相似问题