html 转 pdf、image
html 转 pdf 和 image 分别使用 wkhtmltopdf、wkhtmltoimage 工具,二者的使用方法几乎完全一样,且非常简单,仅就 wkhtmltopdf 进行说明
使用方法:
wkhtmltopdf --option sample.html result.pdf
option 参数通过 wkhtmltopdf -H 命令查看
生成原理:
wkhtmltopdf 使用 qtwebkit 内核对 html 文件进行渲染并打印出 pdf、image,由于使用 qtwebkit 内核进行渲染,远程 css、html 宏指令等都是支持的
注意事项:
linux要能支持中文字符,SA(盛国娟)安装fonts-chinese-3.02-12.el5.noarch.rpm包,折腾了很久
极少数的css属性支持不好,会导致转换失败
版本问题,我做云简历时最新版本是0.11,但是0.11版本对中文支持不好,反而0.10版本支持非常好,所以线上用的0.10版本,但是今天发现最新的0.12在2014年6月发布了,而之前的旧版本都被标识为Deprecated,想必新版本对中文支持和css的bug都作了处理
下载地址:
导出动态 word 文档
基本原理
在java中生成word文档有多种方案,常见的POI、jacob、iText等工具可以生成样式简单的word,但如果要达到控制样式、字体、打印不变形、符合office标准等高要求,它们则无能为力。
用freemaker+xml的方式动态生成word,可以保证得到的效果最佳。 office 2003以上的版本支持将word以“另存为”的方式转换为xml格式,该xml文件格式良好,源word中一行一行的文本被xml中一个一个的子元素组织起来,我们只需要将该文本处用freemaker标签替换,然后处理freemaker标签动态生成新的xml文件,这个xml文件跟最初的xml文件就文件结构上来讲是完全一致的,自然能被word支持,并且能保持源word文档中所有样式特性。
使用心得
关于xml文档结构
很繁杂,没法细说,总体而言word中的行或块在xml标签中组织起来,很有规律但又不完全规律,需要根据具体情况看。
我们可以用freemaker操作整个xml标签实现word文档动态更新,如复制、删除、上下移动等操作。
文本操作
我们对文本操作几乎无能为力,例如靠左靠右对齐、居中、段落中上下行对齐等,我们唯一能控制的只是对文本的替换(还有1中说的整个段落的操作),文本的所有样式版本都是遵循原来word中的样式排版,所有的这些都是通过xml标签的各种属性修饰的,因此想要文本右对齐,只需要在源word文档中排好版,最终生成的word文档中自然就是右对齐的。
用表格的方式组织word排版
为了xml格式更清晰、用freemaker操作起来更方便,请用表格排版,解决很多问题
图片替换、插入和删除
xml文档中将所有图片都顺序组织在一个一个的标签中,并以base64文本的方式呈现,想要替换图片只需要将目标图片转换成base64字符串的形式替换即可。
当插入和删除图片操作时,需要添加或删除标签及其相关标签,这涉及到xml文档格式的改变,可能会遇到问题。提供一种解决方案:利用一张空白点图提前插入word文档中,后进行base64文本替换
优点和缺点
优点: 重要且唯一的优点是能够保留初始word文档的所有样式特征。可以任意编辑初始word文档,甚至可以使用类似时间轴的效果,最终生成的word文档都能完美地呈现出来,而这些特性使用POI等工具去拼接,复杂度是不可想象的,效果也非常差。
缺点:
必须事先准备一份word文档,针对不同格式和样式都必须各准备一份
将xml文件改写成freemaker文件时很繁杂,并且改写成freemaker后,原来的word文档样式不能有任何改动,因为哪怕再小的改动也会导致整个xml文档结构的变动,我们只能重新开头编写freemaker文件
导出的word由于实际上是xml格式,符合Microsoft关于xml word格式的定义,当时其他office软件打不开,wps、open office等
即使使用表格方式组织word排版能使整个xml文件格式清晰很多,但细节方面仍然有混乱,导致我们在用freemaker对xml进行各项操作时要特别小心