Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >页面DOM导出PDF

页面DOM导出PDF

作者头像
码客说
发布于 2020-05-09 06:59:52
发布于 2020-05-09 06:59:52
3K00
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

页面DOM导出PDF

Nginx设置允许跨域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location /static {
	add_header 'Access-Control-Allow-Origin' '*';
	add_header 'Access-Control-Allow-Credentials' 'true';
	index index.html;
	root  /data/wwwjarapi/8905xhkjfileapitest/;   
}

也就是在location下添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';

添加模块引用

第一个将页面html转换成图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install html2canvas --save

第二个将图片生成pdf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install jspdf --save

未使用VUE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* eslint-disable */
import html2canvas from 'html2canvas';
import JsPDF from 'jspdf';

/**
 * @param  ele          要生成 pdf 的DOM元素(容器)
 * @param  padfName     PDF文件生成后的文件名字
 * */
function downloadPDF(ele, pdfName){
  document.documentElement.scrollTop = 0;
  html2canvas( ele, {
    dpi: 300,
    useCORS:true  //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。
  } ).then( (canvas)=>{
    var contentWidth = canvas.width;
    var contentHeight = canvas.height;
    //一页pdf显示html页面生成的canvas高度;
    var pageHeight = contentWidth / 592.28 * 841.89;
    //未生成pdf的html页面高度
    var leftHeight = contentHeight;
    //页面偏移
    var position = 0;
    //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
    var imgWidth = 595.28;
    var imgHeight = 595.28/contentWidth * contentHeight;
    var pageData = canvas.toDataURL('image/jpeg', 1.0);
    var pdf = new JsPDF('', 'pt', 'a4');
    //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
    //当内容未超过pdf一页显示的范围,无需分页
    if (leftHeight < pageHeight) {
      //在pdf.addImage(pageData, 'JPEG', 左,上,宽度,高度)设置在pdf中显示;
      pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
    } else {    // 分页
      while(leftHeight > 0) {
        pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
        leftHeight -= pageHeight;
        position -= 841.89;
        //避免添加空白页
        if(leftHeight > 0) {
          pdf.addPage();
        }
      }
    }
    //可动态生成
    pdf.save(pdfName);
  })
}
export default {
  downloadPDF
}

注意 document.documentElement.scrollTop = 0; 是为了解决外层页面滚动时获取的canvas偏移的问题

引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import htmlToPdf from "@/assets/js/htmlToPdf";

调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
htmlToPdf.downloadPDF(
  document.querySelector("#myexport"),
  "小明的试卷"
);

使用VUE

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export default{
  install (Vue, options) {
    Vue.prototype.getPdf = function (id,title) {
      document.documentElement.scrollTop = 0;
      html2Canvas(document.querySelector(`#${id}`), {
        // allowTaint: true
        useCORS:true//看情况选用上面还是下面的,
      }).then(function (canvas) {
            let contentWidth = canvas.width
            let contentHeight = canvas.height
            let pageHeight = contentWidth / 592.28 * 841.89
            let leftHeight = contentHeight
            let position = 0
            let imgWidth = 595.28
            let imgHeight = 592.28 / contentWidth * contentHeight
            let pageData = canvas.toDataURL('image/jpeg', 1.0)
            let PDF = new JsPDF('', 'pt', 'a4')
            if (leftHeight < pageHeight) {
                PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
            } else {
            	while (leftHeight > 0) {
                  PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
                  leftHeight -= pageHeight
                  position -= 841.89
                  if (leftHeight > 0) {
                      PDF.addPage()
                  }
              }
            }
            PDF.save(title + '.pdf')
        }
      )
    }
  }
}

main.js文件中添加如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import htmlToPdf from '@/utils/htmlToPdf'
Vue.use(htmlToPdf)

然后就可以在要导出pdf文件组件里面添加 如下 代码即可导出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.getPdf('resumeId',name)

Canvas转图片下载

也可以使用html2canvas获取canvas后 转为图片下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let url = canvas.toDataURL("image/png");
var oA = document.createElement("a");
oA.download = '';// 设置下载的文件名,默认是'下载'
oA.href = url;
document.body.appendChild(oA);
oA.click();
oA.remove(); // 下载之后把创建的元素删除
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​html2canvas 出现图片无法展示
最近接收到一个优化需求:就是对之前的行程文档的图文介绍添加打印生成 pdf 的功能
公众号---人生代码
2020/11/26
2.6K0
Vue 结合html2canvas和jsPDF实现html页面转pdf
E:\MyProjects\TMP\frontend>npm install html2canvas
授客
2020/04/30
5.1K0
Vue 结合html2canvas和jsPDF实现html页面转pdf
HTML页面导出PDF——高清版
  需要做一个导出PDF的功能,网上找有很多,但是一般导出来的都是比较模糊的那种,下面这个是高清版的,导出的PDF都是几M,跟正常手动导出的差不多,很清晰。
