怎样压缩PDF文件?
http://w.baike.com/8ece53e810f343549dd67704b1f029dd.html PDF文件压缩如何进行?
- PDF “ 减小文件大小”法
- PDF虚拟打印机二次打印法
- PDF文件压缩如何进行?
http://wenda.so.com/q/1358839067061479 怎样压缩PDF文件?
http://jingyan.baidu.com/article/5225f26b133d57e6fa090833.html 百度经验
看到了类似问题的一些解决方法,看看对你有没有帮助……
第一种:减小文件大小的关键因素是压缩率。若想把一个PDF文件大小减小就用Adobe Acrobat 7.0 Professional先打印成PS.然后将PS用Acrobat Distiller 7.0转成PDF(转时命令选"最小文件大小")。
第二种:首先要搞清楚这个输出的pdf是做什么用的:是仅仅为了屏幕观看,还是输出印刷。这两者的输出参数是不一样的。主要分别在于——分辨率 (包括适量部分和位图部分)的选择不同。
★ 顺便纠正一下观念:矢量图形也是有分辨率问题的,并非如你想像的自由无极变倍。
- 位图部分除了分辨率问题外,还存在一个在PDF文件内部的压缩方法问题:可以采用 JPG 压缩,TIF 压缩 或者ZIP 压缩方法 来保存内嵌的位图。其中JPG 压缩是有损的,但体积上最优势,TIF 压缩率为 1/2, Zip压缩就最弱,但兼容性最好,是印刷输出的最佳选择。
- 关于矢量部分的压缩,个人建议不要使用,因为这个选项会缩减你的曲线节点,在小磅数的文字曲线时,O字母都看起来是六角形。
- 关于文件大小的另外一个选项就是:是否将所有文字转换为曲线?。这个通常都建议转换,但头疼的是:如果你使用一些劣质的中文字体,就会造成矢量描述有误的PDF文件,结果就是PDF部分缺失……你后悔都来不及。
第三种: 前提是电脑安装的OFFICE办公软件是2003以上的版本:第一步第二步 第三步,...
第四种:你存的时候把 adoub pdf 预设 改成“ smallest file size ”后存储就能小很多
MuPDF:一个PDF格式分析器
参考:http://www.open-open.com/lib/view/open1346904367647.html
主页:http://www.open-open.com/lib/view/home/1346904367647
官网:https://mupdf.com/
下载:https://mupdf.com/downloads/
MuPDF是一个PDF格式分析器,用来阅读PDF文件,并创建Fitz trees。
MuPDF也有一个API修改PDF文件的内部对象,并写入文件。举例来说,有可能使用加密MuPDF库来对现有的PDF文件重新安排页面。
PDF文件格式分析
https://amccormack.net/2012-01-22-anatomy-of-a-pdf-document.html
2006-01-09 http://blog.csdn.net/pdfMaker/article/details/573990 PDF文件的结构分析
2010.10.31 http://www.2cto.com/article/201011/77380.html PDF文件格式分析 | Author:Cryin
参考:《面向对象的中文PDF阅读器的设计与实现》作者:杨道良
Adobe的PDF参考告诉我们一个PDF文件可以通过下面4个方面来理解:
- 对象——一个PDF文档是由一组基本数据类型组成的数据结构
- 文件(物理结构)——决定对象是如何存放在一个PDF文件中的,它们是如何被访问的,如何被更新的。这个结构是独立于对象的语义的。
- 文档结构——说明一些基本的对象类型是如何来表现PDF文档的成分的:例如页,图片,字体,批注等。
- 内容流——一个PDF文件内容流包含一系列的指令,描述页面的外观或其他图形实体的外观和文件内容。
但是当时对我来说要看懂这几行字是有很大的困难的,需要了解确切含义,必须看完后面的几十页上百页的内容并且要分析一个实际的PDF文件才能完全领会它的意思。
后来经过长时间的文档阅读,相关开发,并且具体地分析PDF文件后才把PDF文件的语法,文件的解析搞清楚。虽然说学习是痛并快乐着,但是对于当时的我来说真得希望有一个人能够告诉我一个简单的例子,通过一个简单的例子来描述PDF的基本组成,它的解析原理和过程。从我的切身体验来说,从一个初学者的角度出发,最好的方式应该是一个简单的例子。因此我主要将以一个简单的例子并且加以图例来说明PDF的主要特性并给出一个简单的PDF文件的全景。
在继续阅读该文章前,先问自己下面的两个问题:
你了解至少一种文件格式吗?(例如HTML)
为什么要学习PDF的相关知识?
如果你对第一个问题的答案为“是”, 并且第二个问题你能给出一个非常明确的答案,那么这篇短文就是为你准备的。否则,如果对任何一种格式都不了解,建议你先了解一下HTML,或XML,你可以从这两种语言里得到很多启发,对学习PDF的构成或研究学习其他格式文件有很大的好处;如果你不清楚你要学习是为了什么,那么我就认为你学习没有目的性和动力,说不定你今天学了以后明天就忘得一干二净,因此也不建议你继续看下去,等到你想清楚了欢迎你来看这则短文。
1. PDF格式和HTML/XML格式:
一个PDF文档从根本上来说是一个8字节序列。
其实PDF格式和我们已经熟知的HTML,XML等结构化的文件格式一样,包含有关键字,分隔符,数据等等。
不同的是PDF文件是按照二进制流的方式保存的,而html文件则是可读的文本方式保存的,你可以用文本编辑器分别打开一个html文件和PDF文件比较一下就知道了。XML文件一般只包含数据本身,并没有把如何显示的信息放在其中,因此要显示一个XML文件还需要一个Schema文件才能显示,否则看到的将是所有的字节流,包括所有的标志;HTML包含了数据的同时也包含了一些关于如何显示的信息,但是HTML是按照是不经过压缩的文本存放的,是可读的,你打开一个HTML文件就能知道所有将显示在浏览器里的文字。
另外就是HTML不能包含二进制流,它对图像文件的引用都是通过引用外部文件的方式来实现的。
2. PDF规范的发展
PDF规范从1993年到现在,已经有过7个版本,六次版本升级,从最初的pdf1.0版本到现在的PDF1.6, 每次的版本升级都会加入一些新的特性,PDF参考说明书也是从最初的100多页到现在的1000多页,但是PDF文件格式的主要特性还是没有改变,可以这么理解,PDF1.6是PDF1.0的扩展集,学习了PDF1.0以后也能基本上理解PDF1.6的内容, 而PDF1.0规范是相对简单的,因此说我选择一个符合PDF1.0规范的最简单的一个PDF文件来进行分析。
PDF规范的6次升级:
- 1.1 1995 加入了文档加密(40字节),线索树,名字树,链接,设备独立色彩资源。
- 1.2 1996 表单, 半色调屏幕,和其他的一些高级色彩特性, 对中文,日文和韩文的支持
- 1.3 2000 数字签名, 逻辑结构, JavaScript, 嵌入式文件,Masked Images, 平滑阴影, 支持 CID字体的附加色彩。
- 1.4 2001 文件加密 (128 字节), 标签式 PDF, 访问控制,透明,元数据流
- 1.5 2003 文档加密 (公钥), JPEG 2000 压缩, 可选的内容组,附加的注解类型
- 1.6 2005 文档加密 (AES),增加最大文件支持,加入3D支持,额外的注解类型
3. PDF文件的基本组成:
一个PDF文件从大的方面来说可以分4个部分:
- 文件头,指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。
- 文件体,PDF文件的主要部分,由一系列对象组成。
- 交叉引用表,为了能对间接对象进行随机存取而设立的一个间接对象的地址索引表。
- 文件尾,声明了交叉引用表的地址,即指明了文件体的根对象(Catalog
),从而能够找到PDF文件中各个对象体的位置,达到随机访问。另外还保存了PDF文件的加密等安全信息(以后详细讨论)。
如下图:
4. PDF文档的逻辑结构
作为一种结构化的文件格式,一个PDF文档是由一些称为“对象”的模块组成的。并且每个对象都有数字标号,这样的话可以这些对象就可以被其他的对象所引用。这些对象不需要按照顺序出现在PDF文档里面,出现的顺序可以是任意的,比如一个PDF文件有3页,第3页可以出现在第1页以前,对象按照顺序出现唯一的好处就是能够增加文件的可读性,如果你不会用文本编辑器来阅读PDF结构,那么大可不必关心该顺序。正是因为页与页之间的不相关性,就能够对PDF文件的页面进行随机的访问。
文件尾(Trail),说明根对象的对象号,并且说明交叉引用表的位置,通过对交叉引用表的查询可以找到目录对象(Catalog)。这个目录对象是该PDF文档的根对象,包含PDF文档的大纲(outline)和页面组对象(pages)引用。大纲对象是指PDF文件的书签树;页面组对象(pages)包含该文件的页面数,各个页面对象(page)的对象号。
下图是PDF文档的层次关系:
页面(page)对象作为PDF中最重要的对象,包含如何显示该页面的信息,例如使用的字体,包含的内容(文字,图片等),页面的大小。里面的信息可以直接给出,当然里面的子项更多的是对其他对象的引用,真正的信息存放在其他对象里面。页面中包含的信息是包含在一个称为流(stream)的对象里,这个流的长度(字节数)必须直接给出或指向另外一个对象(包含一个整数值,表明这个流的长度)。如下图:
5. PDF的基本语法:
文件的第一行是文件头,指明了该文件所遵从的PDF规范的版本号,它出现在PDF文件的第一行。
一个对象的第一行一般有两个数字和关键字“obj”。例如:
3 0 obj
<<
/Type /Pages
/Count 1
/Kids [4 0 R]
endobj
第一个数字称为对象号,来唯一标识一个对象的,第二个是产生号,是用来表明它在被创建后的第几次修改,所有新创建的PDF文件的对象号应该都是0,即第一次被创建以后没有被修改过。上面的例子就说明该对象的对象号是3,而且创建后没有被修改过。
对象的内容应该是包含在<< 和>>之间的,最后以关键字endobj结束。
6. 文件Hello World的文件分析:
6.1 文件的具体分析
(略)...
6.2 PDF解析过程
回顾上面的详细解释,我们可以将这个简单的PDF解析过程简化为如下图例:
7. 结束语:
到这里,对一个最简单的PDF文件的介绍就结束了,大家对PDF文件的格式和特定也应该已经有所了解了。
当然,我这里介绍的是不完整的,完整的信息,请访问adobe的网站下载最新的PDF REFERENCE1.6:
链接:http://partners.adobe.com/public/developer/pdf/index_reference.html
下次介绍PDF的加密过程及原理。