SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式。通过了解各类搜索引擎抓取互联网页面、进行索引以及确定其对特定关键词搜索结果排名等技术,来对网页进行相关的优化,使其提高搜索引擎排名,从而提高网站访问量,最终提升网站的销售或宣传的效果。
简单的来说,就是在网页上放一些能耐被搜索引擎抓取到的数据,让用户更容易搜到。
我的前一篇blog中提到pdf的展示使用的时PDF.js,这是用js的方式,用户请求时,在线解析为html,搜索引擎并不能抓到,而且文件太大的话,解析速度比较慢,老板要求换方案,于是考虑在服务器端一次性将PDF转换为静态html,方案既定,开始干活,前后分别试用了4款插件:
>php pdftohtml
Windows下已经有编译好的的exe文件,直接下载,命令行调用即可,也可以用exec()函数调用。优点:可以将pdf转换成,png背景图 + html代码
缺点:pdftohtml的版本太太太太太太尼玛老了,他是基于XPDF 2.0开发,而今XPDF都升级到3.04了,pdf 1.5以后的版本都打不开,兼容性也不好
总结:4款插件中表现最次的。>php 原生XPDF
利用原生XPDF中的pdftohtml组件,使用方法同上优点:可以将pdf转换成,png背景图 + html代码
缺点:虽然各种pdf 的版本基本上都能打开,但是一些带着格式的字体或者含有表格对齐的pdf,他的表现就像是一坨翔,完全错位
总结:4款插件中表现最接近最次的。>php poppler
它里面的pdftohtml听说也是基于XPDF的,没什么可说的,他的表现确实是比前两个提升了一个量级。
但是为什么我们仍然没有选用他呢?优点:可以将pdf转换成,png背景图 + html代码,渲染效果明显较好
缺点:但也是只能达到80%的准确率(不要问我这是怎么得出来的,看心情估了一把)
总结:勉强达到planB的要求,远没达到plan A 的要求。>php pdf2htmlEX 开源项目
这也是我为什么越来越喜欢开源的东西的理由,这帮开源众真他娘的给力,看名字wanglu还是个中国女同胞,给力啊!
这个插件详细描述一下:
官网:https://github.com/coolwanglu/pdf2htmlEX
文档地址:https://github.com/coolwanglu/pdf2htmlEX/wiki
在线转换:https://github.com/coolwanglu/pdf2htmlEX/wiki/Try-Your-Own-Files
对比,讲的还是挺实在的
速度:
pdf特性保持:
所以怎么说,这都是最佳选择
start:
下载、安装:
win: https://github.com/coolwanglu/pdf2htmlEX/wiki/Download的相应版本
linux 下:sudo add-apt-repository ppa:coolwanglu/pdf2htmlex && sudo apt-get update && sudo apt-get install pdf2htmlEX
既然是命令行工具,咱先瞧一瞧
没错,这里面有各种各样功能的参数,查看文档折腾一下,马上就会发现一些能用于优化的参数
最基本用法:
pdf2htmlEX --zoom 1.3 pdf/test.pdf
定宽、背景图格式:
pdf2htmlEX -f 3 -l 5 --fit-width 1024 --bg-format jpg pdf/test.pdf
各类文件分离,利于展示,嵌入html中
df2htmlEX --embed cfijo --dest-dir out pdf/test.pdf
所以,综合一下,下面这条命令就能解决大部分的问题:
pdf2htmlEX --embed cfijo --split-pages 1 --dest-dir out --page-filename test-%d.page pdf/test.pdf
当然上面的命令可以用php或其他语言,直接调用相应的函数来执行系统命令
转完后发现,这玩意这是个高保真的转换工具,特别需要注意的是:
1)字体文件
之所以pdf2htmlEX能高保真,绝大一部分的贡献或者说比之前的一些插件表现好的原因,就是因为他嵌入了字体文件:
好处:高保真
弊端:文件大,导致加载慢
这就需要权衡一下,是要速度还是高保真了 优化方案:调整参数 –embed-external-font
2)背景图剥离(–embed i)
通常情况下需要手动修改生成的html的img的src属性,否则会导致加载不到背景图的情况。
优点:不会再html文件中嵌入一长串的代码,减少html文件的大小,减轻加载压力
所以必然就选择了这种方案。。。。
- 还有一些线上的API和商业的解决方案,能达到相似或者更好的效果,不在此讨论;