node处理图片和PDF文件方法

最近项目用node做微服务,有一部分需要处理图片和html转pdf,查了资料,整理如下,希望对大家有用。

图片处理

查资料时,很多同仁说gm好,功能很强大,可以处理图片,pdf转图片等,但细究之后发现需要在服务器上安装第三方软件GraphicsMagick 或 ImageMagick,比较麻烦,遂放弃。

  • sharp
    Sharp非常好用,跨平台,一键安装(npm install sharp);可以处理一切常见的图片格式(JPEG、PNG、WebP、TIFF、Gif等等);C语言编写,处理速度快,其执行JPEG格式图片调整的速度是 ImageMagick 和GraphicsMagick的8倍,这主要依赖于可用CPU核的数量,这一切能顺利进行要感谢libuv 和 Promises/A+ 的支持。
    常见用法如下:
const sharp = require('sharp');
sharp('input.jpg')
  .rotate()
  .resize(200)
  .toBuffer()
  .then( data => ... )
  .catch( err => ... );

具体用法参考文章服务端图片处理利器——sharp 进阶操作指南

  • images
    images也是一个不错的图片处理工具,虽说功能可能少些,但用起来颇为不错。
const images = require("images"); 
images(images("image/test.jpg"),200,200,500,500)    
 .resize(100)
 .save("image/new.jpg");

具体用法参考文章images基础使用

  • 仅仅获取图片长和宽可以用下面两个工具,小巧。

1:图像维度获取: image-size
2:网络图像维度获取(不用下载): http-image-size

Html To PDF

  • phantom
    这是我最推荐的npm包,功能强大,它支持样式渲染,图片加载,没有遇到失真问题,还可以通过url直接生成PDF文件,不友好的地方就是只能输出pdf文件保存到本地,不能以stream或buffer方式输出。
    phantom可以设置pdf样式,如大小(A3/A4/A5/letter),页边距,页眉页脚,页面方向等,还支持分页。
const phantom = require('phantom');
phantom.create().then(function(ph) {
    ph.createPage().then(function(page) {
        page.open("https://www.oracle.com/index.html").then(function(status) {
            page.property('viewportSize',{width: 10000, height: 500});
            page.render('/oracle10000.pdf').then(function(){
                console.log('Page rendered');
                ph.exit();
            });
        });
    });
});

详细用法参考1:phantom基础实用
2:phantom分页实现

  • html-pdf
    经过简单测试,其生成的pdf文件中并没有很好的支持样式渲染和图片加载,存在是真问题。不支持通过url直接加载html;但是在分页的支持上很好。不过其支持以stream或buffer方式输出,这是值得称道的。
const pdf = require('html-pdf');
pdf.create(html).toFile([filepath, ]function(err, res){
  console.log(res.filename);
});
 
pdf.create(html).toStream(function(err, stream){
  stream.pipe(fs.createWriteStream('./foo.pdf'));
});
 
pdf.create(html).toBuffer(function(err, buffer){
  console.log('This is a buffer:', Buffer.isBuffer(buffer));
});
 
  • wkhtmltopdf

wkhtmltopdf的使用也不错,和phantom效果差不多,不过和gm一样需要第三方软件wkhtmltopdf。所以不推荐用,有兴趣看一看这些文章。
1:记一次wkhtmltopdf填坑经历
2:最好用Html转pdf的工具——wkhtmltopdf
3:Html转Pdf(wkhtmltopdf)

图片处理,pdf转图片

这里就要说备受推崇的GM了,它是借助第三方软件GraphicsMagick 或 ImageMagick,每次使用去调用GraphicsMagick ( ImageMagick)进程,启动退出浪费时间,比sharp慢一些。
不过耐不住功能强大,可以做一个美图秀秀了。

pdf解析

PDFKit,这是一个很强大的pdf解析工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章