标签归档:pdf

浏览器下载 PDF 文件

用浏览器访问一个指向 PDF 文件的链接,具体表现出来的行为会有所区别,最主要的区别就是在浏览器中打开(记作预览)或触发下载(记作下载)。

这些行为与请求响应结果中的 Content-Type 以及 Content-Disposition 这两个 header 有关。

Content-Typeapplication/pdfapplication/octet-stream 以及 application/custom-unknown 和无 Content-Disposition、取 inline 以及 attachment 来做组合实验,得到结果如下:

header Chrome Firefox Safari
Content-Type: application/pdf 预览 预览 预览
Content-Type: application/pdf
Content-Disposition: inline
预览 预览 预览
Content-Type: application/pdf
Content-Disposition: attachment
下载 下载 下载
Content-Type: application/octet-stream 下载 下载 下载
Content-Type: application/octet-stream
Content-Disposition: inline
下载 下载 下载
Content-Type: application/octet-stream
Content-Disposition: attachment
下载 下载 下载
Content-Type: application/custom-unknown 下载 下载 下载
Content-Type: application/custom-unknown
Content-Disposition: inline
下载 下载 下载
Content-Type: application/custom-unknown
Content-Disposition: attachment
下载 下载 下载

Content-Typeapplication/octet-stream 表示浏览器应当把这个文件作为二进制数据来对待。但实际上浏览器可能会自己根据 Content-Disposition 甚至文件内容来做些文件格式探测,从而使用浏览器内置的功能或插件功能来处理。上面用的 application/custom-unknown 就是特意设计一个不是通用的 type 来避免已有场景。

下载时,如果没通过 Content-Disposition 指定文件名(如 Content-Disposition:inline;filename=attach.pdf),那么下载后的文件的名称通过 url 来获取,如 /download.php 得到的是 download.php

Firefox 在触发下载时,如果 Content-Dispositioninline,那么会静默下载,而不会像 attachment 或无该 header 时那样弹出浏览器的保存弹框。

Safari 下载后,如果是 pdf 文件(通过 Content-TypeContent-Disposition 或其它方式识别出来),那么会自动打开该文件。

此处使用 pdf 来作为示例,对于其它类型的文件,浏览器和系统的规则推测应类似。

  • 操作系统:macOS Mojave 10.14.2
  • Chrome: 72.0.3626.121(正式版本) (64 位)
  • Firefox: 65.0.1 (64 位)
  • Safari: 12.0.2 (14606.3.4)

参考

ubuntu下chm和PDF阅读器

ubuntu自带的chm和PDF阅读器不怎么好用,功能有限,而且很卡。后来chm换了chmsee,用起来不错,可是没有搜索功能。如果是看普通的电子文档倒也没什么,可是如果是看比如技术手册之类的文档,没了这个,想找个函数的使用方法就烦死人了。至于PDF,后来换的是Adobe的,可是,一如Windows下的表现,大不但且,还不怎么好用,在ubuntu下更是卡得要命。

今天找到了两个比较好的软件,分别是kchmviewer和Foxit reader。

前者是kde的,源里有,一个命令即可:

sudo apt-get install kchmviewer

至于后者,在Windows平台,我一直都是在用这个,小巧,而且功能强大。今天才知道,原来,早就发布了Linux的版本,现在已经是1.1版本了。虽然还没到达Windows版本的地步,但已经非常不错了,而且加载很快,这点特别有用。下载地址为: http://mirrors.foxitsoftware.com/pub/foxit/reader/desktop/linux/1.x/1.1/enu/FoxitReader-1.1.0.tar.bz2。下载下来解压后,直接双击运行FoxitReader即可运行,无需安装。如果觉得好用,需要设为默认阅读器,只需要找一个PDF文件,右键,在属性中的打开方式选择“FoxitReader”即可(当然,由于没有安装,默认列表中是没有的,自定义找到存放目录即可)。


Update(2011-09-04)

Ubuntu 下的默认的文档查看器(V2.30.3)已经很不错了,而且还加上了保存上一次阅读位置的功能。

另外,Adobe 的 Reader X 在 Windows 和 Ubuntu 下表现都很不错。