html导出为pdf和word,html 转 pdf、image 及动态 word 导出方案

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进行各项操作时要特别小心

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值