最近的项目中需要显示pdf内容、下载pdf、甚至是前端生成pdf

适用于angular2、4或者更高版本

情景1.需要将页面的某个部分转成pdf文件并下载(即将页面的部分html内容转成pdf文件)

方案:

1.首先借助 html-to-image 将所需html内容转成图片,即

domtoimage.toJpeg(dom,params)

2.借助jspdf将图片转换成pdf,即pdf.addImage()这个方法,

然而这里有个坑!!!前端这里显示图片的单位是px,但是生成的pdf是按mm来计算的,像A4纸尺寸是210mm×297mm,所以这里需要做像素与毫米的转换 ,否则生成的pdf里的图片不清晰

转换还需要知道另一个参数:DPI(每英寸多少点),一般来说300DPI足够
一般来说 300DPI就足够了
象素数 / DPI = 英寸数
英寸数 * 25.4 = 毫米数,所以这里就需要你根据实际情况 计算出你这个图片的长宽 包括里面的字的大小

3.将pdf下载到用户本地,即 pdf.save(name),可指定文件名


实际代码如下:
    import * as domtoimage from 'dom-to-image';
    import * as jsPDF from 'jspdf';
       window['jsPDF'] = jsPDF;
      let hideNode = document.getElementById(id).cloneNode(true);
document.getElementById(id).parentElement.appendChild(hideNode);
this.render.addClass(hideNode,'consulting-report-download');
domtoimage.toJpeg(hideNode, {
quality: 1.0,
bgcolor:'#fff',
style: {
'opacity':'1',
'top':'0',
'left': '0'
}
})
.then(function (dataUrl) {
let img = new Image();
img.src = dataUrl;
img.onload = function() {
let pdf = new jsPDF();
pdf.addImage(dataUrl, 'JPEG', 14, 10, img.width/12, img.height/12 );//300DPI 1mm=12px
pdf.save(`${name}.pdf`);
}
})
.then(()=>{
this.downReport = false;
});

情景2.需要将pdf文件的内容显示在网页上

方案:

这里又分两种情况 ,

一种是后端直接给你一个pdf文件的链接,如

"http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf"
然后让我们把这个文件显示在页面上
1.首先安装两个包 pdfjs-dist (1.9.0) 和 ng2-pdf-viewer (2.0.0),这两个版本亲测有效,更新版本可能会有bug,github地址如下
 
https://github.com/VadimDez/ng2-pdf-viewer 
https://github.com/mozilla/pdf.js
 
2.import { PdfViewerComponent } from 'ng2-pdf-viewer'; 将这个包 import 到相关module里,不需要import pdfjs-dist ,因为这个包是ng2-pdf-viewer需要的,我们只要install了就好
3.最后一步直接加代码

<pdf-viewer [src]="pdfSrc"
[page]="page"
[original-size]="true"
style="display: block;"
></pdf-viewer>

src就是后端给你的链接,page就是页数,还需要配置别的可以去github看看,这个pad-viewer是按将pdf竖向顺序显示,刚好符合产品的需求,所以这里我没有深入

还有一种情况是 用户直接上传pdf,然后需要将用户上传的pdf的内容显示在网页上

这里就需要用到HTML5 里面的 FileReader获取pdfSrc,

然后还是用到上面的<pdf-viewer>

 let $img: any = document.querySelector('#file');

    if (typeof (FileReader) !== 'undefined') {
let reader = new FileReader(); reader.onload = (e: any) => {
this.pdfSrc = e.target.result;
}; reader.readAsArrayBuffer($img.files[0]);
}

情景3.直接下载pdf文件

方案:

1.window.open(url)

2.location.href = url

说实话,感觉有点low,如果您有更好的方案,希望可以互相交流

关于angular2及以上操作pdf的3种需求及解决方案,如果还有别的需求和更好的方案,欢迎交流~

angular2之pdf文件操作大全的更多相关文章

  1. Java 文件操作大全

    Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...

  2. Python文件操作大全

    Python 编程文件操作大全   文件打开模式 打开模式 执行操作 'r' 以只读方式打开文件(默认) 'w' 以写入的方式打开文件,会覆盖已存在的文件 'x' 如果文件已经存在,使用此模式打开将引 ...

  3. 【整理】C#文件操作大全(SamWang)

    [整理]C#文件操作大全(SamWang) 文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msd ...

  4. 强大的pdf文件操作小工具——PDFtk的小白用法 【转载】

    转载出处https://www.cnblogs.com/basterdaidai/p/6204518.html 前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题. ...

  5. C# 文件操作大全

    1.创建文件夹//using System.IO;Directory.CreateDirectory(%%1); 2.创建文件//using System.IO;File.Create(%%1); 3 ...

  6. 【转】c#文件操作大全(二)

    61.文件夹移动到整合操作 FolderDialog aa = new FolderDialog();            aa.DisplayDialog();            if (aa ...

  7. [PDF] PDFOperation--C#PDF文件操作帮助类 (转载)

    点击下载 PDFOperation.rar 这个类是关于PDFOperation的帮助类,主要是实现C#PDF的文件操作,具体实现功能如下1.构造函数2.私有字段3.设置字体4.设置页面大小5.实例化 ...

  8. Linux中shell文件操作大全

    1.创建文件夹#!/bin/shmkdir -m 777 "%%1" 2.创建文件#!/bin/shtouch "%%1" 3.删除文件#!/bin/shrm ...

  9. go文件操作大全

    参考Go官方库的文件操作分散在多个包中,比如os.ioutil包,我本来想写一篇总结性的Go文件操作的文章,却发现已经有人2015年已经写了一篇这样的文章,写的非常好,所以我翻译成了中文,强烈推荐你阅 ...

随机推荐

  1. Python 之__slots__的作用

    # 注意:__slots__ 用来限制当前类的实例属性的,如:name.age才可被使用,添加其他的属性则报错 # 不会限制继承类的属性 class Person(): __slots__ = (&q ...

  2. Ubuntu 常用解压与压缩命令

    参考 https://blog.csdn.net/songbinxu/article/details/80435665 示例: 把/home/wangju/gitlab/automationTest目 ...

  3. CAD绘制一个角度标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimAngular 绘制一个角度标注.详细说明如下: 参数 说明 DOUBLE dAngleVertexX 角度标注的顶点的X值 DOUBLE dA ...

  4. 6 个 Linux 运维典型问题,大牛的分析解决思路在这里

    作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...

  5. demo_static_resrouce

    环境 win10 + webstorm 2019.1.3 + node 12.x + yarn 实现的的功能 基本的js打包(支持规范:ES6 module | requirejs | commonj ...

  6. git学习(1)

    一.git fetch 和git pull 的差别 1.git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令: git fetch orgin master //将远程仓库的 ...

  7. C解析config

    #cat bb.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  8. oracle的递归运算(树运算) 无限树形

    oracle的递归运算(树运算)start with org_id ='1'connect by prior parent_id=son_id 1.前言   oracle的递归运算,在我们web页面的 ...

  9. 【css】最近使用的两种图标字体库

    ## 0. 前言 比较基础的图标加载:<img src="x.png">和块元素的背景background: url(./x.png). 页面多图标时,使用雪碧图(多个 ...

  10. 21.使用rescoring机制优化近似匹配搜索性能

        一.match和phrase match(proximity match)区别   1.match:只要简单的匹配到了一个term,就会将term对应的doc作为 结果返回. 2.phrase ...