_一级菜鸟
2019/09/10
2.3K0
前端生成pdf,jspdf+html2Canvas的使用(vue)
2、安装html2Canvas: npm install --save html2canvas
前端小tips
2021/11/27
8.2K0
前端生成pdf,jspdf+html2Canvas的使用(vue)
vue-pdf实现pdf预览、分页、下载、打印
https://www.npmjs.com/package/vue-pdf-app
圆圆的冬瓜
2021/08/18
26.7K2
vue-pdf实现pdf预览、分页、下载、打印
Javascript 将 HTML 页面生成 PDF 并下载
最近碰到个需求,需要把当前页面生成 pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :)
前朝楚水
2018/07/26
4.8K0
Javascript将HTML转成PDF并下载「支持多页」
由于html2canvas只能将它能处理的生成canvas image,因此渲染出来的结果并不是100%与原来一致。但它不需要服务器参与,整个图片都由客户端浏览器生成,使用很方便。
用户1093975
2018/08/03
4.3K0
html页面导出为pdf(jsPDF、iText、wkhtmltopdf)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/79710704
DannyHoo
2018/09/13
7.2K0
html页面导出为pdf(jsPDF、iText、wkhtmltopdf)
Vue如何实现导出页面为PDF
导入完成之后,开始编写需要进行操作的Vue页面,如下,当然其中页面只是为了参考,读者可以通过自己编写的页面来进行测试
初学者123
2020/10/07
2.4K0
Vue如何实现导出页面为PDF
Vue 一键导出 PDF
生成 PDF 基本思路大多一致,先用 html2canvas 将 DOM 元素转换为 canvas,再利用 canvas 的 toDataURL 方法输出为图片,最后使用 jsPDF 添加图片生成 PDF 实现一键下载。
数媒派
2022/12/01
2K0
html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案
最近接收到一个优化需求:就是对之前的行程文档的图文介绍添加打印生成 pdf 的功能
公众号---人生代码
2020/11/26
4.4K0
VUE 网页生成 PDF[通俗易懂]
如图,在导出文件时,发现网络错误,可能是因为下载器不支持,首先换浏览器试一次,如果可以下载,则就是下载器不支持。
全栈程序员站长
2022/08/28
2.1K0
VUE 网页生成 PDF[通俗易懂]
React项目实现导出PDF的功能
在做web项目中,有时候会遇到pdf导出的需求,现根据之前在公司的React项目中遇到的导出PDF需求,整理一个demo出来。
用户1174387
2022/06/08
2.5K0
React项目实现导出PDF的功能
教你两招,轻松搞定html页面导出为pdf文件
Hi,大家好,我是麦洛,最近项目中遇到了将html页面导出为pdf文件,现在将相关内容分享出来,希望帮到有需要的伙伴
麦洛
2021/05/24
3.6K0
教你两招,轻松搞定html页面导出为pdf文件
前端vue项目,把某个div盒子或当前页面生成pdf文件并下载。
3、事件 给需要生成pdf的盒子设置id:pdfDom 给按钮一个全局事件方法getPdf('个人征信报告'),参数是文件名
江一铭
2022/06/16
1.5K0
前端vue项目,把某个div盒子或当前页面生成pdf文件并下载。
vue前端怎么导出图片_VUE中将页面导出为图片或者PDF
1.将页面html转换成图片 npm install html2canvas –save
全栈程序员站长
2022/09/01
2.9K0
vue3 如何将页面生成 pdf 导出
最近工作中有需要将一些前端页面(如报表页面等)导出为pdf的需求,博主采用的是html2Canvas + jspdf。
唐志远
2023/07/26
1.4K0
vue3 如何将页面生成 pdf 导出
H5基于Canvas实现电子签名并生成PDF文档
原文:https://juejin.cn/post/6901273585428463624
zz_jesse
2021/01/06
4K0
H5基于Canvas实现电子签名并生成PDF文档
所见即所得——HTML转图片组件开发
在我们日常开发中一定会遇到"所见即所得"的需求,如导出查询表格中的内容为 Excel 表格——《前端导出 Excel,让后端刮目相看》(https://juejin.cn/post/7030291455243452429)、通过后台网页配置实现配置预览页与实际页面展示的统一——《从零开发一款可视化大屏制作平台》(https://juejin.cn/post/6937257727106220040)。
政采云前端团队
2022/12/01
3.7K0
所见即所得——HTML转图片组件开发
html导出pdf的四种方式
将html页面导出为pdf文件并打印,可以直接在windows下使用Ctrl + P,苹果下⌘ + P。
二十三年蝉
2018/12/05
5.1K0
html导出pdf的四种方式
推荐阅读
相关推荐
​html2canvas 出现图片无法展示
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验